All pastes #769496 Raw Edit

Someone

public text v1 · immutable
·published 2007-11-11 14:00 UTC
rendered paste body
/********************************************
 *     Xtreme Administration Filterscript  	*
 *     Programmers: Xtreme			    	*
 *     Creation Date: 04/12/2007          	*
 *     Compatibility: SA:MP 0.2           	*
 *     Version: 2.1	|| Release: 1			*
 *******************************************/

#include <a_samp>
#include "xadmin/XtremeAdmin.inc"

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define GetStringArg(%1,%2) for(new x = 0; getarg(%1,x) != '\0'; x++) %2[x] = getarg(%1,x)

#define yellow 0xFFFF00AA
#define green 0x33FF33AA
#define red 0xFF0000AA
#define white 0xFFFFFFAA
#define pink 0xCCFF00FFAA
#define blue 0x00FFFFAA
#define grey 0xC0C0C0AA

static VehicleLockData[MAX_VEHICLES] = false, Menu:GiveMe, Menu:GiveCar; forward PingKick();
//==============================================================================
public OnFilterScriptInit() {
	print("g");
	print("Checking / creating server configuration...");
	//Check if all configuration files are present.
	if(!dini_Exists("/xadmin/Configuration/Configuration.ini")) {
	    dini_Create("/xadmin/Configuration/Configuration.ini");
	    dini_Set("/xadmin/Configuration/Configuration.ini","ServerMessage","None");
	}
	print("Creating user file variables configuration...");
	// Create the variables to be stored in each user's file.
	CreateLevelConfig(
		"IP","Registered","Level","Cash","Kills","Deaths","Password","Wired",
		"WiredWarnings","Jailed"
	);
	// Create Level Config in pattern 'command name, level, command name, level (case is not sensitive):
	print("Creating command level configuration...");
	CreateCommandConfig(
		// Miscellaneous Commands
		"goto",5,"gethere",8,"announce",3,"say",1,"flip",1,"slap",6,"wire",8,"unwire",5,"kick",6,
		"ban",9,"eject",6,"freeze",8,"unfreeze",6,"healall",5,"setsm",3,"givehealth",6,"giveallweapon",7,
		"givecash",7,"giveallcash","ejectall",8,"freezeall",10,"unfreezeall",10,"giveweapon",4,"setlevel",10,7,"givearmour",5,"armourall",5,
		"explode",5,"setname",10,"setgravity",4
	);
	CreateCommandConfigEx(
		"carcolor",1,"gmx",10,"giveme",6,"givecar",7,"xspec",4,"vr",0
	);
	print("Creating main configuration files...");
	UpdateConfigurationVariables();
	print("Initializing Menus...");
	// Giveme Menu
	GiveMe = CreateMenu("~g~Giveme ~w~Administration",2, 200.0, 100.0, 150.0, 150.0);
    if(IsValidMenu(GiveMe)) {
		SetMenuColumnHeader(GiveMe, 0, "Select a car to give yourself:");
		AddMenuItem(GiveMe,0,"Infernus");
		AddMenuItem(GiveMe,0,"NRG500");
		AddMenuItem(GiveMe,0,"Monster Truck");
		AddMenuItem(GiveMe,0,"Packer");
		AddMenuItem(GiveMe,0,"Mountain Bike");
		AddMenuItem(GiveMe,0,"FBI Rancher");
		AddMenuItem(GiveMe,0,"Cheetah");
 		AddMenuItem(GiveMe,1,"Premier");
		AddMenuItem(GiveMe,1,"Hotring");
		AddMenuItem(GiveMe,1,"Seasparrow");
		AddMenuItem(GiveMe,1,"Vortex");
		AddMenuItem(GiveMe,1,"Hydra");
		AddMenuItem(GiveMe,1,"Hunter");
		AddMenuItem(GiveMe,1,"Quad");
 }


	GiveCar = CreateMenu("~b~Givecar ~w~Administration",1,125,150,300);
	if(IsValidMenu(GiveCar)) {
		SetMenuColumnHeader(GiveCar , 0, "Select a car component to add:");
		AddMenuItem(GiveCar ,0,"Nitrous x10");
		AddMenuItem(GiveCar ,0,"Hydraulics");
		AddMenuItem(GiveCar ,0,"Twist Wheels");
	}
	
	if(IsValidMenu(GiveCar)) {
		SetMenuColumnHeader(GiveCar , 0, "pimpen rotjong:");
	}
	print("Complete.");
	SetTimer("PingKick",Config[PingSecondUpdate]*1000,true);
	for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) OnPlayerConnect(i);
	return 1;
}
//==============================================================================
public OnPlayerConnect(playerid) {
	new string[256],PlayerName[24],file[256]; file = GetPlayerFile(playerid);
	GetPlayerName(playerid,PlayerName,24); if(!dini_Exists(file)) CreateUserConfigFile(playerid);
	for(new i = 0; i < 100; i++) {
	    if(strfind(PlayerName,ForbidNames[i],true)!=-1 && Config[ForbidData]) {
			switch(Config[ForbidData]) { case 1: Kick(playerid); case 2: Ban(playerid); }
			return 1;
		}
	}
	if(Config[DisplayServerMessage]) { format(string,sizeof(string),"Server Message: %s",dini_Get("/xadmin/Configuration/Configuration.ini","ServerMessage")); SendClientMessage(playerid,green,string); }
	Variables[playerid][Registered] = GetPlayerFileVar(playerid,"Registered"),
	Variables[playerid][Level] = GetPlayerFileVar(playerid,"Level");
	Variables[playerid][Wired] = GetPlayerFileVar(playerid,"Wired");
	Variables[playerid][Jailed] = GetPlayerFileVar(playerid,"Jailed");
	if(Variables[playerid][Wired]) SetUserInt(playerid,"WiredWarnings",Config[WiredWarnings]);
	if(Variables[playerid][Level] > Config[MaxLevel]) { Variables[playerid][Level] = Config[MaxLevel]; SetUserInt(playerid,"Level",Config[MaxLevel]); }
    if(!Variables[playerid][Registered]) format(string,256,"Welcome, %s. ik zal het je uitleggen: typ \"/REGISTER <PASSWORD>\".",PlayerName);
	else {
		new tmp[50],tmp2[256]; GetPlayerIp(playerid,tmp,50); tmp2 = dini_Get(file,"IP");
		if(!strcmp(tmp,tmp2,true)) {
		    format(string,256,"Welkom terug, %s. autologin scheelt typen harrie;;.",PlayerName);
		    Variables[playerid][LoggedIn] = true;
		}
	 	else {
		 	format(string,256,"Welkom terug, %s. log zo opnieuw in, type \"/LOGIN <PASSWORD>\".",PlayerName);
		 	Variables[playerid][LoggedIn] = false;
		}
	}
	SendClientMessage(playerid,yellow,string);
	for(new i = 0; i < MAX_VEHICLES; i++) if(VehicleLockData[i]) SetVehicleParamsForPlayer(i,playerid,false,true);
	if(Config[DisplayConnectMessages]) { format(string,256,"*** %s has entered julianland.",PlayerName); for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && playerid != i) SendClientMessage(i,grey,string); }
	return 1;
}
//==============================================================================
public OnPlayerSpawn(playerid) {
	if(Variables[playerid][Jailed]) { SetPlayerInterior(playerid,3); SetPlayerPos(playerid,197.6661,173.8179,1003.0234); SetPlayerFacingAngle(playerid,0); }
	return 1;
}
//==============================================================================
public OnPlayerDisconnect(playerid,reason) {
	new Reason[256],string[256],name[24]; GetPlayerName(playerid,name,24);
	switch(reason) { case 0: Reason = "ERRORSKI"; case 1: Reason = "peert em"; case 2: Reason = "Kick/Ban"; }
	format(string,256,"*** %s nokt ermee. (%s)",name,Reason);
	for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && i != playerid) SendClientMessage(i,grey,string);
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && Spec[i][SpectateID] == playerid  && Spec[i][Spectating]) { TogglePlayerSpectating(i,false); Spec[i][Spectating] = false, Spec[i][SpectateID] = INVALID_PLAYER_ID; }
	return 1;
}
//==============================================================================
public OnPlayerDeath(playerid,killerid,reason) {
	#pragma unused killerid
	#pragma unused reason
	for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && Spec[i][SpectateID] == playerid  && Spec[i][Spectating]) { TogglePlayerSpectating(i,false); Spec[i][Spectating] = false, Spec[i][SpectateID] = INVALID_PLAYER_ID; }
	return 1;
}
//==============================================================================
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid) {
	for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && Spec[i][SpectateID] == playerid  && Spec[i][Spectating]) SetPlayerInterior(i,newinteriorid);
	return 1;
}
//==============================================================================
public OnPlayerCommandText(playerid,cmdtext[]) {
	if(!IsPlayerConnected(playerid)) return 0;
	if(Variables[playerid][Jailed] && Config[DisableJailCommands]) return SendClientMessage(playerid,red,"You can NOT use any commands whilst you are jailed.");
	dcmd(register,8,cmdtext);
	dcmd(login,5,cmdtext);
	dcmd(logout,6,cmdtext);
	dcmd(goto,4,cmdtext);
	dcmd(gethere,7,cmdtext);
	dcmd(announce,8,cmdtext);
	dcmd(say,3,cmdtext);
	dcmd(flip,4,cmdtext);
	dcmd(slap,4,cmdtext);
	dcmd(wire,4,cmdtext);
	dcmd(unwire,6,cmdtext);
	dcmd(kick,4,cmdtext);
	dcmd(ban,3,cmdtext);
	dcmd(eject,5,cmdtext);
	dcmd(freeze,6,cmdtext);
	dcmd(unfreeze,8,cmdtext);
	dcmd(healall,7,cmdtext);
	dcmd(givehealth,10,cmdtext);
	dcmd(giveallweapon,13,cmdtext);
	dcmd(ejectall,8,cmdtext);
	dcmd(freezeall,9,cmdtext);
	dcmd(unfreezeall,11,cmdtext);
	dcmd(giveweapon,10,cmdtext);
	dcmd(setlevel,8,cmdtext);
	dcmd(setsm,5,cmdtext);
	dcmd(givecash,8,cmdtext);
	dcmd(giveallcash,11,cmdtext);
	dcmd(givearmour,10,cmdtext);
	dcmd(armourall,9,cmdtext);
	dcmd(explode,7,cmdtext);
	dcmd(setgravity,10,cmdtext);
	dcmd(carcolor,8,cmdtext);
	dcmd(gmx,3,cmdtext);
	dcmd(giveme,6,cmdtext);
	dcmd(givecar,7,cmdtext);
	dcmd(xspec,5,cmdtext);
	dcmd(setname,7,cmdtext);
	dcmd(xcommands,9,cmdtext);
	dcmd(vr,2,cmdtext);
	return 0;
}



//========================[REGISTRATION SYSTEM v2.1]============================
dcmd_register(playerid,params[]) {
	if(!strlen(params)) { new string[256]; format(string,256,"Syntax Error: \"/REGISTER <PASSWORD>\" [Password must be %d+].",Config[MinimumPasswordLength]); return SendClientMessage(playerid,red,string); }
	new index = 0,Password[256],string[256],PlayerFile[256]; Password = strtok(params,index); PlayerFile = GetPlayerFile(playerid);
	if(!(Variables[playerid][Registered] && Variables[playerid][LoggedIn])) {
	    if(strlen(Password) >= Config[MinimumPasswordLength]) {
	        format(string,sizeof(string),"You have registered your account with the password \"%s\" and automatically been logged in.",Password);
			SetUserInt(playerid,"Password",udb_hash(Password));
            SetUserInt(playerid,"Registered",1);
            SetUserInt(playerid,"LoggedIn",1);
	        Variables[playerid][LoggedIn] = true, Variables[playerid][Registered] = true;
	        SendClientMessage(playerid,blue,string);
	        new tmp3[100]; GetPlayerIp(playerid,tmp3,100); SetUserString(playerid,"IP",tmp3); OnPlayerRegister(playerid);
	    } else SendClientMessage(playerid,red,"Syntax Error: \"/REGISTER <PASSWORD>\" [Password must be 3+].");
	} else SendClientMessage(playerid,red,"Error: Make sure that you have not registered and are logged out.");
	return 1;
}
dcmd_login(playerid,params[]) {
    if(!strlen(params)) { SendClientMessage(playerid,red,"Syntax Error: \"/LOGIN <PASSWORD>\"."); return 1; }
	new index = 0;
	new Password[256], string[256]; Password = strtok(params,index);
	new PlayerFile[256]; PlayerFile = GetPlayerFile(playerid);
    if(Variables[playerid][Registered] && !Variables[playerid][LoggedIn]) {
        if(udb_hash(Password) == dini_Int(PlayerFile,"Password")) {
            switch(Variables[playerid][Level]) {
                case 0: format(string,sizeof(string),"You have logged into your account. [Status Level: Member]");
                default: format(string,sizeof(string),"You have logged into your account. [Status Level: Administrator Lv. %d]",Variables[playerid][Level]);
			}
            SendClientMessage(playerid,blue,string);
	        SetUserInt(playerid,"LoggedIn",1); Variables[playerid][LoggedIn] = true;
	        new tmp3[100]; GetPlayerIp(playerid,tmp3,100); SetUserString(playerid,"IP",tmp3);
	        OnPlayerLogin(playerid,true);
        } else { OnPlayerLogin(playerid,false); SendClientMessage(playerid,red,"Syntax Error: \"/LOGIN <PASSWORD>\"."); }
	} else SendClientMessage(playerid,red,"Error: You must be registered to log in; if you have make sure you haven't already logged in.");
	return 1;
}
dcmd_logout(playerid,params[]) {
	#pragma unused params
	new PlayerFile[256]; PlayerFile = GetPlayerFile(playerid);
    if(Variables[playerid][Registered] && Variables[playerid][LoggedIn]) {
		SendClientMessage(playerid,blue,"You have logged out of your account. You may log back in later by typing \"/LOGIN <PASSWORD>\".");
	 	SetUserInt(playerid,"LoggedIn",0); Variables[playerid][LoggedIn] = false; OnPlayerLogout(playerid);
	} else SendClientMessage(playerid,red,"Error: You must be registered and logged into your account first.");
	return 1;
}
//======================[ADMINISTRATION SYSTEM v2.1]============================
dcmd_goto(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"goto")) {
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/GOTO <NICK OR ID>\".");
        new id;
		if(!IsNumeric(params)) id = ReturnPlayerID(params);
		else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
		    SendCommandMessageToAdmins(playerid,"GOTO");
			new string[256],PlayerName[24],ActionName[24],Float:X,Float:Y,Float:Z; GetPlayerName(playerid,PlayerName,24); GetPlayerName(id,ActionName,24);
			new Interior = GetPlayerInterior(id); SetPlayerInterior(playerid,Interior); SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(id)); GetPlayerPos(id,X,Y,Z); if(IsPlayerInAnyVehicle(playerid)) { SetVehiclePos(GetPlayerVehicleID(playerid),X+Config[TeleportXOffset],Y+Config[TeleportYOffset],Z+Config[TeleportZOffset]); LinkVehicleToInterior(GetPlayerVehicleID(playerid),Interior); } else SetPlayerPos(playerid,X+Config[TeleportXOffset],Y+Config[TeleportYOffset],Z+Config[TeleportZOffset]);
			format(string,256,"\"%s\" has teleported to your location.",PlayerName); SendClientMessage(id,yellow,string);
			format(string,256,"You have teleported to \"%s's\" location.",ActionName); return SendClientMessage(playerid,yellow,string);
  		} else return SendClientMessage(playerid,red,"ERROR: You can not teleport to yourself or disconnected players.");
	} else return SendLevelErrorMessage(playerid,"goto");
}
dcmd_gethere(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"gethere")) {
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/GETHERE <NICK OR ID>\".");
        new id;
		if(!IsNumeric(params)) id = ReturnPlayerID(params);
		else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
			SendCommandMessageToAdmins(playerid,"GETHERE");
			new string[256],PlayerName[24],ActionName[24],Float:X,Float:Y,Float:Z; GetPlayerName(playerid,PlayerName,24); GetPlayerName(id,ActionName,24);
			new Interior = GetPlayerInterior(playerid); SetPlayerInterior(id,Interior); SetPlayerVirtualWorld(id,GetPlayerVirtualWorld(playerid)); GetPlayerPos(playerid,X,Y,Z); if(IsPlayerInAnyVehicle(id)) { SetVehiclePos(GetPlayerVehicleID(id),X+Config[TeleportXOffset],Y+Config[TeleportYOffset],Z+Config[TeleportZOffset]); LinkVehicleToInterior(GetPlayerVehicleID(id),Interior); } else SetPlayerPos(id,X+Config[TeleportXOffset],Y+Config[TeleportYOffset],Z+Config[TeleportZOffset]);
   			format(string,256,"You have teleported \"%s\" to your location.",ActionName); SendClientMessage(playerid,yellow,string);
			format(string,256,"You have been teleported to \"%s's\" location.",PlayerName); return SendClientMessage(id,yellow,string);
  		} else return SendClientMessage(playerid,red,"ERROR: You can not teleport yourself or a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"gethere");
}
dcmd_announce(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"announce")) {
        SendCommandMessageToAdmins(playerid,"ANNOUNCE");
    	if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/ANNOUNCE <TEXT>\".");
		return GameTextForAll(params,4000,3);
    } else return SendLevelErrorMessage(playerid,"announce");
}
dcmd_say(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"say")) {
        SendCommandMessageToAdmins(playerid,"SAY");
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/SAY <TEXT>\".");
		new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"** Admin %s: %s",name,params);
		return SendClientMessageToAll(pink,string);
	} else return SendLevelErrorMessage(playerid,"say");
}
dcmd_flip(playerid,params[]) {
	#pragma unused params
	if(IsPlayerCommandLevel(playerid,"flip")) {
	    if(IsPlayerInAnyVehicle(playerid)) {
	        SendCommandMessageToAdmins(playerid,"FLIP");
			new Float:X,Float:Y,Float:Z,Float:Angle,string[256],name[24]; GetPlayerName(playerid,name,24); GetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z); GetVehicleZAngle(GetPlayerVehicleID(playerid),Angle);
			SetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z+2); SetVehicleZAngle(GetPlayerVehicleID(playerid),Angle);
   			format(string,256,"Admin Chat: Administrator \"%s\" has flipped their vehicle.",name); return SendMessageToAdmins(string);
		} else return SendClientMessage(playerid,red,"ERROR: You must be in a vehicle.");
	} else return SendLevelErrorMessage(playerid,"flip");
}
dcmd_slap(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"slap")) {
   		if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/SLAP <NICK OR ID>\".");
   		new id; if(!IsNumeric(params)) id = ReturnPlayerID(params); else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
		    SendCommandMessageToAdmins(playerid,"SLAP");
		    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
		    format(string,256,"Administrator \"%s\" has bitch-slapped \"%s\".",name,ActionName); SendClientMessageToAll(yellow,string);
			new Float:Health; GetPlayerHealth(id,Health); return SetPlayerHealth(id,Health-Config[SlapDecrement]);
		} else return SendClientMessage(playerid,red,"ERROR: You can not slap yourself or a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"slap");
}
dcmd_wire(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"wire")) {
   		if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/WIRE <NICK OR ID> (<REASON>)\".");
        new tmp[256],Index; tmp = strtok(params,Index);
	   	new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
		    if(!Variables[id][Wired]) {
		        SendCommandMessageToAdmins(playerid,"WIRE");
			    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
			    if(!strlen(params[strlen(tmp)+1])) format(string,256,"\"%s\" has been wired by Administrator \"%s\".",ActionName,name);
				else format(string,256,"\"%s\" has been wired by Administrator \"%s\". (Reason: %s)",ActionName,name,params[strlen(tmp)+1]);
				Variables[id][Wired] = true, Variables[id][WiredWarnings] = Config[WiredWarnings];
		    	return SendClientMessageToAll(yellow,string);
			} else return SendClientMessage(playerid,red,"ERROR: This player has already been wired.");
		} else return SendClientMessage(playerid,red,"ERROR: You can not wire yourself or a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"wire");
}
dcmd_unwire(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"unwire")) {
   		if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/UNWIRE <NICK OR ID>\".");
   		new id; if(!IsNumeric(params)) id = ReturnPlayerID(params); else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
		    if(Variables[id][Wired]) {
		        SendCommandMessageToAdmins(playerid,"UNWIRE");
			    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
				Variables[id][Wired] = false, Variables[id][WiredWarnings] = Config[WiredWarnings];
			    if(id != playerid) { format(string,256,"\"%s\" has been unwired by Administrator \"%s\".",ActionName,name); return SendClientMessageToAll(yellow,string); }
			    else return SendClientMessage(playerid,yellow,"You have successfully unwired yourself.");
        	} else return SendClientMessage(playerid,red,"ERROR: This player is not wired.");
		} else return SendClientMessage(playerid,red,"ERROR: You can not unwire a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"unwire");
}
dcmd_kick(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"kick")) {
   		if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/KICK <NICK OR ID> (<REASON>)\".");
   		new tmp[256],Index; tmp = strtok(params,Index);
	   	new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
		    SendCommandMessageToAdmins(playerid,"KICK");
		    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
	    	if(!strlen(params[strlen(tmp)+1])) format(string,256,"\"%s\" has been Kicked from the game by Administrator \"%s\".",ActionName,name);
			else format(string,256,"\"%s\" has been Kicked from the game by Administrator \"%s\". (Reason: %s)",ActionName,name,params[strlen(tmp)+1]);
			SendClientMessageToAll(yellow,string); return Kick(id);
		} else return SendClientMessage(playerid,red,"ERROR: You can not kick yourself or a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"kick");
}
dcmd_ban(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"ban")) {
   		if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/BAN <NICK OR ID> (<REASON>)\".");
   		new tmp[256],Index; tmp = strtok(params,Index);
	   	new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
		    SendCommandMessageToAdmins(playerid,"BAN");
		    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
		    if(!strlen(params[strlen(tmp)+1])) format(string,256,"\"%s\" has been Banned by Administrator \"%s\".",ActionName,name);
			else format(string,256,"\"%s\" has been Banned by Administrator \"%s\". (Reason: %s)",ActionName,name,params[strlen(tmp)+1]);
			SendClientMessageToAll(yellow,string); return Ban(id);
		} else return SendClientMessage(playerid,red,"ERROR: You can not ban yourself or a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"ban");
}
dcmd_eject(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"eject")) {
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/EJECT <NICK OR ID>\".");
   		new id; if(!IsNumeric(params)) id = ReturnPlayerID(params); else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
		    if(IsPlayerInAnyVehicle(id)) {
		        SendCommandMessageToAdmins(playerid,"EJECT");
			    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24); RemovePlayerFromVehicle(id);
			    if(id != playerid) {
					format(string,256,"You have been ejected from your vehicle by Administrator \"%s\".",name); SendClientMessage(id,yellow,string);
			    	format(string,256,"You have ejected Player \"%s\".",ActionName); return SendClientMessage(playerid,yellow,string);
				} else return SendClientMessage(playerid,yellow,"You have ejected yourself from your vehicle.");
			} else return SendClientMessage(playerid,red,"ERROR: This player must be in a vehicle.");
		} else return SendClientMessage(playerid,red,"ERROR: You can not eject a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"eject");
}
dcmd_freeze(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"freeze")) {
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/FREEZE <NICK OR ID>\".");
   		new id; if(!IsNumeric(params)) id = ReturnPlayerID(params); else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
		    SendCommandMessageToAdmins(playerid,"FREEZE");
		    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
		    TogglePlayerControllable(id,false); format(string,256,"Admin Chat: Admnistrator \"%s\" has frozen \"%s\".",name,ActionName); return SendMessageToAdmins(string);
		} else return SendClientMessage(playerid,red,"ERROR: You can not freeze yourself or a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"freeze");
}
dcmd_unfreeze(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"unfreeze")) {
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/UNFREEZE <NICK OR ID>\".");
   		new id; if(!IsNumeric(params)) id = ReturnPlayerID(params); else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
		    SendCommandMessageToAdmins(playerid,"UNFREEZE");
		    new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
		    TogglePlayerControllable(id,true); format(string,256,"Admin Chat: Admnistrator \"%s\" has unfrozen \"%s\".",name,ActionName);
			if(id != playerid) return SendMessageToAdmins(string); else return SendClientMessage(playerid,yellow,"You have unfrozen yourself.");
		} else return SendClientMessage(playerid,red,"ERROR: You can not unfreeze a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"unfreeze");

}
dcmd_healall(playerid,params[]) {
	#pragma unused params
	if(IsPlayerCommandLevel(playerid,"healall")) {
	    SendCommandMessageToAdmins(playerid,"HEALALL");
 		for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) SetPlayerHealth(i,100.0);
 		new string[256],name[24]; GetPlayerName(playerid,name,24);
	    format(string,256,"Everyone has been healed by Administrator \"%s\".",name); return SendClientMessageToAll(yellow,string);
	} else return SendLevelErrorMessage(playerid,"healall");

}
dcmd_setsm(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"setsm")) {
	    SendCommandMessageToAdmins(playerid,"SETSM");
		if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/SETSM <TEXT>\".");
		dini_Set("/xadmin/Configuration/Configuration.ini","ServerMessage",params);
    	new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"Admin Chat: New Server Message: %s",params); SendMessageToAdmins(string); return 1;
	} else return SendLevelErrorMessage(playerid,"setsm");
}
dcmd_givehealth(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"givehealth")) {
	    new tmp[256],tmp2[256],Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index);
	    if(!strlen(tmp)||!strlen(tmp2)||!IsNumeric(tmp2)||!(strval(tmp2) >= 1 && strval(tmp2) <= 100)) return SendClientMessage(playerid,red,"Syntax Error: \"/GIVEHEALTH <NICK OR ID> <1-100>\".");
   		new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
		    SendCommandMessageToAdmins(playerid,"GIVEHEALTH");
			new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
			if(id != playerid) { format(string,256,"Administrator \"%s\" has given you %d percent health.",name,strval(tmp2)); SendClientMessage(id,yellow,string); format(string,256,"You have given \"%s\" %d percent health.",ActionName,strval(tmp2)); SendClientMessage(playerid,yellow,string); }
			else { format(string,256,"You have given yourself %d percent health.",strval(tmp2)); SendClientMessage(playerid,yellow,string); }
			new Float:Health; GetPlayerHealth(id,Health); return SetPlayerHealth(id,Health+strval(tmp2));
		} return SendClientMessage(playerid,red,"ERROR: You can not give a disconnected player health.");
	} else return SendLevelErrorMessage(playerid,"givehealth");
}

dcmd_giveallweapon(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"giveallweapon")) {
	    new tmp[256], tmp2[256], Index; tmp = strtok(params,Index); tmp2 = strtok(params,Index);
	    if(!strlen(tmp)||!strlen(tmp2)||!IsNumeric(tmp2)||!(strval(tmp2) <= 0 || strval(tmp2) <= 10000)) return SendClientMessage(playerid,red,"Syntax Error: \"/GIVEALLWEAPON <WEAPON NAME | ID> <1-10,000>\".");
		new id; if(!IsNumeric(tmp)) id = ReturnWeaponID(tmp); else id = strval(tmp);
		if(id == -1||id==19||id==20||id==21||id==0||id==44||id==45) return SendClientMessage(playerid,red,"ERROR: You have selected an invalid weapon ID.");
        SendCommandMessageToAdmins(playerid,"GIVEALLWEAPON");
		new string[256],name[24],WeaponName[24]; GetWeaponName(id,WeaponName,24); if(id == 18) WeaponName = "Molotov"; GetPlayerName(playerid,name,24); for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) GivePlayerWeapon(i,id,strval(tmp2));
		format(string,256,"Everyone has been given %d \'%s\' by Administrator \"%s\".",strval(tmp2),WeaponName,name); return SendClientMessageToAll(yellow,string);
	} else return SendLevelErrorMessage(playerid,"giveallweapon");
}

dcmd_givecash(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"givecash")) {
	    new tmp[256],tmp2[256],Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index);
	    if(!strlen(tmp)||!strlen(tmp2)||!IsNumeric(tmp2)||!(strval(tmp2) >= 1 && strval(tmp2) <= 1000000)) return SendClientMessage(playerid,red,"Syntax Error: \"/GIVECASH <NICK OR ID> <1 - 1,000,000>\".");
   		new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
		    SendCommandMessageToAdmins(playerid,"GIVECASH");
			new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
			if(id != playerid) { format(string,256,"Administrator \"%s\" has given you $%d.",name,strval(tmp2)); SendClientMessage(id,yellow,string); format(string,256,"You have given \"%s\" $%d.",ActionName,strval(tmp2)); SendClientMessage(playerid,yellow,string); }
			else { format(string,256,"You have given yourself $%d.",strval(tmp2)); SendClientMessage(playerid,yellow,string); }
			return GivePlayerMoney(id,strval(tmp2));
		} return SendClientMessage(playerid,red,"ERROR: You can not give a disconnected player cash.");
	} else return SendLevelErrorMessage(playerid,"givecash");
}

dcmd_giveallcash(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"giveallcash")) {
	    if(!strlen(params)||!IsNumeric(params)||!(strval(params)>=0&&strval(params)<=1000000)) return SendClientMessage(playerid,red,"Syntax Error: \"/GIVEALLCASH <1 - 1,000,000>\".");
        SendCommandMessageToAdmins(playerid,"GIVEALLCASH");
		for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) GivePlayerMoney(i,strval(params));
		new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"Administrator \"%s\" has given every player $%d.",name,strval(params)); return SendClientMessage(playerid,yellow,string);
	} else return SendLevelErrorMessage(playerid,"giveallcash");
}
dcmd_ejectall(playerid,params[]) {
	#pragma unused params
	if(IsPlayerCommandLevel(playerid,"ejectall")) {
	    SendCommandMessageToAdmins(playerid,"EJECTALL");
	    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i)) RemovePlayerFromVehicle(i);
		new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"Administrator \"%s\" reseted ejected everyone from their vehicle.",name); return SendClientMessage(playerid,yellow,string);
	} else return SendLevelErrorMessage(playerid,"ejectall");
}
dcmd_freezeall(playerid,params[]) {
	#pragma unused params
	if(IsPlayerCommandLevel(playerid,"freezeall")) {
	    SendCommandMessageToAdmins(playerid,"FREEZEALL");
	    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) TogglePlayerControllable(i,false);
		new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"Administrator \"%s\" frozen everyone.",name); return SendClientMessage(playerid,yellow,string);
	} else return SendLevelErrorMessage(playerid,"freezeall");
}
dcmd_unfreezeall(playerid,params[]) {
	#pragma unused params
	if(IsPlayerCommandLevel(playerid,"unfreezeall")) {
		SendCommandMessageToAdmins(playerid,"UNFREEZEALL");
	    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) TogglePlayerControllable(i,true);
		new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"Administrator \"%s\" unfrozen everyone.",name); return SendClientMessage(playerid,yellow,string);
	} else return SendLevelErrorMessage(playerid,"unfreezeall");
}
dcmd_giveweapon(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"giveweapon")) {
	    new tmp[256], tmp2[256], tmp3[256], Index; tmp = strtok(params,Index),tmp2 = strtok(params,Index),tmp3 = strtok(params,Index);
	    if(!strlen(tmp)||!strlen(tmp2)||!strlen(tmp3)||!IsNumeric(tmp3)||!(strval(tmp3) <= 0 || strval(tmp3) <= 10000)) return SendClientMessage(playerid,red,"Syntax Error: \"/GIVEWEAPON <NICK OR ID> <WEAPON NAME | ID> <1-10,000>\".");
		new id,id2; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp); if(!IsNumeric(tmp2)) id2 = ReturnWeaponID(tmp2); else id2 = strval(tmp2);
        if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
        	if(id2==-1||id2==19||id2==20||id2==21||id2==0||id2==44||id2==45) return SendClientMessage(playerid,red,"ERROR: You have selected an invalid weapon ID.");
            SendCommandMessageToAdmins(playerid,"GIVEWEAPON");
			new string[256],name[24],ActionName[24],WeaponName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24); GetWeaponName(id2,WeaponName,24); if(id2 == 18) WeaponName = "Molotov";
            if(id != playerid) { format(string,256,"Administrator \"%s\" has given you %d %s.",name,strval(tmp3),WeaponName); SendClientMessage(id,yellow,string); format(string,256,"You have given \"%s\" %d %s.",ActionName,strval(tmp3),WeaponName); SendClientMessage(playerid,yellow,string); }
			else { format(string,256,"You have given yourself %d %s.",strval(tmp3),WeaponName); SendClientMessage(playerid,yellow,string); }
			return GivePlayerWeapon(id,id2,strval(tmp3));
	    } else return SendClientMessage(playerid,red,"ERROR: You can not give a disconnected player a weapon.");
	} else return SendLevelErrorMessage(playerid,"giveweapon");
}
dcmd_setlevel(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"setlevel")) {
	    new tmp[256],tmp2[256],Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index);
	    if(!strlen(tmp)||!strlen(tmp2)||!IsNumeric(tmp2)||!(strval(tmp2) >= 0 && strval(tmp2) <= Config[MaxLevel])) { new string[256]; format(string,256,"Syntax Error: \"SETLEVEL <NICK OR ID> <0 - %d>\".",Config[MaxLevel]); return SendClientMessage(playerid,red,string); }
   		new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
  			if(Variables[id][Level] == strval(tmp2)) return SendClientMessage(playerid,red,"ERROR: That player is already that level.");
			new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
            SendCommandMessageToAdmins(playerid,"SETLEVEL");
			format(string,256,"Administrator \"%s\" has %s you to %s [%d].",name,((strval(tmp2) >= Variables[id][Level])?("promoted"):("demoted")),((strval(tmp2))?("Administrator"):("Member Status")),strval(tmp2)); SendClientMessage(id,yellow,string);
			format(string,256,"You have %s \"%s\" to %s [%d].",((strval(tmp2) >= Variables[id][Level])?("promoted"):("demoted")),ActionName,((strval(tmp2))?("Administrator"):("Member Status")),strval(tmp2)); SendClientMessage(playerid,yellow,string);
			Variables[id][Level] = strval(tmp2); return SetUserInt(id,"Level",strval(tmp2));
		} return SendClientMessage(playerid,red,"ERROR: You can not set set your or a disconnected player's level.");
	} else return SendLevelErrorMessage(playerid,"setlevel");
}
dcmd_givearmour(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"givearmour")) {
	    new tmp[256],tmp2[256],Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index);
	    if(!strlen(tmp)||!strlen(tmp2)||!IsNumeric(tmp2)||!(strval(tmp2) >= 1 && strval(tmp2) <= 100)) return SendClientMessage(playerid,red,"Syntax Error: \"/GIVEARMOUR <NICK OR ID> <1-100>\".");
   		new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
		    SendCommandMessageToAdmins(playerid,"GIVEARMOUR");
			new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
			if(id != playerid) { format(string,256,"Administrator \"%s\" has given you %d armour.",name,strval(tmp2)); SendClientMessage(id,yellow,string); format(string,256,"You have given \"%s\" %d armour.",ActionName,strval(tmp2)); SendClientMessage(playerid,yellow,string); }
			else { format(string,256,"You have given yourself %d armour.",strval(tmp2)); SendClientMessage(playerid,yellow,string); }
			new Float:Armour; GetPlayerArmour(id,Armour); return SetPlayerArmour(id,Armour+strval(tmp2));
		} return SendClientMessage(playerid,red,"ERROR: You can not give a disconnected player armour.");
	} else return SendLevelErrorMessage(playerid,"givearmour");
}
dcmd_armourall(playerid,params[]) {
	#pragma unused params
	if(IsPlayerCommandLevel(playerid,"armourall")) {
	    SendCommandMessageToAdmins(playerid,"ARMOURALL");
 		for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) SetPlayerArmour(i,100.0);
 		new string[256],name[24]; GetPlayerName(playerid,name,24);
	    format(string,256,"Everyone's armour has been restored by Administrator \"%s\".",name); return SendClientMessageToAll(yellow,string);
	} else return SendLevelErrorMessage(playerid,"armourall");
}
dcmd_explode(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"explode")) {
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/EXPLODE <NICK OR ID>\".");
   		new id; if(!IsNumeric(params)) id = ReturnPlayerID(params); else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
		    SendCommandMessageToAdmins(playerid,"EXPLODE");
  			new string[256],name[24],ActionName[24],Float:X,Float:Y,Float:Z; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
			if(!IsPlayerInAnyVehicle(id)) GetPlayerPos(id,X,Y,Z); else GetVehiclePos(GetPlayerVehicleID(id),X,Y,Z); for(new i = 1; i <= 5; i++) CreateExplosion(X,Y,Z,10,0);
		    if(id != playerid) {
				format(string,256,"You have been exploded by Administrator \"%s\".",name); SendClientMessage(id,yellow,string);
		    	format(string,256,"You have exploded Player \"%s\".",ActionName); return SendClientMessage(playerid,yellow,string);
			} else return SendClientMessage(playerid,yellow,"You have exploded yourself.");
		} else return SendClientMessage(playerid,red,"ERROR: You can not explode a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"explode");
}
dcmd_setgravity(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"setgravity")) {
	    if(!strlen(params)||!(strval(params)<=50&&strval(params)>=-50)) return SendClientMessage(playerid,red,"Syntax Error: \"/SETGRAVITY <-50.0 - 50.0>\".");
        SendCommandMessageToAdmins(playerid,"SETGRAVITY");
		new string[256],name[24]; GetPlayerName(playerid,name,24); new Float:Gravity = floatstr(params);format(string,256,"Admnistrator \"%s\" has set the gravity to: \'%f\'.",name,Gravity);
		SetGravity(Gravity); return SendClientMessageToAll(yellow,string);
	} else return SendLevelErrorMessage(playerid,"setgravity");
}
dcmd_carcolor(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"carcolor")) {
	    new tmp[256],tmp2[256],Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index);
	    if(!strlen(tmp)||!(strval(tmp) >= 0 && strval(tmp) <= 126)||!IsNumeric(tmp)||!IsNumeric(tmp2)) return SendClientMessage(playerid,red,"Syntax Error: \"/CARCOLOR <COLOR 1> (<COLOR 2>)\".");
		if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,red,"ERROR: You must be in a vehicle.");
        SendCommandMessageToAdmins(playerid,"CARCOLOR");
		if(!strlen(tmp2)) tmp2 = tmp;
		new string[256],name[24]; GetPlayerName(playerid,name,24);
		format(string,256,"You have set your color data to: [Color 1: %d || Color 2: %d]",strval(tmp),strval(tmp2));
		return ChangeVehicleColor(GetPlayerVehicleID(playerid),strval(tmp),strval(tmp2));
	} else return SendLevelErrorMessage(playerid,"carcolor");
}
dcmd_gmx(playerid,params[]) {
    #pragma unused params
    if(IsPlayerCommandLevel(playerid,"gmx")) {
        SendCommandMessageToAdmins(playerid,"GMX");
        new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"Administrator \"%s\" has restarted the game mode.",name); SendClientMessageToAll(yellow,string); return GameModeExit();
    } else return SendLevelErrorMessage(playerid,"gmx");
}
dcmd_giveme(playerid,params[]) {
    #pragma unused params
    if(IsPlayerCommandLevel(playerid,"giveme")) {
        if(Spec[playerid][Spectating]) return SendClientMessage(playerid,red,"ERROR: You must not be spectating.");
        if(!IsPlayerInAnyVehicle(playerid)) {
        	TogglePlayerControllable(playerid,false);
        	SetCameraBehindPlayer(playerid);
        	return ShowMenuForPlayer(GiveMe,playerid);
        } else return SendClientMessage(playerid,red,"ERROR: You can not be in a vehicle.");
    } else return SendLevelErrorMessage(playerid,"giveme");
}
dcmd_givecar(playerid,params[]) {
    #pragma unused params
    if(IsPlayerCommandLevel(playerid,"givecar")) {
        if(Spec[playerid][Spectating]) return SendClientMessage(playerid,red,"ERROR: You must not be spectating.");
        if(IsPlayerInAnyVehicle(playerid)) {
            new Car = GetPlayerVehicleID(playerid), Model = GetVehicleModel(Car);
            switch(Model) { case 448,461,462,463,468,471,509,510,521,522,523,581,586: return SendClientMessage(playerid,red,"ERROR: You can not add components to bikes!"); }
        	TogglePlayerControllable(playerid,false);
        	SetCameraBehindPlayer(playerid);
        	return ShowMenuForPlayer(GiveCar,playerid);
        } else return SendClientMessage(playerid,red,"ERROR: You must be in a vehicle.");
    } else return SendLevelErrorMessage(playerid,"givecar");
}
dcmd_xspec(playerid,params[]) {
	if(IsPlayerCommandLevel(playerid,"xspec")) {
	    if(!strlen(params)) return SendClientMessage(playerid,red,"Syntax Error: \"/XSPEC <NICK OR ID | OFF>\".");
        new id;
		if(!IsNumeric(params)) {
		    if(!strcmp(params,"off",true)) {
		        if(!Spec[playerid][Spectating]) return SendClientMessage(playerid,red,"ERROR: You must be spectating.");
		        SendCommandMessageToAdmins(playerid,"XSPEC");
		        TogglePlayerSpectating(playerid,false);
		        Spec[playerid][Spectating] = false;
		        return SendClientMessage(playerid,yellow,"You have turned your spectator mode off.");
		    }
		  	id = ReturnPlayerID(params);
		}
		else id = strval(params);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid) {
		    SendCommandMessageToAdmins(playerid,"SPEC");
		    new string[256],name[24]; GetPlayerName(id,name,24);
		    if(Spec[id][Spectating]) return SendClientMessage(playerid,red,"Error: You can not spectate a player already spectating.");
	        if(Spec[playerid][Spectating] && Spec[playerid][SpectateID] == id) return SendClientMessage(playerid,red,"ERROR: You are already spectating this player.");
			Spec[playerid][Spectating] = true, Spec[playerid][SpectateID] = id;
	        SetPlayerInterior(playerid,GetPlayerInterior(id));
	        TogglePlayerSpectating(playerid,true);
			if(!IsPlayerInAnyVehicle(id)) PlayerSpectatePlayer(playerid,id);
			else PlayerSpectateVehicle(playerid,GetPlayerVehicleID(id));
	    	format(string,256,"You are now spectating player \"%s\".",name); return SendClientMessage(playerid,yellow,string);
		} else return SendClientMessage(playerid,red,"ERROR: You can not spectate yourself or a disconnected player.");
	} else return SendLevelErrorMessage(playerid,"spec");
}
dcmd_setname(playerid,params[]) {
    if(IsPlayerCommandLevel(playerid,"setname")) {
    	new tmp[256],tmp2[256],Index; tmp = strtok(params,Index), tmp2 = strtok(params,Index);
   	 	if(!strlen(tmp)||!strlen(tmp2)) return SendClientMessage(playerid,red,"Syntax Error: \"/SETNAME <NICK OR ID> <NEW NAME>\".");
   		new id; if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp); else id = strval(tmp);
		if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID) {
            SendCommandMessageToAdmins(playerid,"SETNAME");
			new string[256],name[24],ActionName[24]; GetPlayerName(playerid,name,24); GetPlayerName(id,ActionName,24);
			if(id != playerid) { format(string,256,"Administrator \"%s\" has set your name to %s.",name,tmp2); SendClientMessage(id,yellow,string); format(string,256,"You have set \"%s's\" name to %s.",ActionName,tmp2); SendClientMessage(playerid,yellow,string); }
			else { format(string,256,"You've set your name to %s.",tmp2); SendClientMessage(playerid,yellow,string); }
			OnPlayerConnect(id); return SetPlayerName(id,tmp2);
		} return SendClientMessage(playerid,red,"ERROR: You can not set a disconnected player's name.");
	} else return SendLevelErrorMessage(playerid,"setname");
}
dcmd_xcommands(playerid,params[]) {
    #pragma unused params
	if(!IsPlayerXAdmin(playerid)) return SendClientMessage(playerid,red,"ERROR: You must be an administrator to view these commands.");
	SendClientMessage(playerid,yellow,"morning,afternoon,evening,midnight,settime,goto,gethere,announce,say,flip,slap,(un)wire,kick,ban");
	SendClientMessage(playerid,yellow,"akill,eject(all),(un)freeze(all),outside,healall,uconfig,setsm,givehealth,sethealth,skinall,armourall");
	SendClientMessage(playerid,yellow,"resetallweapons,set/give/rem/reset(all)cash,god,resetscores,setlevel,setskin,givearmour,setarmour");
	SendClientMessage(playerid,yellow,"setammo,setscore,ip,ping,explode,setname,setalltime,force,set(all)world,setgravity,set(all)wanted");
	return SendClientMessage(playerid,yellow,"carcolor,give(all)weapon,x(unlock),gmx,carhealth,setping,giveme,givecar,xspec,xcommands");
}
dcmd_vr(playerid,params[]) {
	#pragma unused params
	if(IsPlayerCommandLevel(playerid,"vr")) {
    	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,red,"GZM no in voertuig harrie.");
		SetVehicleHealth(GetPlayerVehicleID(playerid),1000.0);
		return SendClientMessage(playerid,yellow,"gerepareerd harremans!");
	} else return SendLevelErrorMessage(playerid,"vr");
}

//========================[WIRE Text Event]=====================================
public OnPlayerText(playerid,text[]) {
	if(text[0] == '#' && IsPlayerXAdmin(playerid)) {
	    new string[256],name[24]; GetPlayerName(playerid,name,24); format(string,256,"Admin %s: %s",name,text[1]); SendMessageToAdmins(string);
	    return 0;
	}
	if(Variables[playerid][Wired]) {
	    Variables[playerid][WiredWarnings]--;
	    new string[256],Name[24];
	    if(Variables[playerid][WiredWarnings]) {
	        format(string,256,"You have been wired thus preventing you from talking. [Warnings: %d/%d]",Variables[playerid][WiredWarnings],Config[WiredWarnings]);
			SendClientMessage(playerid,white,string); return 0;
		}
		else {
		    GetPlayerName(playerid,Name,24); format(string,256,"%s has been kicked from the server. [REASON: Wired]",Name);
		    SendClientMessageToAll(yellow,string); SetUserInt(playerid,"Wired",0);
		    Kick(playerid); return 0;
		}
	}
	return 1;
}
//==============================================================================
public OnPlayerExitVehicle(playerid, vehicleid) {
	if(VehicleLockData[vehicleid]) { VehicleLockData[vehicleid] = false; for(new i = 0; i < MAX_PLAYERS; i++) SetVehicleParamsForPlayer(vehicleid,i,false,false); }
	for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && Spec[i][SpectateID] == playerid  && Spec[i][Spectating]) { TogglePlayerSpectating(i,false); SetPlayerInterior(i,GetPlayerInterior(playerid)); TogglePlayerSpectating(i,true); PlayerSpectatePlayer(i,playerid); }
	return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger){
	#pragma unused ispassenger
    for(new i = 0; i < MAX_PLAYERS; i++) if(Spec[i][SpectateID] == playerid && Spec[i][Spectating]) { TogglePlayerSpectating(i,false); SetPlayerInterior(i,GetPlayerInterior(playerid)); TogglePlayerSpectating(i,true); PlayerSpectateVehicle(i,vehicleid); }
	return 1;
}

//==============================================================================
public OnPlayerSelectedMenuRow(playerid, row) {
  	new Menu:Current = GetPlayerMenu(playerid);
  	if(Current == GiveMe) {
		new car[20],Float:X,Float:Y,Float:Z,Float:Angle,id,carid;
		GetPlayerPos(playerid,X,Y,Z); GetPlayerFacingAngle(playerid,Angle);
	    switch(row) {
	      case 0: car = "Infernus", id = 411;
	      case 1: car = "NRG500", id = 522;
	      case 2: car = "Monster Truck", id = 444;
	      case 3: car = "Packer", id = 443;
	      case 4: car = "Mountain Bike", id = 510;
	      case 5: car = "FBI Rancher", id = 490;
	      case 6: car = "Cheetah", id = 415;
	      case 7: car = "Premier", id = 426;
	      case 8: car = "Hotring", id = 494;
	      case 9: car = "Seasparrow", id = 447;
	      case 10: car = "Vortex", id = 539;
	      case 11: car = "Hydra", id = 520;
	      case 12: car = "Hunter", id = 425;
	      case 13: car = "Quad", id = 471;

	    }
	    SendCommandMessageToAdmins(playerid,"GIVEME");
	    new string[256]; format(string,sizeof(string),"You have selected \'%s\'.",car); SendClientMessage(playerid,yellow,string);
		carid = CreateVehicle(id,X,Y,Z,Angle,-1,-1,50000);
		PutPlayerInVehicle(playerid,carid,0);
		TogglePlayerControllable(playerid,true);
		if(GetPlayerInterior(playerid)) LinkVehicleToInterior(carid,GetPlayerInterior(playerid));
		SetVehicleVirtualWorld(carid,GetPlayerVirtualWorld(playerid));
	}
	if(Current == GiveCar) {
		new Component[20],id,carid;
	    switch(row) {
	      case 0: Component = "Nitrous x10", id = 1010;
	      case 1: Component = "Hydraulics", id = 1087;
	      case 2: Component = "Grove Wheels", id = 1081;
	      case 3: Component = "Twist Wheels", id = 1078;
	      case 4: Component = "Wire Wheels", id = 1076;
	    }
	    SendCommandMessageToAdmins(playerid,"GIVECAR");
	    new string[256]; format(string,sizeof(string),"You have selected \'%s\'.",Component); SendClientMessage(playerid,yellow,string);
        TogglePlayerControllable(playerid,true);
		carid = GetPlayerVehicleID(playerid); AddVehicleComponent(carid,id);
	}
	return 1;
}
//==============================================================================
public OnPlayerExitedMenu(playerid) {
    new Menu:Current = GetPlayerMenu(playerid);
    HideMenuForPlayer(Current,playerid);
    return TogglePlayerControllable(playerid,true);
}
//==============================================================================
public PingKick() {
	if(Config[MaxPing]) {
	    for(new i = 0,string[256],name[24]; i < MAX_PLAYERS; i++)
	    if(IsPlayerConnected(i) && (GetPlayerPing(i) > Config[MaxPing])) {
	        if(!IsPlayerXAdmin(i) || (IsPlayerXAdmin(i) && !Config[AdminImmunity])) {
	        	GetPlayerName(i,name,24); format(string,256,"\"%s\" has been kicked from the server. (Reason: High Ping || Max Allowed: %d)",name,Config[MaxPing]);
	        	SendClientMessageToAll(yellow,string); Kick(i);
	        }
	    }
	}
}