SA-MP Forums Archive
[Ajuda] Sistema vip - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Sistema vip (/showthread.php?tid=638389)



Sistema vip - Zuza - 31.07.2017

Bom gente eu tenho um sistema vip com um unico problema , que ele nгo salva os vip ..
ele precisa do MySql e ja tenho tudo certinho , a unica coisa й sу o salvar os vip
olha aqui
Код:
// == Includes
#include <a_samp>
#include <sscanf2>
#include <zcmd>
#include <a_mysql>

// == Cores
#define OURO                    0xEEC900FF
#define PRATA 				    0x9C9C9CFF
#define BRONZE 				    0x8B5A2BFF
#define	COR_VIP					0x008B00FF
#define VERMELHO                0xFF030FFF
#define LARANJA                 0xF97804FF
#define CINZA                   0xCECECEFF

// == Conexao MySql
#define Host_Connection 		"localhost"
#define Host_User         		"root"
#define Host_DB           		"cvip"
#define Host_Password     		""

// == Dialogs
#define DIALOG_VIPS     				4995
#define DIALOG_VENC_VIP     			4996
#define DIALOG_COMANDOS_VIP     		4997
#define DIALOG_EFECTS     				4998
#define DIALOG_TOYS     				4999

#define DIALOG_ENABLE_KEY 				5000
#define DIALOG_NEW_KEY					5001
#define DIALOG_NEW_KEY_LEVEL			5005
#define DIALOG_NEW_KEY_DAYS 			5002
#define DIALOG_KEY_CONFIRM 				5003
#define DIALOG_REMOVE_KEY				5004


enum pInfo
{
	Vip,
	DiasVip,
	TempoVip,
	vKey[25],
	vDias,
	vNivel,
	Nome,
	bool:PegouKit,
	bool:PegouColete
};
new PlayerInfo[MAX_PLAYERS][pInfo], Connection, Timer, CarrosCriados[100], TodosCarros = 0;

public OnFilterScriptInit()
{
    print("Sistema C-VIP carregado com sucesso.");
    print("   Criado por: Cleyson Stein.");

    Timer = SetTimer("CheckVip", 60000, true);

    Connection = mysql_connect(Host_Connection, Host_User, Host_DB, Host_Password);

	mysql_query(Connection, "CREATE TABLE IF NOT EXISTS `Keys`(`Key` varchar(24) NOT NULL, `Dias` int(5) NOT NULL, `Nivel` int(5) NOT NULL)", false);
	mysql_query(Connection, "CREATE TABLE IF NOT EXISTS `Vips`(`Nome` varchar(24) NOT NULL, `Dias` int(5) NOT NULL, `TempoVip` int(5) NOT NULL, `Nivel` int(5) NOT NULL)", false);

    if(mysql_errno(Connection) != 0)
	{
		print("C-VIP: FALHA AO SE CONECTAR COM BANCO DE DADOS MYSQL");
  		} else {
  		print("C-VIP: CONECTADO COM SUCESSO AO BANCO DE DADOS MYSQL");
	}
	return 1;
}

public OnFilterScriptExit()
{
    KillTimer(Timer);
    mysql_close(Connection);
	return 1;
}

public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid, PlayerInfo[playerid][Nome], 24);

	new Query[70];
    mysql_format(Connection, Query, sizeof(Query), "SELECT * FROM `Vips` WHERE `Nome`='%e'", PlayerInfo[playerid][Nome]);
	mysql_tquery(Connection, Query, "LoadVips", "d", playerid);
	//mysql_escape_string(Query, queryt);
	return 1;
}

forward LoadVips(playerid);
public LoadVips(playerid)
{
    if(cache_get_row_count(Connection) == 1)
	{
	    PlayerInfo[playerid][Vip] = cache_get_field_content_int(0, "Nivel");
	    PlayerInfo[playerid][DiasVip] = cache_get_field_content_int(0, "Dias");
	    PlayerInfo[playerid][TempoVip] = cache_get_field_content_int(0, "TempoVip");
	} else {
		PlayerInfo[playerid][Vip] = 0;
		PlayerInfo[playerid][DiasVip] = 0;
		PlayerInfo[playerid][TempoVip] = 0;
	}
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	if(PlayerInfo[playerid][Vip] > 0)
	{
		new QueryVIP[80];
   		mysql_format(Connection, QueryVIP, sizeof(QueryVIP), "UPDATE `Vips` SET `Dias`=%d, `Nivel`=%d, `TempoVip`=%d WHERE `Nome`='%e'", PlayerInfo[playerid][DiasVip], PlayerInfo[playerid][Vip], PlayerInfo[playerid][TempoVip], PlayerInfo[playerid][Nome]);
        mysql_tquery(Connection, QueryVIP, "","");
	}
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if(PlayerInfo[playerid][PegouKit] == true) LiberarKit(playerid);
    if(PlayerInfo[playerid][PegouColete] == true) LiberarColete(playerid);
	return 1;
}

SetVip(playerid, Nivel, Dias)
{
	new stringV[70], Query[110];
	if(PlayerInfo[playerid][Vip] > 0)
	{
		format(stringV, sizeof stringV, "C-VIP: Seu VIP foi renovado. + %d dias. Nivel: %d.", Dias, Nivel);
		PlayerInfo[playerid][TempoVip] += Dias;
		PlayerInfo[playerid][DiasVip] += Dias;
		PlayerInfo[playerid][Vip] = Nivel;

   		mysql_format(Connection, Query, sizeof(Query), "UPDATE `Vips` SET `Dias`=%d, `Nivel`=%d, `TempoVip`=%d WHERE `Nome`='%e'", PlayerInfo[playerid][DiasVip], PlayerInfo[playerid][Vip], PlayerInfo[playerid][TempoVip], PlayerInfo[playerid][Nome]);
        mysql_tquery(Connection, Query, "", "");

	} else {

		format(stringV, sizeof stringV, "C-VIP: Seu VIP foi ativado. %d dias. Nivel: %d. /ComandosVip", Dias, Nivel);
		PlayerInfo[playerid][TempoVip] = Dias;
		PlayerInfo[playerid][DiasVip] = Dias;
		PlayerInfo[playerid][Vip] = Nivel;

		mysql_format(Connection, Query, sizeof(Query), "INSERT INTO `Vips`(`Nome`, `Dias`, `Nivel`, `TempoVip`) VALUES ('%e', %d, %d, %d)", PlayerInfo[playerid][Nome], PlayerInfo[playerid][DiasVip], PlayerInfo[playerid][Vip], PlayerInfo[playerid][TempoVip]);
		mysql_tquery(Connection, Query, "", "");

	}
	SendClientMessage(playerid, COR_VIP, stringV);
	return 1;
}

RemoveVip(playerid)
{
	new query[70];
    mysql_format(Connection, query, sizeof(query), "DELETE FROM `Vips` WHERE `Nome` = '%e'", PlayerInfo[playerid][Nome]);
    mysql_tquery(Connection, query, "", "");

	PlayerInfo[playerid][TempoVip] = 0;
	PlayerInfo[playerid][Vip] = 0;
	PlayerInfo[playerid][DiasVip] = 0;
	SendClientMessage(playerid, COR_VIP, "C-VIP: Seus dias VIP chegaram ao fim. Para renovar adquira uma nova key VIP.");
	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	switch(dialogid)
	{
		case DIALOG_NEW_KEY:
		{
		    if(!response) return 1;
		    if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_NEW_KEY, DIALOG_STYLE_INPUT, "KEYS VIP", "\nDigite uma nova key vбlida\n{FFFF00}Apenas letras sгo aceitas:\n\n", "Criar", "Cancelar");
		    format(PlayerInfo[playerid][vKey], 50, inputtext);
			new Dialog[128];
			format(Dialog, sizeof Dialog, "{FFFFFF}Seu novo codigo VIP: {DE3A3A}%s\n\n{FFFFFF}Agora nos informe a quantidade de dias VIP:", PlayerInfo[playerid][vKey]);
			ShowPlayerDialog(playerid, DIALOG_NEW_KEY_DAYS, DIALOG_STYLE_INPUT, "KEYS VIP", Dialog, "Criar", "Cancelar");
		}

		case DIALOG_NEW_KEY_DAYS:
		{
  			if(!IsNumeric(inputtext)) return SendClientMessage(playerid, VERMELHO, "ERRO: Digite uma quantidade de dias vбlidos.");
  			if(strval(inputtext) <= 0) return SendClientMessage(playerid, VERMELHO, "ERRO: Nгo pode ser criada uma Key com 0 dias vips.");
			PlayerInfo[playerid][vDias] = strval(inputtext);
			new Dialog[170];
			format(Dialog, sizeof Dialog, "{FFFFFF}Seu novo codigo VIP: {DE3A3A}%s\n{FFFFFF}Vencimento: {DE3A3A}%d dias\n\n{FFFFFF}Agora nos informe o nivel da key VIP: {DE3A3A}1 a 3", PlayerInfo[playerid][vKey], PlayerInfo[playerid][vDias]);
			ShowPlayerDialog(playerid, DIALOG_NEW_KEY_LEVEL, DIALOG_STYLE_INPUT, "KEYS VIP", Dialog, "Criar", "Cancelar");
		}

		case DIALOG_NEW_KEY_LEVEL:
		{
  			if(!IsNumeric(inputtext)) return SendClientMessage(playerid, VERMELHO, "ERRO: Digite uma quantidade de nivel vбlidos 1 a 3.");
            if(strval(inputtext) < 1 || strval(inputtext) > 3) return SendClientMessage(playerid, VERMELHO, "ERRO: Digite uma quantidade de nivel vбlidos 1 a 3.");
			PlayerInfo[playerid][vNivel] = strval(inputtext);
			new Dialog[190];
			format(Dialog, sizeof Dialog, "{FFFFFF}Informaзхes de sua nova key:\n\nCуdigo: {DE3A3A}%s\n{FFFFFF}Vencimento: {DE3A3A}%d dias\n{FFFFFF}Nivel: {DE3A3A}%d\n\n{FFFFFF}Deseja criar ?", PlayerInfo[playerid][vKey], PlayerInfo[playerid][vDias], PlayerInfo[playerid][vNivel]);
			ShowPlayerDialog(playerid, DIALOG_KEY_CONFIRM, DIALOG_STYLE_MSGBOX, "KEYS VIP", Dialog, "Sim", "Nгo");
		}

		case DIALOG_KEY_CONFIRM:
		{
		    if(!response) return 1;
		    new query[70];
		    mysql_format(Connection, query, sizeof(query),"SELECT * FROM `Keys` WHERE `Key` = '%e'", PlayerInfo[playerid][vKey]);
    		mysql_tquery(Connection, query, "KeyCheck", "isdd", playerid, PlayerInfo[playerid][vKey], PlayerInfo[playerid][vDias], PlayerInfo[playerid][vNivel]);
		}

		case DIALOG_REMOVE_KEY:
		{
			new query[70];
			mysql_format(Connection, query, sizeof(query),"SELECT * FROM `Keys` WHERE `key` = '%e'", inputtext);
   			mysql_tquery(Connection, query, "DeleteKey", "is", playerid, inputtext);
		}

		case DIALOG_ENABLE_KEY:
		{
		    if(!response) return 1;
			new query[70];
			mysql_format(Connection, query, sizeof(query),"SELECT * FROM `Keys` WHERE `key` = '%e'", inputtext);
   			mysql_tquery(Connection, query, "CheckKeyExist", "is", playerid, inputtext);
		}
		case DIALOG_TOYS:
        {
			if(!response) return 1;
        	SendClientMessage(playerid, COR_VIP, "C-VIP: Use /tbrinq para remover o brinquedo.");
        	GameTextForPlayer(playerid, "~g~/tbrinquedos", 2000, 3);
        	switch(listitem)
        	{
              	case 0: SetPlayerAttachedObject(playerid, 0, 19330, 2, 0.166000, -0.038999, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000);
              	case 1: SetPlayerAttachedObject(playerid, 0, 19161, 2, 0.078999, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000);
       			case 2: SetPlayerAttachedObject(playerid, 0, 18639, 2, 0.131000, 0.019000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000);
              	case 3: SetPlayerAttachedObject(playerid, 0, 18638, 2, 0.148999, 0.031000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000);
        		case 4: SetPlayerAttachedObject(playerid, 0, 18939, 2, 0.164000, 0.001999, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000);
        		case 5: SetPlayerAttachedObject(playerid, 0, 19488, 2, 0.121999, 0.000000, -0.005999, -83.199966, 98.200027, -2.500000, 1.000000, 1.000000, 1.000000);
        		case 6: SetPlayerAttachedObject(playerid, 0, 19352, 2, 0.106999, 0.016000, -0.010999, 4.500000, 82.099990, -3.100001, 1.000000, 1.000000, 1.000000);
        		case 7: SetPlayerAttachedObject(playerid, 0, 19090, 2, -0.315999, 0.019999, 0.030000, 0.000000, 0.000000, 0.000000, 1.455999, 0.526000, 0.541000);
        		case 8: SetPlayerAttachedObject(playerid, 0, 19424, 2, 0.070999, -0.026000, -0.002000, -85.299987, 1.600005, -99.500000, 0.944001, 0.915000, 0.809999);
        		case 9: SetPlayerAttachedObject(playerid, 0, 19078, 1, -1.000000,-0.517000,0.000000,0.000000,0.299999,10.499994,8.673998,9.400999,7.410993);
        		case 10: SetPlayerAttachedObject(playerid,0, 19078, 4, -0.067000,0.053999,0.018000,-168.400039,-169.800003,-2.800000,1.000000,1.000000,1.000000);
        		case 11: SetPlayerAttachedObject(playerid,0, 19085, 2, 0.090999,0.035000,-0.015000,106.599983,83.199996,0.800003,1.000000,1.000000,1.000000);
        		case 12: SetPlayerAttachedObject(playerid,1, 19086, 15, 0.051000,0.000000,-0.424999,0.000000,0.000000,-102.100006,1.000000,1.000000,1.000000);
        		case 13: SetPlayerAttachedObject(playerid,0, 19137, 2, 0.101000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000);
        		case 14: SetPlayerAttachedObject(playerid,0, 19137, 15, 0.040999,0.000000,-0.130000,-86.300003,106.100013,-96.100051,7.741999,4.874000,5.584998);
        		case 15: SetPlayerAttachedObject(playerid,0, 19315, 1, -0.247999,0.509999,-0.015999,4.300004,86.900024,85.500015,3.010000,4.463000,3.824000);
        		case 16: SetPlayerAttachedObject(playerid,0, 19314, 2, 0.157000,0.000000,0.000000,-0.199999,-7.600006,-88.599998,1.000000,1.000000,1.000000);
        		case 17: SetPlayerAttachedObject(playerid,0, 19314, 2, 0.157000,0.000000,0.000000,1.400000,-7.600006,-28.599973,0.711000,0.919999,0.361999);
        		case 18: SetPlayerAttachedObject(playerid,0, 19320, 2, 0.000000,0.000000,0.000000,4.299999,72.999992,3.199999,3.594999,3.787999,4.951001);
        		case 19: SetPlayerAttachedObject(playerid,0, 18963, 2, 0.261000,0.084999,0.004999,4.999999,85.400039,84.699974,2.097000,2.627000,3.033999);
        		case 20: SetPlayerAttachedObject(playerid,0, 1607, 2, 0.267000,0.000000,0.000000,-0.199999,81.199996,-3.499999,1.135000,1.000000,1.126999);
        		case 21: SetPlayerAttachedObject(playerid,0, 1608, 1, 0.000000,0.000000,0.000000,0.499999,89.200042,0.199999,1.000000,1.000000,1.000000);
        		case 22: SetPlayerAttachedObject(playerid,0, 1609, 1, -0.358000,0.000000,0.170000,0.000000,93.099998,0.000000,1.427000,1.509000,1.641000);
        		case 23: SetPlayerAttachedObject(playerid,0, 16442, 15, 0.000000,0.000000,0.259000,0.000000,0.000000,-104.400001,1.000000,1.000000,1.000000);
        		case 24: SetPlayerAttachedObject(playerid,1, 373, 1, 0.33, -0.029, -0.15, 65, 25, 35);
        		case 25: SetPlayerAttachedObject(playerid,1, 1240, 1, 0.15, 0.17, 0.06, 0.0, 90.0, 0.0);
        		case 26: SetPlayerAttachedObject(playerid,1, 1252, 1, 0.1, -0.2, 0.0, 0.0, 90.0, 0.0);
        		case 27: SetPlayerAttachedObject(playerid,1, 356, 1, -0.2, -0.15, 0.0, 0.0, 24.0, 0.0);
        		case 28: SetPlayerAttachedObject(playerid,1 ,359, 15 ,-0.02 ,0.08 ,-0.3 ,0 ,50 ,-10);
        		case 29: SetPlayerAttachedObject(playerid,0, 19065, 2, 0.120000, 0.040000, -0.003500, 0, 100, 100, 1.4, 1.4, 1.4);
        		case 30: SetPlayerAttachedObject(playerid,0 ,1852 ,2 ,0.1 ,0 ,-0.01 ,0 ,15 ,0);
        		case 31: SetPlayerAttachedObject(playerid,1, 1654, 1, 0.1,0.20,0.0,180.0,100.0,0.0);
			}
		}

		case DIALOG_EFECTS:
        {
			if(!response) return 1;
        	SendClientMessage(playerid, COR_VIP, "C-VIP: Use /tefeitos para remover o efeito.");
        	GameTextForPlayer(playerid, "~g~/tefeitos", 2000, 3);
        	switch(listitem)
        	{
              	case 0: SetPlayerAttachedObject(playerid,1,18688,1,-0.895839,0.631365,-1.828601,21.642332,7.385670,13.958697,1.232679,1.000000,1.090367); // fire - Bruno
              	case 1: SetPlayerAttachedObject(playerid,1,18742,1,0.036487,-1.759890,1.772809,225.616638,1.132580,0.677276,1.000000,1.000000,1.000000); // water_speed - explosaoaquatica
       			case 2: SetPlayerAttachedObject(playerid,1,18864,1,2.178843,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000); // FakeSnow1 - neve
              	case 3: SetPlayerAttachedObject(playerid,1,867,1,-0.213616,-0.444311,0.070721,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000); // p_rubble04col - pedras
        		case 4: SetPlayerAttachedObject(playerid,1,1254,1,0.448984,0.065604,0.006619,4.313228,89.284942,0.000000,1.000000,1.000000,1.000000); // killfrenzy - caveira
        		case 5: SetPlayerAttachedObject(playerid,1,1242,1,0.090351,0.088730,-0.000036,0.000000,89.157951,0.000000,1.619548,1.000000,1.348966); // bodyarmour - colete
        		case 6: SetPlayerAttachedObject(playerid,1,18735,1,0.000000,-0.479024,-1.590823,0.000000,0.000000,0.000000,13.498819,1.000000,0.678294); // vent2 - fumaçao
        		case 7: SetPlayerAttachedObject(playerid,1,19065,15,-0.025,-0.04,0.23,0,0,270,2,2,2); // Toca de Natal

				case 8:
				{
                	SetPlayerAttachedObject(playerid,1,18688,1,-0.895839,0.631365,-1.828601,21.642332,7.385670,13.958697,1.232679,1.000000,1.090367); // fire - Bruno
            		SetPlayerAttachedObject(playerid,2,1254,1,0.448984,0.065604,0.006619,4.313228,89.284942,0.000000,1.000000,1.000000,1.000000); // killfrenzy - caveira
				}
        		case 9:
				{
					SetPlayerAttachedObject(playerid,1,1242,1,0.090351,0.088730,-0.000036,0.000000,89.157951,0.000000,1.619548,1.000000,1.348966); // bodyarmour - colete
            		SetPlayerAttachedObject(playerid,2,18735,1,0.000000,-0.479024,-1.590823,0.000000,0.000000,0.000000,13.498819,1.000000,0.678294); // vent2 - fumaçao

				}
        		case 10:
				{
				    SetPlayerAttachedObject(playerid,1,867,1,-0.213616,-0.444311,0.070721,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000); // p_rubble04col - pedras
            		SetPlayerAttachedObject(playerid,2,18742,1,0.036487,-1.759890,1.772809,225.616638,1.132580,0.677276,1.000000,1.000000,1.000000); // water_speed - explosaoaquatica
				}
        		case 11:
				{
				    SetPlayerAttachedObject(playerid,1,19065,15,-0.025,-0.04,0.23,0,0,270,2,2,2); // Toca de Natal
            		SetPlayerAttachedObject(playerid,2,18864,1,2.178843,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,1.000000,1.000000); // FakeSnow1 - neve
				}
			}
		}
	}
	return 1;
}

// ativar key
forward CheckKeyExist(playerid, Key[]);
public CheckKeyExist(playerid, Key[])
{
    if(cache_get_row_count(Connection) == 0) return SendClientMessage(playerid, VERMELHO, "ERRO: Key inexistente.");

	new ValorDias = cache_get_field_content_int(0, "Dias");
	new Nivel = cache_get_field_content_int(0, "Nivel");
    SetVip(playerid, Nivel, ValorDias);

    new query[70];
    mysql_format(Connection, query, sizeof(query), "DELETE FROM `Keys` WHERE `Key` = '%e'", Key);
    mysql_tquery(Connection, query, "", "");
	return 1;
}

// criar key
forward KeyCheck(playerid, Key[], Dias, Nivel);
public KeyCheck(playerid, Key[], Dias, Nivel)
{
    if(cache_get_row_count(Connection) == 1) return SendClientMessage(playerid, VERMELHO, "ERRO: Key ja existente.");

	new query[150];
	mysql_format(Connection, query, sizeof(query), "INSERT INTO `Keys` (`Key`, `Dias`, `Nivel`) VALUES ('%e', %d, %d)", Key, Dias, Nivel);
	mysql_tquery(Connection, query, "KeyCreated", "isii", playerid, Key, Dias, Nivel);
	return 1;
}

forward KeyCreated(playerid, Key[], Dias, Nivel);
public KeyCreated(playerid, Key[], Dias, Nivel)
{
	new MsgKeyVip[70];
	SendClientMessage(playerid, LARANJA, "KEY: Nova Key VIP criada.");
	format(MsgKeyVip, sizeof MsgKeyVip, "KEY: [%s] - DIAS: [%d] - NIVEL: [%d]", Key, Dias, Nivel);
	SendClientMessage(playerid, LARANJA, MsgKeyVip);
    return 1;
}

// deletarkey
forward DeleteKey(playerid, Key[]);
public DeleteKey(playerid, Key[])
{
    if(cache_get_row_count(Connection) == 0) return SendClientMessage(playerid, VERMELHO, "ERRO: Key inexistente.");

	new query[70];
    mysql_format(Connection, query, sizeof(query), "DELETE FROM `Keys` WHERE `Key` = '%e'", Key);
    mysql_tquery(Connection, query, "KeyDeleted", "is", playerid, Key);
    return 1;
}

forward KeyDeleted(playerid, Key[]);
public KeyDeleted(playerid, Key[])
{
    new MsgKeyVip[60];
	format(MsgKeyVip, sizeof MsgKeyVip, "ADMIN: A key %s foi removida com sucesso.", Key);
	SendClientMessage(playerid, LARANJA, MsgKeyVip);
    return 1;
}

// verificar dias
forward CheckVip();
public CheckVip()
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i) && PlayerInfo[i][Vip] == 1)
		{
			if(PlayerInfo[i][TempoVip] > 0)
			{
			    PlayerInfo[i][TempoVip] = gettime() - ExpireVIP(i);
				} else {
			    RemoveVip(i);
			}
		}
	}
	return 1;
}

ExpireVIP(playerid)
{
	new Dias = PlayerInfo[playerid][DiasVip] * 86400; // 86400 == 24horas
	return Dias;
}

IsNumeric(const string[])
{
    for (new i = 0, j = strlen(string); i < j; i++)
    {
        if (string[i] > '9' || string[i] < '0') return 0;
    }
    return 1;
}

LiberarKit(playerid)
{
	SendClientMessage(playerid, COR_VIP, "C-VIP: Vocк ja pode pegar seu KIT-VIP novamente!");
	PlayerInfo[playerid][PegouKit] = false;
}

LiberarColete(playerid)
{
	SendClientMessage(playerid, COR_VIP, "C-VIP: Vocк ja pode pegar seu COLETE-VIP novamente!!");
	PlayerInfo[playerid][PegouColete] = false;
}

VerificarNivelVip(playerid, lvl)
{
	if(PlayerInfo[playerid][Vip] < lvl)
	{
	    new MsgErro[30];
		format(MsgErro, sizeof(MsgErro), "ERRO: Comando indisponivel. Vip %d+", lvl);
		SendClientMessage(playerid, VERMELHO, MsgErro);
		return 0;
	}
	return 1;
}

PosicaoFrentePlayer(playerid, &Float:x, &Float:y, Float:distance)
{
    new Float:a;
    GetPlayerPos( playerid, x, y, a);
    GetPlayerFacingAngle( playerid, a);
    if(GetPlayerVehicleID( playerid ))
    {
        GetVehicleZAngle(GetPlayerVehicleID( playerid ), a);
    }
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
}

ShowToys(playerid)
{
    new string[1700];
    strcat(string, "{FFFF00}-{FFFFFF} Chapйu de Bombeiro {0088FF}Slot 1 \n"); // 0
    strcat(string, "{FFFF00}-{FFFFFF} Chapйu de Policial {0088FF}Slot 1 \n"); //   1
    strcat(string, "{FFFF00}-{FFFFFF} Chapйu Michael Jackson {0088FF}Slot 1 \n"); // 2
    strcat(string, "{FFFF00}-{FFFFFF} Chapйu Operбrio {0088FF}Slot 1 \n"); // 3
    strcat(string, "{FFFF00}-{FFFFFF} Chapйu de Funkeiro {0088FF}Slot 1 \n"); // 4
    strcat(string, "{FFFF00}-{FFFFFF} Chapйu de Veio {0088FF}Slot 1 \n"); // 5
    strcat(string, "{FFFF00}-{FFFFFF} Chapйu do Harry Potter {0088FF}Slot 1 \n"); // 6
    strcat(string, "{FFFF00}-{FFFFFF} Bolsa de sequestrador {0088FF}Slot 1 \n");// 7
    strcat(string, "{FFFF00}-{FFFFFF} Fones de ouvido {0088FF}Slot 1 \n");// 8
    strcat(string, "{FFFF00}-{FFFFFF} Loro Josй Gigante {0088FF}Slot 1 \n");// 9
    strcat(string, "{FFFF00}-{FFFFFF} Loro Josй menor (Ombro) {0088FF}Slot 2 \n");// 10
    strcat(string, "{FFFF00}-{FFFFFF} Tapa olho de pirata {0088FF}Slot 2 \n");// 11
    strcat(string, "{FFFF00}-{FFFFFF} Dildo {0088FF}Slot 2\n");// 12
    strcat(string, "{FFFF00}-{FFFFFF} Cabeзa de galo {0088FF}Slot 1 \n");// 13
    strcat(string, "{FFFF00}-{FFFFFF} Cabeзa de galo gigante Slot 1 \n");// 14
    strcat(string, "{FFFF00}-{FFFFFF} Cervo {0088FF}Slot 1 \n");// 15
    strcat(string, "{FFFF00}-{FFFFFF} Chifre de boi 1 {0088FF}Slot 1 \n");// 16
    strcat(string, "{FFFF00}-{FFFFFF} Chifre de boi 2 {0088FF}Slot 1 \n");// 17
    strcat(string, "{FFFF00}-{FFFFFF} Fanstasia de obуbora {0088FF}Slot 1 \n");// 18
    strcat(string, "{FFFF00}-{FFFFFF} Cabeзгo do CJ {0088FF}Slot 1 \n"); // 19
    strcat(string, "{FFFF00}-{FFFFFF} Golfinho {0088FF}Slot 1 \n"); // 20
    strcat(string, "{FFFF00}-{FFFFFF} Tubarгo {0088FF}Slot 1 \n"); // 21
    strcat(string, "{FFFF00}-{FFFFFF} Fantasia de tartaruga {0088FF}Slot 1 \n"); // 22
    strcat(string, "{FFFF00}-{FFFFFF} Vaca {0088FF}Slot 1 \n"); // 23
    strcat(string, "{FFFF00}-{FFFFFF} Colete no corpo {0088FF}Slot 2 \n");// 24
    strcat(string, "{FFFF00}-{FFFFFF} Coraзгo no peito {0088FF}Slot 2 \n");// 25
    strcat(string, "{FFFF00}-{FFFFFF} C4 nas costas {0088FF}Slot 2 \n");// 26
    strcat(string, "{FFFF00}-{FFFFFF} M4 nas costas  {0088FF}Slot 2 \n");// 27
    strcat(string, "{FFFF00}-{FFFFFF} Bazzuka nas costas  {0088FF}Slot 2 \n");// 28
    strcat(string, "{FFFF00}-{FFFFFF} Toca do Papai Noel  {0088FF}Slot 1 \n");// 29
    strcat(string, "{FFFF00}-{FFFFFF} Dado na cabeзa  {0088FF}Slot 1 \n");// 30
    strcat(string, "{FFFF00}-{FFFFFF} C4 no peito  {0088FF}Slot 2 \n");// 31
    ShowPlayerDialog(playerid, DIALOG_TOYS, DIALOG_STYLE_LIST, "C-VIP: Selecione para adicionar a seu skin:", string, "APLICAR", "SAIR");
    return 1;
}

ShowEfects(playerid)
{
    new string[800];
    strcat(string, "{FFFF00}-{FFFFFF} Fogo na Skin {0088FF}Slot 1\n"); // 0
    strcat(string, "{FFFF00}-{FFFFFF} Explosгo Aquatica {0088FF}Slot 1\n"); //   1
    strcat(string, "{FFFF00}-{FFFFFF} Neve {0088FF}Slot 1\n"); // 2
    strcat(string, "{FFFF00}-{FFFFFF} Pedras {0088FF}Slot 1\n"); // 3
    strcat(string, "{FFFF00}-{FFFFFF} Caveira {0088FF}Slot 1\n"); // 4
    strcat(string, "{FFFF00}-{FFFFFF} Colete {0088FF}Slot 1\n"); // 5
    strcat(string, "{FFFF00}-{FFFFFF} Fumaзa {0088FF}Slot 1\n"); // 6
    strcat(string, "{FFFF00}-{FFFFFF} Touca de Natal {0088FF}Slot 1\n");// 7
    strcat(string, "{FFFF00}-{FFFFFF} Caveira e Fogo {0088FF}Slot 1 e 2\n");// 8
    strcat(string, "{FFFF00}-{FFFFFF} Colete e Fumaзa {0088FF}Slot 1 e 2\n");// 9
    strcat(string, "{FFFF00}-{FFFFFF} Pedras e Explosгo Aquatica {0088FF}Slot 1 e 2\n");// 10
    strcat(string, "{FFFF00}-{FFFFFF} Touca de Natal e Neve {0088FF}Slot 1 e 2\n");// 11
    ShowPlayerDialog(playerid, DIALOG_EFECTS, DIALOG_STYLE_LIST, "C-VIP: Selecione para adicionar a seu skin:", string, "APLICAR", "SAIR");
    return 1;
}

forward SendVipMessageToAll(playerid, const string[]);
public SendVipMessageToAll(playerid, const string[])
{
	switch(PlayerInfo[playerid][Vip])
	{
		case 1: SendClientMessageToAll(BRONZE, string);
		case 2: SendClientMessageToAll(PRATA, string);
		case 3: SendClientMessageToAll(OURO, string);
	}
	return 1;
}

forward ChatVIP(const string[]);
public ChatVIP(const string[])
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i) && PlayerInfo[i][Vip] > 0)
		{
			switch(PlayerInfo[i][Vip])
			{
				case 1: SendClientMessage(i, BRONZE, string);
				case 2: SendClientMessage(i, PRATA, string);
				case 3: SendClientMessage(i, OURO, string);
			}
		}
	}
	return 1;
}

// ==================== Comandos VIP nivel 1

CMD:comandosvip(playerid)
{
	//if(!VerificarNivelVip(playerid, 1)) return 1;
	new String[800];
	strcat(String, "{FFFFFF}.: COMANDOS VIP {8B5A2B}BRONZE{FFFFFF} :.\n\n");
	strcat(String, "{8B5A2B} /v {FFFFFF}- Falar no modo VIP\n");
	strcat(String, "{8B5A2B} /cv {FFFFFF}- Falar no chat VIP\n");
	strcat(String, "{8B5A2B} /souvip {FFFFFF}- Ostentar seu VIP\n");
	strcat(String, "{8B5A2B} /venc {FFFFFF}- Ver vencimento do seu VIP\n\n\n");
	strcat(String, "{FFFFFF}.: COMANDOS VIP {9C9C9C}PRATA{FFFFFF} :.\n\n");
	strcat(String, "{9C9C9C} /vkit {FFFFFF}- Pegar KIT-VIP\n");
	strcat(String, "{9C9C9C} /vcolete {FFFFFF}- Colocar um colete\n");
	strcat(String, "{9C9C9C} /vjetpack {FFFFFF}- Criar um jetpack\n");
	strcat(String, "{9C9C9C} /vreparar {FFFFFF}- Reparar um veiculo\n\n\n");
	strcat(String, "{FFFFFF}.: COMANDOS VIP {EEC900}OURO{FFFFFF} :.\n\n");
	strcat(String, "{EEC900} /vcar {FFFFFF}- Criar carro VIP\n");
	strcat(String, "{EEC900} /vbike {FFFFFF}- Criar moto VIP\n");
	strcat(String, "{EEC900} /efeitos {FFFFFF}- Abre um menu de efeitos VIP\n");
	strcat(String, "{EEC900} /brinquedos {FFFFFF}- Abre um menu de brinquedos VIP\n");
	ShowPlayerDialog(playerid, DIALOG_COMANDOS_VIP, DIALOG_STYLE_MSGBOX, "{EEC900}C-VIP: - Comandos VIP", String, "Fechar", #);
	return 1;
}

CMD:venc(playerid)
{
	if(!VerificarNivelVip(playerid, 1)) return 1;
	new String[256], Str[128];
	format(Str, sizeof(Str), "{ffffff}NICK: {008B00}%s{FFFFFF} [{008B00}%d{FFFFFF}]   -   ", PlayerInfo[playerid][Nome], playerid);
	strcat(String, Str);
	format(Str, sizeof(Str), "{ffffff}VENCIMENTO EM: {008B00}%d {FFFFFF}DIAS\n\n", PlayerInfo[playerid][DiasVip]);
	strcat(String, Str);
	ShowPlayerDialog(playerid, DIALOG_VENC_VIP, DIALOG_STYLE_MSGBOX, "{EEC900}C-VIP: - Vencimento VIP ", String, "Fechar", #);
	return 1;
}

CMD:cv(playerid, params[])
{
    if(!VerificarNivelVip(playerid, 1)) return 1;
	new texto[100], String[128];
	if(sscanf(params, "s", texto)) return SendClientMessage(playerid, CINZA, "Use: /cv [texto]");
	if(strval(texto) > 100) return SendClientMessage(playerid, VERMELHO, "ERRO: Texto muito grande, diminua por favor!");
	format(String, sizeof(String), "%s {FFFF00}.:CHAT-VIP:.{FFFFFF} %s", PlayerInfo[playerid][Nome], texto);
	ChatVIP(String);
	return 1;
}

CMD:souvip(playerid)
{
	if(!VerificarNivelVip(playerid, 1)) return 1;
	new String[60];
	format(String, sizeof(String), "-VIP » %s: Eu sou VIP, entгo me chupa!", PlayerInfo[playerid][Nome]);
	SendVipMessageToAll(playerid, String);
	return 1;
}

CMD:v(playerid, params[])
{
	if(!VerificarNivelVip(playerid, 1)) return 1;
	new texto[100], String[128];
	if(sscanf(params, "s", texto)) return SendClientMessage(playerid, CINZA, "Use: /v [Texto]");

	format(String, sizeof(String), "-VIP » %s: %s", PlayerInfo[playerid][Nome], texto);
	SendVipMessageToAll(playerid, String);
	return 1;
}

// ======================================================


// ==================== Comandos VIP nivel 2
CMD:vjetpack(playerid)
{
	if(!VerificarNivelVip(playerid, 2)) return 1;
	if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, VERMELHO, "ERRO: Vocк nгo pode utilizar esse comando em um veнculo!");
	SendClientMessage(playerid, COR_VIP, "C-VIP: Jetpack criado com sucesso!");
	SetPlayerSpecialAction(playerid, 2);
	return 1;
}

CMD:vcolete(playerid)
{
	if(!VerificarNivelVip(playerid, 3)) return 1;
	if(PlayerInfo[playerid][PegouColete] == true) return SendClientMessage(playerid, VERMELHO, "ERRO: Vocк jб pegou seu COLETE-VIP recentemente!");
	SendClientMessage(playerid, COR_VIP, "C-VIP: Colete criado com sucesso!");
	SetPlayerArmour(playerid, 100.0);
	PlayerInfo[playerid][PegouColete] = true;
	return 1;
}

CMD:vkit(playerid)
{
	if(!VerificarNivelVip(playerid, 2)) return 1;
    if(PlayerInfo[playerid][PegouKit] == true) return SendClientMessage(playerid, VERMELHO, "ERRO: Vocк jб pegou seu KIT-VIP recentemente!");
    SendClientMessage(playerid, COR_VIP, "C-VIP: Vocк pegou seu KIT-VIP com sucesso!");
	GivePlayerWeapon(playerid,  4, 99999);
	GivePlayerWeapon(playerid, 24, 99999);
	GivePlayerWeapon(playerid, 26, 99999);
	GivePlayerWeapon(playerid, 31, 99999);
	GivePlayerWeapon(playerid, 32, 99999);
	GivePlayerWeapon(playerid, 34, 99999);

	PlayerInfo[playerid][PegouKit] = true;
	return 1;
}

CMD:vreparar(playerid)
{
	if(!VerificarNivelVip(playerid, 2)) return 1;
	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, VERMELHO, "ERRO: Vocк nгo pode utilizar esse comando fora de um veнculo!");
	SendClientMessage(playerid, COR_VIP, "C-VIP: Veiculo reparado com sucesso!");
    RepairVehicle(GetPlayerVehicleID(playerid));
	return 1;
}

// ======================================================


// ==================== Comandos VIP nivel 3

CMD:vcar(playerid, params[])
{
    if(!VerificarNivelVip(playerid, 3)) return 1;
	new	Cor1, Cor2, idcarro;
	if(sscanf(params, "ii", Cor1, Cor2)) return SendClientMessage(playerid, CINZA, "Use: /vcar [Cor1] [Cor2]");
	new Float:X, Float:Y, Float:Z, Float:X1, Float:Y1, Float:A;
	PosicaoFrentePlayer(playerid, X, Y, 3);
	GetPlayerPos(playerid, X1, Y1, Z);
	GetPlayerFacingAngle(playerid, A);
	idcarro = AddStaticVehicle(411, X, Y, Z, A+90, Cor1, Cor2);
	CarrosCriados[TodosCarros] = idcarro;
	TodosCarros ++;
	SendClientMessage(playerid, COR_VIP, "C-VIP: Veiculo VIP criado com sucesso!");
	return 1;
}

CMD:vbike(playerid, params[])
{
    if(!VerificarNivelVip(playerid, 3)) return 1;
	new	Cor1, Cor2, idcarro;
	if(sscanf(params, "ii", Cor1, Cor2)) return SendClientMessage(playerid, CINZA, "Use: /vbike [Cor1] [Cor2]");
	new Float:X, Float:Y, Float:Z, Float:X1, Float:Y1, Float:A;
	PosicaoFrentePlayer(playerid, X, Y, 3);
	GetPlayerPos(playerid, X1, Y1, Z);
	GetPlayerFacingAngle(playerid, A);
	idcarro = AddStaticVehicle(522, X, Y, Z, A+90, Cor1, Cor2);
	CarrosCriados[TodosCarros] = idcarro;
	TodosCarros ++;
	SendClientMessage(playerid, COR_VIP, "C-VIP: Moto VIP criada com sucesso!");
	return 1;
}

CMD:brinquedos(playerid)
{
	if(!VerificarNivelVip(playerid, 3)) return 1;
	if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, VERMELHO, "ERRO: Vocк nгo pode utilizar esse comando em um veнculo!");
    SendClientMessage(playerid, COR_VIP, "C-VIP: Lista de Brinquedos.");
	ShowToys(playerid);
    return 1;
}

CMD:tbrinquedos(playerid)
{
    if(!VerificarNivelVip(playerid, 3)) return 1;
    for(new i=0; i< MAX_PLAYER_ATTACHED_OBJECTS; i++)
    {
        if(IsPlayerAttachedObjectSlotUsed(playerid, i)) RemovePlayerAttachedObject(playerid, i);
    }
    SendClientMessage(playerid, COR_VIP, "C-VIP: Brinquedos removidos com sucesso!");
    return 1;
}

CMD:efeitos(playerid)
{
	if(!VerificarNivelVip(playerid, 3)) return 1;
	if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, VERMELHO, "ERRO: Vocк nгo pode utilizar esse comando em um veнculo!");
    SendClientMessage(playerid, COR_VIP, "C-VIP: Lista de Efeitos.");
	ShowEfects(playerid);
    return 1;
}

CMD:tefeitos(playerid)
{
    if(!VerificarNivelVip(playerid, 3)) return 1;
    RemovePlayerAttachedObject(playerid, 1); // Remoзao dos Efeitos
    RemovePlayerAttachedObject(playerid, 2); // Remoзao dos Efeitos2
    SendClientMessage(playerid, COR_VIP, "C-VIP: Efeitos removidos com sucesso!");
    return 1;
}

// ======================================================


// ==================== Comandos PLAYER

CMD:ativarvip(playerid)
{
	SendClientMessage(playerid, COR_VIP, "C-VIP: Adicione uma Key valнda para ativar o VIP.");
	ShowPlayerDialog(playerid, DIALOG_ENABLE_KEY, DIALOG_STYLE_INPUT, "VIP", "\nNos informe sua key para ativar seu beneficio VIP:\n\n", "Ativar", "Sair");
	return 1;
}

CMD:vips(playerid)
{
	new ContVIP = 0, String[1000], Str[128];
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i) && PlayerInfo[i][Vip] > 0)
		{
			format(Str, sizeof(Str), ".:: VIP ON ::.  {008B00}%s {FFFFFF}   [{008B00}%i{FFFFFF}]\n", PlayerInfo[i][Nome], i);
			strcat(String, Str);
			ContVIP++;
		}
	}
	if(ContVIP == 0)
	{
		ShowPlayerDialog(playerid, DIALOG_VIPS, DIALOG_STYLE_MSGBOX, "{EEC900}C-VIP: - VIPs Online", "{FF0000}Nenhum VIP online no momento!", "Fechar", #);
	} else {
	    ShowPlayerDialog(playerid, DIALOG_VIPS, DIALOG_STYLE_MSGBOX, "{EEC900}C-VIP: - VIPs Online", String, "Fechar", #);
	}
	return 1;
}
// ======================================================


// ==================== Comandos ADMIN RCON

CMD:criarkey(playerid)
{
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, VERMELHO,"ERRO: Comando indisponivel. Admin RCON");
	ShowPlayerDialog(playerid, DIALOG_NEW_KEY, DIALOG_STYLE_INPUT, "KEYS VIP", "\nDigite uma nova key vбlida\n{FFFF00}Apenas letras sгo aceitas:\n\n", "Criar", "Cancelar");
	return 1;
}

CMD:removerkey(playerid)
{
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, VERMELHO,"ERRO: Comando indisponivel. Admin RCON");
	ShowPlayerDialog(playerid, DIALOG_REMOVE_KEY, DIALOG_STYLE_INPUT, "KEYS VIP", "\nDigite a Key que deseja Remover:\n\n", "Remover", "Cancelar");
	return 1;
}

CMD:darvip(playerid, params[])
{
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, VERMELHO,"ERRO: Comando indisponivel. Admin RCON");
	new Nivel, Dias, ID;
	if(sscanf(params, "udd", ID, Nivel, Dias)) return SendClientMessage(playerid, CINZA, "ADMIN: Use /darvip [ID] [Nivel] [Dias]");
    if(Nivel < 1 || Nivel > 3) return SendClientMessage(playerid, VERMELHO, "ERRO: Nivel Invбlido! Disponнvel de 1 a 3.");
	if(!IsPlayerConnected(ID)) return SendClientMessage(playerid, VERMELHO, "ERRO: Jogador nгo conectado.");
    SendClientMessage(playerid, LARANJA, "ADMIN: Comando efetuado com sucesso !");
	SetVip(ID, Nivel, Dias);
	return 1;
}

CMD:removervip(playerid, params[])
{
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, VERMELHO,"ERRO: Comando indisponivel. Admin RCON");
	new Motivo[100], Msg[128], ID;
	if(sscanf(params, "us", ID, Motivo)) return SendClientMessage(playerid, CINZA, "ADMIN: Use /tirarvipmysql_escape_string() [ID] [Motivo]");
    if(!IsPlayerConnected(ID)) return SendClientMessage(playerid, VERMELHO, "ERRO: Jogador nгo conectado.");
	format(Msg, sizeof Msg, "C-VIP: O admin %s retirou seu VIP. Motivo: %s.", PlayerInfo[playerid][Nome], Motivo);
	SendClientMessage(ID, COR_VIP, Msg);
	RemoveVip(ID);
	SendClientMessage(playerid, LARANJA, "ADMIN: Comando efetuado com sucesso !");
	return 1;
}

CMD:respawn(playerid)
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, VERMELHO,"ERRO: Comando indisponivel. Admin RCON");
    new String[70];
	format(String, sizeof(String), "ADMIN: O Admin %s deu respawn em todos os veiculos VIP criados!", PlayerInfo[playerid][Nome]);
	SendClientMessageToAll(LARANJA, String);
	SendClientMessage(playerid, LARANJA, "ADMIN: Todos os veiculos VIP criados foram destruidos!");
	for(new i = 0; i < sizeof(CarrosCriados); i++) DestroyVehicle(CarrosCriados[i]);
	return 1;
}
// ======================================================