All pastes #1051900 Raw Edit

samp gm (test) 1

public text v1 · immutable
#1051900 ·published 2008-06-20 13:13 UTC
rendered paste body
#include <a_samp>
#include <dutils>
#include <dudb>
#include <dini>
/*                                       DCMD                                 */
#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
/*			                        	COLORS                                */
#define COLOR_BLUE 0x0000FFAA
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_PURPLE 0x9900FFAA
#define COLOR_BROWN 0x993300AA
#define COLOR_ORANGE 0xFF9933AA
#define COLOR_CYAN 0x99FFFFAA
#define COLOR_PINK 0xFF66FFAA
#define COLOR_LIME 0x99FF00AA
#define COLOR_BLACK 0x000000AA
#define COLOR_TURQ 0x00A3C0AA

#define SLOTS 8

enum playerdata {
    Registered,
	LoggedIn,
	Level,
	Muted,
	Jailed,
	JailTime,
	Frozen,
	FreezeTime,
	Kills,
	Deaths,
	God,
	Warnings,
	Spawned,
	TimesSpawned,
	Spam
};

enum ServerData {
	MaxPing,
	ReadPMs,
	ReadCmds,
	MaxAdminLevel,
	AdminOnlySkins,
	AdminSkin,
	NameKick,
	AntiBot,
	AntiSpam,
 	AntiSwear,
 	NoCaps,
	Locked
};

new playerinfo[MAX_PLAYERS][playerdata];
new ServerInfo[ServerData];
new InDuel[MAX_PLAYERS];
new cdt=-1;	new CountTimer;

main()
{
	print("\n----------------------------------");
	print("            Paul Gm 0.1          ");
	print("----------------------------------\n");
}

public OnGameModeInit()
{
	SetGameModeText("Blank Script");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	return 1;
}

public OnGameModeExit()
{
    print("\n----------------------------------");
	print("         Exiting Paul Gm 0.1       ");
	print("----------------------------------\n");
	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)
{
	new enters [47];
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	format(enters, sizeof(enters), "%s e' entrato nel server", name);
	SendClientMessageToAll(COLOR_YELLOW, enters);
	
	playerinfo[playerid][Deaths] = 0;
	playerinfo[playerid][Kills] = 0;
	playerinfo[playerid][Jailed] = 0;
	playerinfo[playerid][Level] = 0;
	playerinfo[playerid][LoggedIn] = 0;
	playerinfo[playerid][Registered] = 0;
	playerinfo[playerid][TimesSpawned] = 0;
	playerinfo[playerid][Muted] = 0;
	playerinfo[playerid][God] = 0;

	if (udb_Exists(name))
	{
	    new file[MAX_PLAYER_NAME], tmp [50], tmp2[256];
	    format(file, sizeof(file), "users/%s.sav", udb_encode(name));
		GetPlayerIp(playerid, tmp, sizeof(tmp));
		tmp2 = dini_Get(file,"ip");
		if(!strcmp(tmp,tmp2,true))
  		{
			SendClientMessage(playerid, COLOR_ORANGE,"ACCOUNT: Bentornato!");
			SendClientMessage(playerid,COLOR_ORANGE, "ACCOUNT: Automaticamente loggato!");
			ResetPlayerMoney(playerid);
			GivePlayerMoney(playerid,dUserINT(name).("money"));
			playerinfo[playerid][Deaths] = (dUserINT(name).("deaths"));
	        playerinfo[playerid][Kills] = (dUserINT(name).("kills"));
	        playerinfo[playerid][Level] = (dUserINT(name).("level"));
	        playerinfo[playerid][Frozen] = (dUserINT(name).("frozen"));
       		playerinfo[playerid][Jailed] = (dUserINT(name).("jailed"));
       		playerinfo[playerid][JailTime] = (dUserINT(name).("jailtime"));
       		playerinfo[playerid][FreezeTime] = (dUserINT(name).("freezetime"));
	        playerinfo[playerid][Registered] = 1;
    	    playerinfo[playerid][LoggedIn] = 1;
		}
		else
		{
		    SendClientMessage(playerid,COLOR_ORANGE, "ACCOUNT: questo player e' gia' registrato!  Usa /login [password]");
		}
		
	}
	else if (!udb_Exists(name))
	{
	    new msg[256];
	    format(msg,sizeof(msg),"ACCOUNT: Ciao %s! Scrivi /register [password] per registrarti!",name);
	    SendClientMessage(playerid,COLOR_ORANGE, msg);
	}
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	new exits [57];
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	switch(reason)
    {
        case 0: format(exits, sizeof(exits), "%s e' uscito dal server. (Timeout)", name);
        case 1: format(exits, sizeof(exits), "%s e' uscito dal server. (Leaving)", name);
        case 2: format(exits, sizeof(exits), "%s e' uscito dal server. (Kicked)", name);
    }
	SendClientMessageToAll(COLOR_YELLOW, exits);
	
	if (playerinfo[playerid][LoggedIn] == 1)
	{
 		dUserSetINT(name).("money",GetPlayerMoney(playerid));
	    dUserSetINT(name).("kills",playerinfo[playerid][Kills]);
		dUserSetINT(name).("deaths",playerinfo[playerid][Deaths]);
		dUserSetINT(name).("jailtime",playerinfo[playerid][JailTime]);
		dUserSetINT(name).("freezetime",playerinfo[playerid][FreezeTime]);
		new	Float:health;	GetPlayerHealth(playerid, Float:health);
		new	Float:armour;	GetPlayerArmour(playerid, Float:armour);
		new year,month,day;	getdate(year, month, day);
		new strdate[20];	format(strdate, sizeof(strdate), "%d.%d.%d",day,month,year);
		new file[256]; format(file,sizeof(file),"users/%s.sav",udb_encode(name));
		dUserSetINT(name).("health",floatround(health));
        dUserSetINT(name).("armour",floatround(armour));
		dini_Set(file,"LastOn",strdate);
	}
	playerinfo[playerid][LoggedIn] = 0;
  	playerinfo[playerid][Level] = 0;
  	playerinfo[playerid][God] = 0;
	return 1;
}

public OnPlayerSpawn(playerid)
{
	playerinfo[playerid][Spawned] = 1;
    if(playerinfo[playerid][Frozen] == 1)
	{
		TogglePlayerControllable(playerid,false); SendClientMessage(playerid,COLOR_GREY,"Sei ancora freezato!");
	}
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	if(playerinfo[playerid][LoggedIn]==1)
 	{
		playerinfo[playerid][Deaths]++;
	}
	SendDeathMessage(killerid, playerid,reason);
	return 1;
}

public OnVehicleSpawn(vehicleid)
{
	return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
	return 1;
}

public OnPlayerText(playerid, text[])
{
/*                    CHAT    LOGS                                            */
    new File:ftw=fopen("logs/chatlog.txt", io_append);
	new year,month,day;
	getdate(year,month,day);
	new hour,minute,second;
	gettime(hour, minute, second);
	new ip[16];
	GetPlayerIp(playerid,ip,sizeof(ip));
	new pname[MAX_PLAYER_NAME];
	GetPlayerName(playerid,pname,sizeof(pname));
 	new fstring[256];
	format(fstring, sizeof(fstring), "[%d/%d/%d][%d.%d.%d][%s]%s:%s\r\n",day,month,year,hour,minute,second,ip,pname,text);
	fwrite(ftw, fstring);
 	fclose(ftw);
	return 1;
}

public OnPlayerPrivmsg(playerid, recieverid, text[])
{
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
/*                                   DCMD                                     */
    dcmd(kill, 4, cmdtext);
	dcmd(register, 8,cmdtext);
	dcmd(login,5,cmdtext);
 	dcmd(jail, 4, cmdtext);
 	dcmd(logout, 6, cmdtext);
 	dcmd(asay, 4, cmdtext);
 	dcmd(clearchat, 9, cmdtext);
 	dcmd(clearallchat, 12, cmdtext);
 	dcmd(getid, 5, cmdtext);
 	dcmd(report, 6, cmdtext);
 	dcmd(teleplayer, 10, cmdtext);
 	dcmd(warn, 5, cmdtext);
 	dcmd(duel,4,cmdtext);
 	dcmd(countdown, 9, cmdtext);
 	dcmd(fix, 3, cmdtext);
 	dcmd(resetstats, 10, cmdtext);
 	dcmd(changepass, 10, cmdtext);
 	dcmd(stats, 5, cmdtext);
 	dcmd(god, 3, cmdtext);
	return 0;
}
/*                                      COMMANDS                              */
dcmd_kill(playerid, params[])
{
    #pragma unused params
	new money = GetPlayerMoney(playerid);
	SetPlayerHealth(playerid, 0);
	ResetPlayerMoney(playerid);
	GivePlayerMoney(playerid, money-1000);
	return 1;
}
dcmd_register(playerid, params[])
{
	new name[MAX_PLAYER_NAME];
	new exists [256];
	GetPlayerName(playerid, name, sizeof(name));
	if (playerinfo[playerid][LoggedIn] == 1) return SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: Gia' loggato!");
    if (strlen(params)==0) return SendClientMessage(playerid, COLOR_ORANGE,"ACCOUNT /register [password]");
	if (strlen(params)<4) return SendClientMessage(playerid, COLOR_ORANGE,"ACCOUNT: La password deve contenere piu' di 3 caratteri");
    if(udb_Exists(name)){
    	format(exists,sizeof(exists),"ACCOUNT: Il player con nome %s esiste gia'! Cambia nome!",name);
        SendClientMessage(playerid,COLOR_ORANGE,exists);
 	}
    if (udb_Create(name,params))
	{

    	new file[256], tmp3[100];
    	new strdate[20], year,month,day;	getdate(year, month, day);
		GetPlayerName(playerid,name,24); format(file,256,"users/%s.sav",udb_encode(name));
     	GetPlayerIp(playerid,tmp3,sizeof(tmp3));	dUserSet(name).("ip",tmp3);
    	dUserSet(name).("password",params);
	    dUserSetINT(name).("registered",1);
   		format(strdate, sizeof(strdate), "%d/%d/%d",day,month,year);
		dUserSet(name).("RegisteredDate",strdate);
		dUserSetINT(name).("level",0);
		dUserSetINT(name).("frozen",0);
		dUserSetINT(name).("freezetime",0);
		dUserSetINT(name).("jailed",0);
		dUserSetINT(name).("jailtime",0);
		dUserSetINT(name).("kills",0);
		dUserSetINT(name).("deaths",0);
		dUserSetINT(name).("money",0);
		dUserSetINT(name).("exp",0);
		dUserSet(name).("LastOn",strdate);
	    playerinfo[playerid][LoggedIn] = 1;
	    playerinfo[playerid][Registered] = 1;
	    SendClientMessage(playerid, COLOR_ORANGE, "ACCOUNT: Registrato e automaticamente loggato!");
		PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
    	if(playerinfo[playerid][Spawned] == 1) TogglePlayerControllable(playerid,true);
		return 1;
	}
    return 1;
}
dcmd_login(playerid,params[])
{
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
    if (playerinfo[playerid][LoggedIn] == 1) return SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: Gia loggato!");
    if (!udb_Exists(name)) return SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: L'account non esiste, usa /register [password].");
    if (strlen(params)==0) return SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: USO:: /login [password]");
    if (!udb_CheckLogin(name,params))
	{
 		return SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: Login fallito! Password sbagliata!");
	}
	else
	{
	    new money;
	    money = (dUserINT(name).("money"));
       	ResetPlayerMoney(playerid);
       	GivePlayerMoney(playerid, money);
       	playerinfo[playerid][Deaths] = (dUserINT(name).("deaths"));
       	playerinfo[playerid][Kills] = (dUserINT(name).("kills"));
       	playerinfo[playerid][Level] = (dUserINT(name).("level"));
       	playerinfo[playerid][Frozen] = (dUserINT(name).("frozen"));
       	playerinfo[playerid][Jailed] = (dUserINT(name).("jailed"));
       	playerinfo[playerid][LoggedIn] = 1;
	   	playerinfo[playerid][Registered] = 1;

		new file[256]; GetPlayerName(playerid,name,24); format(file,256,"users/%s.sav",udb_encode(name));
       	new tmp3[100]; GetPlayerIp(playerid,tmp3,100);	dini_Set(file,"ip",tmp3);

       	if(playerinfo[playerid][Spawned] == 1) TogglePlayerControllable(playerid,true);

	   	PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
	   
	   	SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: Loggato!");
	   	SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: Bentornato!");
       	return 1;
    }
}
dcmd_jail(playerid,params[])
{
	new name[MAX_PLAYER_NAME], adminname[MAX_PLAYER_NAME], string[256], time, reason[256];
	GetPlayerName(playerid, name, sizeof(name)); GetPlayerName(playerid, adminname, sizeof(adminname));
    if(playerinfo[playerid][Level] >= 3)
	{
	    new player1;
		if (sscanf(params, "ddz", player1, time, reason))return SendClientMessage(playerid, COLOR_PURPLE, "USO: /jail [playerid] [time] [reason]");
		if(!IsPlayerConnected(player1) || playerid == INVALID_PLAYER_ID)
		{
			SendClientMessage(playerid,COLOR_RED,"ERRORE: Il player non e' connesso o sei tu!");
			return 1;
		}
		if(time < 10 )
		{
			SendClientMessage(playerid,COLOR_RED,"ERRORE: Tempo sbagliato (deve essere maggiore di 10 secondi)");
			return 1;
		}
   		CMDMessageToAdmins(playerid,"LJail");
		GetPlayerName(player1, name, sizeof(name));		GetPlayerName(playerid, adminname, sizeof(adminname));
		format(string,sizeof(string),"L'amministratore %s ti ha messo in cella per %d secondi[reason: %s]",adminname,time,reason);	SendClientMessage(player1,COLOR_TURQ,string);
		format(string,sizeof(string),"L'amministratore %s ha messo in cella %s per %d secondi [reason: %s]",adminname, name, time, reason); SendClientMessageToAll(COLOR_TURQ,string);
		playerinfo[player1][JailTime] = time;
    	SetTimerEx("JailPlayer",5000,0,"d",player1);
    	SetTimerEx("Jail1",1000,0,"d",player1);
    	playerinfo[player1][Jailed] = 1;
    	playerinfo[player1][JailTime] = time;
	}
	else
	{
		SendClientMessage(playerid,COLOR_RED,"ERRORE: Non hai un livello abbastanza alto per usare questo comando!");
	}
	return 1;
}
dcmd_logout(playerid,params[])
{
    #pragma unused params
	if (playerinfo[playerid][LoggedIn] == 1)
	{
		new name[MAX_PLAYER_NAME];
		dUserSetINT(name).("money",GetPlayerMoney(playerid));
		dUserSetINT(name).("kills",playerinfo[playerid][Kills]);
		dUserSetINT(name).("deaths",playerinfo[playerid][Deaths]);
		dUserSetINT(name).("jailtime",playerinfo[playerid][JailTime]);
		dUserSetINT(name).("freezetime",playerinfo[playerid][FreezeTime]);
		new	Float:health;	GetPlayerHealth(playerid, Float:health);
		new	Float:armour;	GetPlayerArmour(playerid, Float:armour);
		new year,month,day;	getdate(year, month, day);
		new strdate[20];	format(strdate, sizeof(strdate), "%d.%d.%d",day,month,year);
		new file[256]; format(file,sizeof(file),"users/%s.sav",udb_encode(name));
		dUserSetINT(name).("health",floatround(health));
    	dUserSetINT(name).("armour",floatround(armour));
		dini_Set(file,"LastOn",strdate);
 		playerinfo[playerid][LoggedIn] = 0;
  		playerinfo[playerid][Level] = 0;
  	}
  	else
  	{
 		SendClientMessage(playerid, COLOR_ORANGE, "ACCOUNT: Non sei piu' loggato!");
	}
}
dcmd_asay(playerid,params[])
{
	if(playerinfo[playerid][Level] >= 2)
	{
	 	new adminname[MAX_PLAYER_NAME], string[256];
  		if(strlen(params)==0) return SendClientMessage(playerid, COLOR_PURPLE, "USO: /asay [text]");
		GetPlayerName(playerid, adminname, sizeof(adminname));
		format(string, sizeof(string), "**Admin %s: %s",adminname,params);
		SendClientMessageToAll(COLOR_PINK,string);
	}
	else
	{
  	SendClientMessage(playerid,COLOR_RED,"ERRORE: Devi essere almeno di livello 2 per usare questo comando");
 	}
	return 1;
}
dcmd_clearchat(playerid,params[])
{
 	#pragma unused params
	if(playerinfo[playerid][Level] >= 2)
	{
		CMDMessageToAdmins(playerid,"CLEARCHAT");
		for(new i = 0; i < 11; i++) SendClientMessageToAll(COLOR_GREEN," ");
 	}
 	else
	{
  		SendClientMessage(playerid,COLOR_RED,"ERRORE: Devi essere almeno di livello 2 per usare questo comando");
 	}
	return 1;
}
dcmd_clearallchat(playerid,params[])
{
	#pragma unused params
	if(playerinfo[playerid][Level] >= 4)
	{
		CMDMessageToAdmins(playerid,"CLEARALLCHAT");
		for(new i = 0; i < 50; i++) SendClientMessageToAll(COLOR_GREEN," ");
 	}
 	else
 	{
  	SendClientMessage(playerid,COLOR_RED,"ERRORE: Devi essere almeno di livello 4 per usare questo comando");
  	}
	return 1;
}
dcmd_getid(playerid,params[])
{
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	new string[256];
	if(!strlen(params)) return SendClientMessage(playerid,COLOR_PURPLE,"USO: /getid [parte del nick]");
	format(string,sizeof(string),"Ricerca di: \"%s\": ",params);
	SendClientMessage(playerid,COLOR_LIME,string);
	new found;
	for(new i=0; i <= MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i))
		{
	  		GetPlayerName(i, name, MAX_PLAYER_NAME);
			new namelen = strlen(name);
			new bool:searched=false;
	    	for(new pos=0; pos <= namelen; pos++)
			{
				if(searched != true)
				{
					if(strfind(name,params,true) == pos)
					{
		                found++;
						format(string,sizeof(string),"%d. %s (ID %d)",found,name,i);
						SendClientMessage(playerid, COLOR_LIME ,string);
						searched = true;
					}
				}
			}
		}
	}
	return 1;
}
dcmd_report(playerid, params[])
{
	    new reported;
	    new reason[256];
 		if (sscanf(params, "ds", playerid, reason)) return SendClientMessage(playerid, COLOR_PURPLE, "USO: /report [playerid] [reason]");
		if(!IsPlayerConnected(reported) || reported == INVALID_PLAYER_ID) return SendClientMessage(playerid,COLOR_RED,"ERRORE: Il player non e' connesso!");
		if(playerinfo[reported][Level] == ServerInfo[MaxAdminLevel]) return SendClientMessage(playerid,COLOR_RED,"ERRORE: Non puoi farlo con l'amministratore");
		if(playerid == reported) return SendClientMessage(playerid,COLOR_RED,"ERRORE: Non puoi farlo a te stesso!");
  		new reportedname[MAX_PLAYER_NAME], reporter[MAX_PLAYER_NAME], str[100];
		GetPlayerName(reported, reportedname, sizeof(reportedname));	GetPlayerName(playerid, reporter, sizeof(reporter));
		format(str, sizeof(str), "||NewReport||  %s(ID %d) reported %s(ID %d) reason = %s", reporter,playerid, reportedname, reported, reason);
		MessageToAdmins(COLOR_WHITE,str);
		new File:ftw=fopen("reports/report.txt", io_append);
        format(str, sizeof(str), "||NewReport||  %s(ID %d) reported %s(ID %d) reason = %s", reporter,playerid, reportedname, reported, reason);
		fwrite(ftw, str);
 		fclose(ftw);
		SendClientMessage(playerid,COLOR_CYAN, "Report inviato.");
	    return 1;
}
dcmd_teleplayer(playerid,params[])
{
	if(playerinfo[playerid][Level] >= 3)
	{
	    new player1,player2;
	    if (sscanf(params, "dd", player1, player2)) return SendClientMessage(playerid, COLOR_PURPLE, "USO: /report [playerid] [reason]");
		if(!IsPlayerConnected(player1) || player1 == INVALID_PLAYER_ID)
		{
			SendClientMessage(playerid,COLOR_RED,"ERRORE: Il player non e' connesso!");
			return 1;
		}
		if(!IsPlayerConnected(player1) || player2 == INVALID_PLAYER_ID)
		{
			SendClientMessage(playerid,COLOR_RED,"ERRORE: Il player non e' connesso!");
			return 1;
		}
	    new Float:plocx,Float:plocy,Float:plocz;
		GetPlayerPos(player2, plocx, plocy, plocz);	new intid = GetPlayerInterior(player2);	SetPlayerInterior(player1,intid);
		SetPlayerVirtualWorld(player1,GetPlayerVirtualWorld(player2));
		CMDMessageToAdmins(playerid,"TELEPLAYER");
		if (GetPlayerState(player1) == 2)
		{
			new VehicleID = GetPlayerVehicleID(player1);
			SetVehiclePos(VehicleID, plocx, plocy+4, plocz);   LinkVehicleToInterior(VehicleID,intid);
			SetVehicleVirtualWorld(VehicleID, GetPlayerVirtualWorld(player2) );
		}
		else
		{
			SetPlayerPos(player1,plocx,plocy+2, plocz);
		}
	}
	else
	{
  		SendClientMessage(playerid,COLOR_RED,"ERRORE: Devi essere almeno di livello 3 per usare questo comando");
 	}
	return 1;
}
dcmd_warn(playerid,params[])
{
	if(playerinfo[playerid][Level] >= 2)
	{
		new reason[256];	 new warned;	new pname[256];	new aname[256];  new str[256];
		if (sscanf(params, "dz", warned, reason))return SendClientMessage(playerid, COLOR_PURPLE, "USO: /warn [PlayerID] [Reason]");
		if(!IsPlayerConnected(warned) || warned == INVALID_PLAYER_ID || (playerinfo[warned][Level] == ServerInfo[MaxAdminLevel]) || (warned == playerid))
		{
			SendClientMessage(playerid,COLOR_RED,"ERRORE: Player is not connected or is yourself");
			return 1;
		}
        CMDMessageToAdmins(playerid,"WARN");
		if(playerinfo[warned][Warnings] == 0)
		{
			playerinfo[warned][Warnings]+=1;
			GetPlayerName(warned, pname, sizeof (str));		GetPlayerName(playerid, aname, sizeof (str));
			format(str, sizeof (str), "***L'amministratore %s ha fatto a %s un avvertimento [Reason: %s] [1/3 Warnings]***", aname, pname, reason);
			SendClientMessageToAll(COLOR_LIME, str);
			return 1;
		}
		else if(playerinfo[warned][Warnings] == 1)
		{
			GetPlayerName(warned, pname, sizeof (str));		GetPlayerName(playerid, aname, sizeof (str));
			format(str, sizeof (str), "***L'amministratore %s ha fatto a %s un avvertimento [Reason: %s] [2/3 Warnings]***", aname, pname, reason);
			SendClientMessageToAll(COLOR_LIME, str);
			playerinfo[warned][Warnings]+=1;
			return 1;
		}
		else if(playerinfo[warned][Warnings] == 2)
		{
			GetPlayerName(warned, pname, sizeof (str));		GetPlayerName(playerid, aname, sizeof (str));
			format(str, sizeof (str), "***L'amministratore %s ha kickato %s [Reason: %s] [3/3 Warnings]***", aname, pname, reason);
			SendClientMessageToAll(COLOR_LIME, str);
    		new File:ftw=fopen("reports/report.txt", io_append);
			format(str, sizeof (str), "***L'amministratore %s ha kickato %s [Reason: %s] [3/3 Warnings]***", aname, pname, reason);
			fwrite(ftw, str);
 			fclose(ftw);
			return 1;
		}
	}
	else
	{
 		SendClientMessage(playerid,COLOR_RED,"ERROR: Devi essere almeno di livello 2 per usare questo comando");
 	}
	return 1;
}
dcmd_duel(playerid,params[])
{
	if(playerinfo[playerid][Level] >= 3)
	{
	    new player1;		new player2;        new location;
	    if (sscanf(params, "ddz", player1, player2, location))
		{
			SendClientMessage(playerid, COLOR_PURPLE, "USO: /duel [player1 id] [player2 id] [location (1) or (2) or (3)]");
			SendClientMessage(playerid, COLOR_PURPLE, "Se il posto non e' specificato il duello sara' fatto dove si trovano i giocatori!");
			return 1;
		}
		if(!IsPlayerConnected(player1) || player1 == INVALID_PLAYER_ID)
		{
			SendClientMessage(playerid,COLOR_RED,"ERRORE: Il player non e' connesso!");
			return 1;
		}
		if(!IsPlayerConnected(player1) || player2 == INVALID_PLAYER_ID)
		{
			SendClientMessage(playerid,COLOR_RED,"ERROR: Il player non e' connesso!");
			return 1;
		}
		if(location == 1)
		{
			SetPlayerInterior(player1,16);	SetPlayerPos(player1,-1404.067, 1270.3706, 1042.8672);	SetPlayerHealth(player1,100.0);	SetPlayerArmour(player1,100.0);	GivePlayerWeapon(player1,26,400);	GivePlayerWeapon(player1,24,300);	GivePlayerWeapon(player1,28,500);
			SetPlayerInterior(player2,16);	SetPlayerPos(player2,-1395.067, 1261.3706, 1042.8672);  SetPlayerHealth(player2,100.0); SetPlayerArmour(player2,100.0);	GivePlayerWeapon(player2,26,400);	GivePlayerWeapon(player2,24,300);	GivePlayerWeapon(player2,28,500);
			InDuel[player1] = 1;
			InDuel[player2] = 1;
			CMDMessageToAdmins(playerid,"DUEL");
			cdt=6;
			CountTimer=SetTimer("duel",1000,1);
		}
		else if(location == 2)
		{
			SetPlayerInterior(player1,0);	SetPlayerPos(player1,1353.407,2188.155,11.02344);    SetPlayerHealth(player1,100.0); SetPlayerArmour(player1,100.0);	GivePlayerWeapon(player1,26,400);	GivePlayerWeapon(player1,24,300);	GivePlayerWeapon(player1,28,500);
			SetPlayerInterior(player2,0);	SetPlayerPos(player2,1346.255,2142.843,11.01563);    SetPlayerHealth(player2,100.0); SetPlayerArmour(player2,100.0);	GivePlayerWeapon(player2,26,400);	GivePlayerWeapon(player2,24,300);	GivePlayerWeapon(player2,28,500);
			InDuel[player1] = 1;
			InDuel[player2] = 1;
			CMDMessageToAdmins(playerid,"DUEL");
			cdt=6;
			CountTimer=SetTimer("duel",1000,1);
		}
		else if(location == 3)
		{
			SetPlayerInterior(player1,10);	SetPlayerPos(player1,-1041.037,1078.729,1347.678); SetPlayerFacingAngle(player1,135);	SetPlayerHealth(player1,100.0); SetPlayerArmour(player1,100.0);	GivePlayerWeapon(player1,26,400);	GivePlayerWeapon(player1,24,300);	GivePlayerWeapon(player1,28,500);
			SetPlayerInterior(player2,10);	SetPlayerPos(player2,-1018.061,1052.502,1346.327); SetPlayerFacingAngle(player2,45);   SetPlayerHealth(player2,100.0); SetPlayerArmour(player2,100.0);	GivePlayerWeapon(player2,26,400);	GivePlayerWeapon(player2,24,300);	GivePlayerWeapon(player2,28,500);
			InDuel[player1] = 1;
			InDuel[player2] = 1;
			CMDMessageToAdmins(playerid,"DUEL");
			cdt=6;
			CountTimer=SetTimer("duel",1000,1);
		}
		else
		{
			InDuel[player1] = 1;
			InDuel[player2] = 1;
			CMDMessageToAdmins(playerid,"DUEL");
			cdt=6;
			CountTimer=SetTimer("duel",1000,1);
		}
	}
	else
	{
  		SendClientMessage(playerid,COLOR_RED,"ERROR: Devi essere almeno di livello 3 per usare questo comando");
	}
	return 1;
}
dcmd_countdown(playerid,params[])
{
	#pragma unused params
    if(playerinfo[playerid][Level] >= 1)
	{
		CMDMessageToAdmins(playerid,"COUNTDOWN");
		cdt=6;
		CountTimer=SetTimer("countdown",1000,1);
	}
	else
	{
  		SendClientMessage(playerid,COLOR_RED,"ERROR: Devi essere almeno di livello 1 per usare questo comando");
	}
	return 1;
}
dcmd_fix(playerid,params[])
{
	#pragma unused params
	if(playerinfo[playerid][Level] >= 1)
	{
		if (IsPlayerInAnyVehicle(playerid))
		{
			new VehicleID = GetPlayerVehicleID(playerid);	SetVehicleHealth(VehicleID,1250.0);
			SendClientMessage(playerid,COLOR_LIME,"Vehicle Fixed");
		}
		else
		{
			SendClientMessage(playerid,COLOR_RED,"ERRORE: Non sei in un veicolo");
		}
	}
	else
	{
  		SendClientMessage(playerid,COLOR_RED,"ERRORE: Devi essere almeno di livello 1 per usare questo comando");
 	}
	return 1;
}
dcmd_resetstats(playerid,params[])
{
	#pragma unused params
	new name[MAX_PLAYER_NAME];
	GetPlayerName(playerid, name, sizeof(name));
	if(playerinfo[playerid][LoggedIn] == 1)
	{
		// save as backup
	   	dUserSetINT(name).("oldkills",playerinfo[playerid][Kills]);
	   	dUserSetINT(name).("olddeaths",playerinfo[playerid][Deaths]);
		// stats reset
		playerinfo[playerid][Kills] = 0;
		playerinfo[playerid][Deaths] = 0;
		dUserSetINT(name).("kills",playerinfo[playerid][Kills]);
	   	dUserSetINT(name).("deaths",playerinfo[playerid][Deaths]);
        PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
		SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: Stats resettate. Le tue deaths e i tuoi kill ora sono: 0");
	}
	else
	{
		SendClientMessage(playerid,COLOR_RED, "ERRORE: Devi avere un account per usare questo comando");
	}
	return 1;
}
dcmd_changepass(playerid, params[])
{
	new name[MAX_PLAYER_NAME], string[256];
	GetPlayerName(playerid, name, sizeof(name));
	if(playerinfo[playerid][LoggedIn] ==1)
	{
 		if(!strlen(params))
 		{
			SendClientMessage(playerid, COLOR_PURPLE, "USO: /changepass [password]");
			return 1;
		}
		if(strlen(params) < 3)
		{
			SendClientMessage(playerid,COLOR_ORANGE,"ACCOUNT: Password troppo corta!");
			return 1;
		}
		dUserSetINT(name).("password_hash",udb_hash(params) );
		dUserSet(name).("Password",params);
		PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
        format(string, sizeof(string),"ACCOUNT: Hai cambiato la password in [ %s ]",params);
		SendClientMessage(playerid,COLOR_ORANGE,string);
	}
	else
	{
		SendClientMessage(playerid,COLOR_RED, "ERRORE: Devi avere un account per usare questo comando");
	}
	return 1;
}
dcmd_stats(playerid, params[])
{
	    new player1;    new name[MAX_PLAYER_NAME], string[256];
	    GetPlayerName(playerid, name, sizeof(name));
		if(!strlen(params))
		{
		    ShowScore(playerid);
			return 1;
		}
	 	if(IsPlayerConnected(player1))
		 {
			GetPlayerName(player1, name, sizeof(name));
 			format(string, sizeof(string), "<> %s's Stats:  Kills: %d | Deaths: %d | Ratio: %0.2f | Money: $%d ",name, playerinfo[player1][Kills], playerinfo[player1][Deaths],Float:playerinfo[player1][Deaths]/Float:playerinfo[player1][Deaths],GetPlayerMoney(player1));
			SendClientMessage(playerid, COLOR_YELLOW, string);
   			return 1;
		}
		else
		{
 		SendClientMessage(playerid, COLOR_RED, "ERRORE: Player non connesso!");
 		return 1;
 		}
}
dcmd_god(playerid,params[])
{
	#pragma unused params
	if(playerinfo[playerid][Level] >= 3)
	{
    	if(playerinfo[playerid][God] == 0)
		{
        	playerinfo[playerid][God] = 1;
	        SetPlayerHealth(playerid,100000);
			GivePlayerWeapon(playerid,38,50000); GivePlayerWeapon(playerid,15,50000); GivePlayerWeapon(playerid,26,50000);
            SendClientMessage(playerid,COLOR_TURQ,"GODMODE ON");
		}
		else
		{
            playerinfo[playerid][God] = 0;
            SendClientMessage(playerid,COLOR_TURQ,"GODMODE OFF");
	        SetPlayerHealth(playerid, 100); ResetPlayerWeapons(playerid);
		}
	}
	else
	{
  		SendClientMessage(playerid,COLOR_RED,"ERROR: You need to be level 3 to use this command");
	}
	return 1;
	}
/*                                      END COMMANDS                          */
public OnPlayerInfoChange(playerid)
{
	return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
	return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
	return 1;
}

public OnRconCommand(cmd[])
{
	return 1;
}

public OnObjectMoved(objectid)
{
	return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
	return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
	return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
	return 1;
}

public OnPlayerExitedMenu(playerid)
{
	return 1;
}
/*                                          STOCK & OTHER                     */
stock CMDMessageToAdmins(playerid,command[]) { new string[200],name[30]; GetPlayerName(playerid,name,30); format(string,200,"[Admin]: %s ha usato il comando %s",name,command); return MessageToAdmins(COLOR_WHITE,string); }

forward MessageToAdmins(color,const string[]);
public MessageToAdmins(color,const string[])
{
	for(new i = 0; i <= MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i) == 1)
		{
			if (playerinfo[i][Level] >= 1)
			{
				SendClientMessage(i, color, string);
			}
		}
	}
	return 1;
}

stock sscanf(string[], format[], {Float,_}:...)
{
	new
		formatPos = 0,
		stringPos = 0,
		paramPos = 2,
		paramCount = numargs();
	while (paramPos < paramCount && string[stringPos])
	{
		switch (format[formatPos++])
		{
			case '\0':
			{
				return 0;
			}
			case 'i', 'd':
			{
				new
					neg = 1,
					num = 0,
					ch = string[stringPos];
				if (ch == '-')
				{
					neg = -1;
					ch = string[++stringPos];
				}
				do
				{
					stringPos++;
					if (ch >= '0' && ch <= '9')
					{
						num = (num * 10) + (ch - '0');
					}
					else
					{
						return 1;
					}
				}
				while ((ch = string[stringPos]) && ch != ' ');
				setarg(paramPos, 0, num * neg);
			}
			case 'h', 'x':
			{
				new
					ch,
					num = 0;
				while ((ch = string[stringPos++]))
				{
					switch (ch)
					{
						case 'x', 'X':
						{
							num = 0;
							continue;
						}
						case '0' .. '9':
						{
							num = (num << 4) | (ch - '0');
						}
						case 'a' .. 'f':
						{
							num = (num << 4) | (ch - ('a' - 10));
						}
						case 'A' .. 'F':
						{
							num = (num << 4) | (ch - ('A' - 10));
						}
						case ' ':
						{
							break;
						}
						default:
						{
							return 1;
						}
					}
				}
				setarg(paramPos, 0, num);
			}
			case 'c':
			{
				setarg(paramPos, 0, string[stringPos++]);
			}
			case 'f':
			{
				new tmp[25];
				strmid(tmp, string, stringPos, stringPos+sizeof(tmp)-2);
				setarg(paramPos, 0, _:floatstr(tmp));
			}
			case 's', 'z':
			{
				new
					i = 0,
					ch;
				if (format[formatPos])
				{
					while ((ch = string[stringPos++]) && ch != ' ')
					{
						setarg(paramPos, i++, ch);
					}
					if (!i) return 1;
				}
				else
				{
					while ((ch = string[stringPos++]))
					{
						setarg(paramPos, i++, ch);
					}
				}
				stringPos--;
				setarg(paramPos, i, '\0');
			}
			default:
			{
				continue;
			}
		}
		while (string[stringPos] && string[stringPos] != ' ')
		{
			stringPos++;
		}
		while (string[stringPos] == ' ')
		{
			stringPos++;
		}
		paramPos++;
	}
	while (format[formatPos] == 'z') formatPos++;
	return format[formatPos];
}
forward countdown();
public countdown()
{
	if(cdt==6)
	{
		GameTextForAll("~p~Starting...",1000,6);
	}
	cdt--;
	new text[20]; format(text,sizeof(text),"~w~%d",cdt);
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
		TogglePlayerControllable(i,0);
	}
	GameTextForAll(text,1000,6);
	if (cdt==0)
	{
		GameTextForAll("~g~GO~ r~!",1000,6);
		KillTimer(CountTimer);
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
			TogglePlayerControllable(i,1);
			PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
		}
	}
}
//------------------------------------------
forward duel();
public duel()
{
	if(cdt==6)
	{
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
			if(InDuel[i] == 1)
			{
				GameTextForPlayer(i,"~p~Duel Starting...",1000,6);
			}
		}
	}
	cdt--;
	new text[20]; format(text,sizeof(text),"~w~%d",cdt);
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(InDuel[i] == 1)
		{
			PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
			TogglePlayerControllable(i,0);
			GameTextForPlayer(i,text,1000,6);
		}
	}
	if (cdt==0)
	{
		KillTimer(CountTimer);
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
			if(InDuel[i] == 1)
			{
				TogglePlayerControllable(i,1);
				PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
				GameTextForPlayer(i,"~g~GO~ r~!",1000,6);
			}
		}
	}
}
ShowScore(playerid)
{
	new string[256], playername[MAX_PLAYER_NAME];	GetPlayerName(playerid, playername, sizeof(playername));
	format(string, sizeof(string), "<> %s's Stats:  Kills: %d | Deaths: %d | Ratio: %0.2f | Money: $%d",playername,playerinfo[playerid][Kills],playerinfo[playerid][Deaths], (Float:playerinfo[playerid][Kills]/Float:playerinfo[playerid][Deaths]),GetPlayerMoney(playerid));
	SendClientMessage(playerid,COLOR_YELLOW, string);
}