/* ####################################################################################### ### ### ### Sistema VIP ### ### ### ### Todos os scripts feitos aqui são te total autoria do criador. ### ### Este script está livre para edição e implementação em gamemodes. ### ### ### ### Mantenha os devidos creditos no script. ### ### ### ### Criador, desenvolvedor e tester: Dry. ### ### ### ####################################################################################### Funções: - IsPlayerVIP(playerid) - Chechar se um jogador é VIP. - LoadPlayerVIP(playerid) - Carregar dados de VIP de um jogador a partir do arquivo. - SavePlayerVIP(playerid) - Salvar dados de VIP dentro do arquivo. - CreateVipKey(playerid, Key[], Days) - Criar uma nova Key. - UseVipKey(playerid, Key[]) - Usar determinada key. - RemoveKey(playerid, Key[]) - Deletar uma key existente e não usada. - GetExpirationDays(playerid) - Getar quantos dias faltam para expirar o VIP. - SetVipForPlayer(playerid, Days) - Setar ou renovar o VIP de algum jogador. - ShowWelcomeMessage(playerid) - Abre uma mensagem de boas vindas, contendo algumas info. Comandos: - CMD:setvip [ID] [DIAS] ( Admin ) // Setamos um jogador como VIP - CMD:viphelp ( VIP ) // Algumas informações sobre o seu VIP. - CMD:ativarvip ( Default )// Um dialog será aberto solicitando o código. - CMD:novakey ( Admin ) // Uma nova key será criada na pasta "Keys" para livre uso. - CMD:delkey [KEY] ( Admin ) // Deletar uma key existente - CMD:vips ( Default ) // Checar jogadores VIP online. Configurações: #define CHAT_MODEL 3 - Modelo ao falar no chat. Preview In-Forúm #define FULL_LIFE 1 - Spawnar com COLETE E VIDA FULL #define DEATH_RESPAWN_LOCAL 1 - Spawnar no local onde morreu Instalação: - Crie uma pasta chamada "Vips" localizada em scriptfiles. - Dentro da mesma crie as seguintas pastas: * Users * Keys - O precesso de criação de VIP's e keys é automatico, siga os passos e comandos dentro do game. -Atenciosamente Dry ( Lucas ). */ #include #include #include #include #define ENGINE::%0(%1) stock %0(%1) #define Public::%0(%1) forward %0(%1); public %0(%1) #define DIALOG_ATIV_KEY 779 #define DIALOG_MAKE_KEY 779+1 #define DIALOG_MAKE_DAYS 779+2 #define DIALOG_CONFIRM 779+3 //Folder's #define VIP_USERS "Vips/Users/%s.ini" #define VIP_KEYS "Vips/Keys/%s.ini" //Colors #define Default 0xDE3A3AFF #define Branco 0xFFFFFFFF //Config #define CHAT_MODEL 3 #define FULL_LIFE 1 #define DEATH_RESPAWN_LOCAL 1 #if DEATH_RESPAWN_LOCAL == 1// Usado para armazenar Locais de onde morreu new Float: X[MAX_PLAYERS], Float: Y[MAX_PLAYERS], Float: Z[MAX_PLAYERS], Interior[MAX_PLAYERS]; #endif //Player Definitions enum PlayerParams { bool:VIP, dExpiration, hExpiration }; new Player[MAX_PLAYERS][PlayerParams]; new bool:VisibleWelcome[MAX_PLAYERS]; new Text:DrawWelcome[MAX_PLAYERS][6]; new TimerDraw[MAX_PLAYERS]; new cKey[MAX_PLAYERS][128], cDays[MAX_PLAYERS]; public OnFilterScriptInit() { for ( new playerid = 0; playerid < GetMaxPlayers(); playerid++) { if ( IsPlayerConnected(playerid)) { LoadPlayerVIP(playerid); } } SetTimer("CheckVipsInGame", 60000, true); print("VIP System Loaded"); return 1; } Public::CheckVipsInGame() { for ( new playerid = 0; playerid < GetMaxPlayers(); playerid++) { if ( IsPlayerConnected(playerid) && IsPlayerVIP(playerid)) { if ( GetExpirationDays(playerid) <= 0) { SetVipForPlayer(playerid, 0); } } } } public OnFilterScriptExit() { for ( new playerid = 0; playerid < GetMaxPlayers(); playerid++) HiddenWelcome(playerid); print("VIP System UnLoaded."); return 1; } public OnPlayerConnect(playerid) { LoadPlayerVIP(playerid); return 1; } public OnPlayerDisconnect(playerid, reason) { HiddenWelcome(playerid); Player[playerid][VIP] = false; return 1; } public OnPlayerSpawn(playerid) { if ( IsPlayerVIP(playerid)) { #if FULL_LIFE == 1 { SetPlayerHealth(playerid, 100.0); SetPlayerArmour(playerid, 100.0); } #endif #if DEATH_RESPAWN_LOCAL == 1 { SetPlayerInterior(playerid, Interior[playerid]); SetPlayerPos(playerid, X[playerid], Y[playerid], Z[playerid]); } #endif } return 1; } public OnPlayerDeath(playerid, killerid, reason) { #if DEATH_RESPAWN_LOCAL == 1 { if ( IsPlayerVIP(playerid)) { GetPlayerPos(playerid, X[playerid], Y[playerid], Z[playerid]); Interior[playerid] = GetPlayerInterior(playerid); } } #endif return 1; } public OnPlayerText(playerid, text[]) { if ( IsPlayerVIP(playerid)) { new Name[24]; GetPlayerName(playerid, Name, 24); #if CHAT_MODEL == 1 { new dStr[128]; format ( dStr, 128, "[%d]%s[V.I.P]: {FFFFFF}%s", playerid, Name, text); SendClientMessageToAll(GetPlayerColor(playerid), dStr); return 0; } #endif #if CHAT_MODEL == 2 { new dStr[128]; format ( dStr, 128, "%s[%d][V.I.P]: {FFFFFF}%s", Name, playerid, text); SendClientMessageToAll(GetPlayerColor(playerid), dStr); return 0; } #endif #if CHAT_MODEL == 3 { new dStr[128]; format ( dStr, 128, "{F9BD0B}VIP {FFFFFF}%s diz: {FFFFFF}%s", Name, text); SendClientMessageToAll(GetPlayerColor(playerid), dStr); return 0; } #endif } return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if ( dialogid == DIALOG_ATIV_KEY && response) { UseVipKey(playerid, inputtext); return 1; } if ( dialogid == DIALOG_MAKE_KEY && response ) { format ( cKey[playerid], 128, inputtext); new Str[128]; format ( Str, sizeof Str, "{FFFFFF}Seu novo codigo VIP: {DE3A3A}%s\n\n{FFFFFF}Agora nos informe a quantidade de dias do VIP:", cKey[playerid]); ShowPlayerDialog(playerid, DIALOG_MAKE_DAYS, DIALOG_STYLE_INPUT, "Criação de Nova Key", Str, "Criar", "Cancelar"); return true; } if ( dialogid == DIALOG_MAKE_DAYS && response ) { if ( !IsNumeric(inputtext)) return SendClientMessage(playerid, Default, "Dias são compostos de números."); cDays[playerid] = strval(inputtext); new Str[500]; format ( Str, sizeof Str, "{FFFFFF}Informações de sua nova key:\n\nCódigo: {DE3A3A}%s\n{FFFFFF}Vencimento: {DE3A3A}%d dias\n\n{FFFFFF}Deseja criar ?", cKey[playerid], cDays[playerid]); ShowPlayerDialog(playerid, DIALOG_CONFIRM, DIALOG_STYLE_MSGBOX, "{FFFFFF}Criação de Nova Key",Str, "Sim", "Não"); return 1; } if ( dialogid == DIALOG_CONFIRM && response) { CreateVipKey(playerid, cKey[playerid], cDays[playerid]); return 1; } return 1; } CMD:ativarvip(playerid) { ShowPlayerDialog(playerid, DIALOG_ATIV_KEY, DIALOG_STYLE_INPUT, "{FFFFFF}Ativar VIP", "{FFFFFF}Bem vindo.\nNos informe sua key para ativar seu beneficio VIP:", "Ativar", "Sair"); return 1; } CMD:novakey(playerid, params[]) { if ( !IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Default, "Você não tem perissão para isso."); ShowPlayerDialog(playerid, DIALOG_MAKE_KEY, DIALOG_STYLE_INPUT, "{FFFFFF}Criação de Nova Key", "{FFFFFF}Nos informe um novo código VIP:", "Criar", "Cancelar"); return 1; } CMD:viphelp(playerid) { if ( !IsPlayerVIP(playerid)) return SendClientMessage(playerid, Default, "[Erro]{FFFFFF} Você não é vip."); new Str[1028]; format ( Str, sizeof Str, "{FFFFFF}Confira aqui comandos e status do seu VIP.\n\nSeu VIP expira em: %d dias.\n\nContate um administrador para renovar seu plano.", GetExpirationDays(playerid)); ShowPlayerDialog(playerid, 775+1, DIALOG_STYLE_MSGBOX, "{FFFFFF}Informações do VIP", Str, "Sair", ""); return 1; } CMD:delkey(playerid, params[]) { if ( !IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Default, "Você não tem perissão para isso."); new Key[128]; if ( sscanf ( params, "s", Key)) return SendClientMessage(playerid, Default, "[Erro]{FFFFFF} Nos informe o nome da key."); RemoveKey(playerid, Key); return 1; } CMD:setvip(playerid, params[]) { if ( !IsPlayerAdmin(playerid)) return SendClientMessage(playerid, Default, "[Vip] {FFFFFF}Você não tem permissão para isso."); new Nome, Dias; if ( sscanf ( params, "id", Nome, Dias)) return SendClientMessage(playerid, Default, "[Vip] {FFFFFF}Use: /setvip [ID/NAME] [DIAS]"); SetVipForPlayer(Nome, Dias); return 1; } CMD:vips(playerid) { new Name[24], Str[128]; SendClientMessage(playerid, Default, "VIP's Online:"); for ( new i = 0; i < GetMaxPlayers(); i++) { if ( IsPlayerConnected(i) && IsPlayerVIP(i)) { GetPlayerName(i, Name, 24); format ( Str, sizeof Str, "[V.I.P]{FFFFFF} %s ID: %d", Name, i); SendClientMessage(i, Default, Str); } } return 1; } ENGINE::IsPlayerVIP(playerid) { if ( Player[playerid][VIP] == false ) return 0; return 1; } ENGINE::LoadPlayerVIP(playerid) { new Name[24], dStr[128]; GetPlayerName(playerid, Name, sizeof Name); format ( dStr, sizeof dStr, VIP_USERS, Name); if ( !DOF2::FileExists(dStr)) return true; Player[playerid][VIP] = true; Player[playerid][dExpiration] = DOF2::GetInt(dStr, "Day_Expiration"); Player[playerid][hExpiration] = DOF2::GetInt(dStr, "Hour_Expiration"); ShowWelcomeMessage(playerid); return true; } ENGINE::SavePlayerVIP(playerid) { if ( IsPlayerVIP(playerid)) { new Name[24], Str[128]; GetPlayerName(playerid, Name, 24); format ( Str, sizeof Str, VIP_USERS, Name); if ( !DOF2::FileExists(Str)) DOF2::CreateFile(Str); if ( !DOF2::FileExists(Str)) return printf ( "O arquivo de VIP %s não pode ser criado ( PASTA INEXISTENTE )", Name); DOF2::SetInt(Str, "Day_Expiration", Player[playerid][dExpiration]); DOF2::SetInt(Str, "Hour_Expiration", Player[playerid][hExpiration]); DOF2::SaveFile(); } return 1; } ENGINE::CreateVipKey(playerid, Key[], Days) { new Str[128]; format ( Str, sizeof Str, VIP_KEYS, Key); if ( DOF2::FileExists(Str)) { new Dayss = DOF2::GetInt(Str, "VIP_Days"); format ( Str, sizeof Str, "[Erro]{FFFFFF} [ %s ] - [ %d dias ]",Key, Dayss); SendClientMessage(playerid, Default, "[Erro] {FFFFFF}Um codigo semelhante ja está criado."); SendClientMessage(playerid, Default, Str); return 1; } if ( Days <= 0) return SendClientMessage(playerid, Default, "[Erro]{FFFFFF} Impossível realizar esta operação."); DOF2::CreateFile(Str); DOF2::SetInt(Str, "VIP_Days", Days); DOF2::SaveFile(); format ( Str, sizeof Str, "[VIP]{FFFFFF} [ %s ] - [ %d dias ]", Key, Days); SendClientMessage(playerid, Default, "[VIP]{FFFFFF} Um novo código VIP foi criado."); SendClientMessage(playerid, Default, "[VIP]{FFFFFF} Use /ativarvip para usa-lo"); SendClientMessage(playerid, Default, Str); return 1; } ENGINE::UseVipKey(playerid, Key[]) { new Str[128]; format ( Str, sizeof Str, VIP_KEYS, Key); if ( !DOF2::FileExists(Str)) { SendClientMessage(playerid, Default, "************************************************"); SendClientMessage(playerid, Default, " O codigo fornecido já foi usado ou não existe."); SendClientMessage(playerid, Default, " Não tem um código VIP ? Contate um adminstrador."); SendClientMessage(playerid, Default, "************************************************"); return 1; } new Days = DOF2::GetInt(Str, "VIP_Days"); SetVipForPlayer(playerid, Days); DOF2::RemoveFile(Str); new Name[24]; GetPlayerName(playerid, Name, 24); printf ("O jogador %s ativou o codigo %s com %d dias", Name, Key, Days); return 1; } ENGINE::RemoveKey(playerid, Key[]) { new Str[128]; format ( Str, sizeof Str, VIP_KEYS, Key); if ( !DOF2::FileExists(Str)) return SendClientMessage(playerid, Default, "Key Inexistente"); DOF2::RemoveFile(Str); format (Str, sizeof Str, "[VIP KEY]{FFFFFF} O codigo %s foi removido.", Key); SendClientMessage(playerid, Default, Str); return 1; } ENGINE::GetExpirationDays(playerid) { new Days = 0; if ( IsPlayerVIP(playerid)) { Days = Player[playerid][dExpiration] - getdate(); } return Days; } ENGINE::SetVipForPlayer(playerid, Days) { if ( !IsPlayerConnected(playerid)) return 1; if ( Days == 0 ) { new Nome[24], Str[128]; GetPlayerName(playerid, Nome, 24); format ( Str, sizeof Str, VIP_USERS, Nome); DOF2::RemoveFile(Str); Player[playerid][VIP] = false; SendClientMessage(playerid, Default, "[Vip] {FFFFFF}Informamos que seu VIP expirou."); SendClientMessage(playerid, Default, "[Vip] {FFFFFF}Contate um administrador o mais rapido possível para renova-lo."); SendClientMessage(playerid, Default, "[Vip] {FFFFFF}Obrigado por colaborar com nosso servidor."); return 1; } new Str[128]; if ( Player[playerid][VIP] == true ) { format ( Str, sizeof Str, "[Vip] {FFFFFF}Seu VIP foi renovado. ( %d dias )", Days); Player[playerid][dExpiration] += Days; Player[playerid][hExpiration] = gettime(); } else { format ( Str, sizeof Str, "[Vip] {FFFFFF}Seu VIP foi ativado. ( %d dias )", Days); Player[playerid][dExpiration] = getdate() + Days; Player[playerid][hExpiration] = gettime(); } Player[playerid][VIP] = true; SavePlayerVIP(playerid); SendClientMessage(playerid, Default, "[Vip] {FFFFFF}Obrigado por adquirir nosso plano VIP."); SendClientMessage(playerid, Default, "[Vip] {FFFFFF}Use: /viphelp para mais informações."); SendClientMessage(playerid, Default, Str); return 1; } ENGINE::ShowWelcomeMessage(playerid) { if ( IsPlayerVIP(playerid)) { if ( VisibleWelcome[playerid] == false ) { DrawWelcome[playerid][0] =TextDrawCreate(579.000000, 301.000000, "_"); TextDrawBackgroundColor (DrawWelcome[playerid][0], 255); TextDrawFont (DrawWelcome[playerid][0], 1); TextDrawLetterSize (DrawWelcome[playerid][0], 0.500000, 7.199999); TextDrawColor (DrawWelcome[playerid][0], -1); TextDrawSetOutline (DrawWelcome[playerid][0], 0); TextDrawSetProportional (DrawWelcome[playerid][0], 1); TextDrawSetShadow (DrawWelcome[playerid][0], 1); TextDrawUseBox (DrawWelcome[playerid][0], 1); TextDrawBoxColor (DrawWelcome[playerid][0], -1010580690); TextDrawTextSize (DrawWelcome[playerid][0], 433.000000, 0.000000); DrawWelcome[playerid][1] =TextDrawCreate(579.000000, 301.000000, "_"); TextDrawBackgroundColor (DrawWelcome[playerid][1], 255); TextDrawFont (DrawWelcome[playerid][1], 1); TextDrawLetterSize (DrawWelcome[playerid][1], 0.500000, 0.899999); TextDrawColor (DrawWelcome[playerid][1], -1); TextDrawSetOutline (DrawWelcome[playerid][1], 0); TextDrawSetProportional (DrawWelcome[playerid][1], 1); TextDrawSetShadow (DrawWelcome[playerid][1], 1); TextDrawUseBox (DrawWelcome[playerid][1], 1); TextDrawBoxColor (DrawWelcome[playerid][1], -1010580685); TextDrawTextSize (DrawWelcome[playerid][1], 433.000000, 0.000000); DrawWelcome[playerid][2] =TextDrawCreate(437.000000, 301.000000, "Bem Vindo Novamente"); TextDrawBackgroundColor (DrawWelcome[playerid][2], -1010580736); TextDrawFont (DrawWelcome[playerid][2], 2); TextDrawLetterSize (DrawWelcome[playerid][2], 0.159999, 0.899999); TextDrawColor (DrawWelcome[playerid][2], -1); TextDrawSetOutline (DrawWelcome[playerid][2], 0); TextDrawSetProportional (DrawWelcome[playerid][2], 1); TextDrawSetShadow (DrawWelcome[playerid][2], 1); DrawWelcome[playerid][3] =TextDrawCreate(437.000000, 318.000000, "Seu VIP ainda esta ativo."); TextDrawBackgroundColor (DrawWelcome[playerid][3], -1010580736); TextDrawFont (DrawWelcome[playerid][3], 2); TextDrawLetterSize (DrawWelcome[playerid][3], 0.149999, 0.799999); TextDrawColor (DrawWelcome[playerid][3], -1); TextDrawSetOutline (DrawWelcome[playerid][3], 0); TextDrawSetProportional (DrawWelcome[playerid][3], 1); TextDrawSetShadow (DrawWelcome[playerid][3], 1); DrawWelcome[playerid][4] =TextDrawCreate(437.000000, 329.000000, "Use: /viphelp para mais info."); TextDrawBackgroundColor (DrawWelcome[playerid][4], -1010580736); TextDrawFont (DrawWelcome[playerid][4], 2); TextDrawLetterSize (DrawWelcome[playerid][4], 0.149999, 0.799999); TextDrawColor (DrawWelcome[playerid][4], -1); TextDrawSetOutline (DrawWelcome[playerid][4], 0); TextDrawSetProportional (DrawWelcome[playerid][4], 1); TextDrawSetShadow (DrawWelcome[playerid][4], 1); DrawWelcome[playerid][5] =TextDrawCreate(437.000000, 356.000000, "Seu vip expira em: ... dias"); TextDrawBackgroundColor (DrawWelcome[playerid][5], -1010580736); TextDrawFont (DrawWelcome[playerid][5], 2); TextDrawLetterSize (DrawWelcome[playerid][5], 0.149999, 0.799999); TextDrawColor (DrawWelcome[playerid][5], -1); TextDrawSetOutline (DrawWelcome[playerid][5], 0); TextDrawSetProportional (DrawWelcome[playerid][5], 1); TextDrawSetShadow (DrawWelcome[playerid][5], 1); new Str[128]; format ( Str, sizeof Str, "Seu VIP expira em: %d dias.", GetExpirationDays(playerid)); TextDrawSetString(DrawWelcome[playerid][5], Str); for ( new t = 0; t < 6; t++) TextDrawShowForPlayer(playerid, DrawWelcome[playerid][t]); VisibleWelcome[playerid] = true; TimerDraw[playerid] = SetTimerEx("HiddenWelcome", 6000, false, "i", playerid); if ( GetExpirationDays(playerid) < 5) { format ( Str, sizeof Str, "[Vip] {FFFFFF}Seu VIP expira em %d dias.", GetExpirationDays(playerid)); SendClientMessage(playerid, Default, Str); } } } } Public::HiddenWelcome(playerid) { if ( VisibleWelcome[playerid] == true ) { for ( new t = 0; t < 6; t++) TextDrawDestroy(DrawWelcome[playerid][t]); TimerDraw[playerid] = 0; VisibleWelcome[playerid] = false; } } ENGINE::IsNumeric(const string[]) { for (new i = 0, j = strlen(string); i < j; i++) { if (string[i] > '9' || string[i] < '0') return 0; } return 1; }