SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Sistema de Vip usando SSCANF && DOF2

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11378
    Moedas : 1031977
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Sistema de Vip usando SSCANF && DOF2 Empty [Tutorial] Sistema de Vip usando SSCANF && DOF2

    Mensagem por Weslley_Script Dom 26 Mar 2023 - 11:02

    Eae guys, tipo tem uns cara que pergunta como criar um sistema de vip, com dias, e expiraзгo!
    ai eu ensinei no mйtodo strtok, agora vou ensinar no sscanf muito facil, qualquer 1 com uma logica boa, faz!
    Primeiro vamos criar umas Stocks de: NomePlayer(playerid), armazena(geta) o nome do player sem fica usando direto o
    new pnome, etc

    PHP код:

    Código:
    stock NomePlayerid(playerid)
    {
        new Nome[MAX_PLAYER_NAME]; 
        GetPlayerName(playerid, Nome, sizeof(Nome));
        return Nome; 


    Vou criar tbm uma define pra usar String, sem fica criando as variaveis sempre que for usar!
    PHP код:

    Código:
    #define SendStringMsg(%0,%1,%2,%3) do{new _string[128]; \ // quebra de linha
    format(_string,sizeof(_string),%2,%3); SendClientMessage(%0,%1,_string);} while(False)
    new False=false; //  (while(False)
    #define SendStringMsgToAll(%0,%1,%2) do{new _string[128]; \
    format(_string,sizeof(_string),%1,%2); SendClientMessageToAll(%0,_string);} while(False) 

    PHP код:

    Código:
    Ex:
    SendStringMsg(%0,%1,%2,%3) = 
    format(string, sizeof(string), " eu sou o %s id %d ", dougras, playerid);
    SendClientMessage(playerid, string);
    e somente vamos usar:
    SendStringMsg(playerid, COR, " eu sou o %s id %d ", dougras, playerid);
    menos trabalho
    SendStringMsgToAll(%0,%1,%2) = 
    format(string, sizeof(string), " eu sou o %s id %d ", dougras, playerid);
    SendClientMessageToAll(COR, string);
    Usaremos
    SendStringMsgToAll(COR, "", var, var); 

    vou criar outra stock para armazena onde vai ficar a pasta pra salva os dias
    PHP код:

    Código:
    stock VIP_FILE(nick[]) {    new str[128]; format(str,128,"/SUAPASTA/Vips/%s.ini", nick); return str; } 

    vocк jб deve ter sua pasta com os dados dos jogadores nick etc
    la vamos guarda se o player e vip ou nгo!

    PHP код:

    Código:
    enum pInfo{
      VipExpiro,       //enum para nгo precisa criar VipExpiro[MAX_PLAYERS], e VIP[MAX_PLAYERS]
      Vip
    }
    Player[MAX_PLAYERS][pInfo];// aqui e pra nos dizer que o jogador e vip, : Player = jogador, [MAX_PLAYERS pode ser o jogador que estб usando o comando /setvip = playerid, ou o jogador que o que esta usando disse, no caso  = ID, pinfo e oque ele й! 

    Agora vamos comeзa o sistema.
    Nos queremos setar por dias, 1 dia = 24*60*60 para nуs nгo ficar usando direto 12*60*60 vamos criar uma define que guarda esse valor
    PHP код:

    Código:
    #define UMDIA 24*60*60 

    nгo esqueзa de usar as Includes DOF2 e SSCANF
    PHP код:

    Código:
    #include "DOF2"
    #include "sscanf" // tem o sscanf2, depende do que vocк vai usar
    //eu vou usar a processador de cmd: ocmd, tem outros como ZCMD, ou vocк pode usar o padrгo strcmp
    #include "ocmd"
    //lembrando que estas includes precisa esta na pasta Pawno/Includes 

    se for usar o padrгo, use em:
    PHP код:

    Código:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp("/setvip", cmdtext, true, 10) == 0)
    {
    return 1;
    }
    return SendClientMessage(playerid, "[ ERROR ] >> Este comando nгo existe!"); se o player digita algo que nгo esta dentro do onplayercmdtext, irar retorna essa msg para ele.
    }//fechando on player 

    como vou usar ocmd, nгo precisamos cria-lo dentro de uma callback, recomendo em cima do onplayercommandtext ou no final do gm

    PHP код:

    Código:
    ocmd:setvip(playerid,params[])
    {
      new id, dias; 
         if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, ERROR, "[ ERRO ] » Vocк nгo tem permissгo para isso"); //rcon
    vamos usar o sscanf, vamos usar : id = jogador que o admin escolher pra virar vip, e dias = dias de vip
    sscanf 
    //d  = id
    //u = id 
    coloquei 2 id, pq depende das includes, minha eu uso D
    //s = text
    //i = int (numeros como 2453431) inteiros
    //f - float (numeros como 1231.1232.1231) quebrados
    //SE VCs NГO TROCAREM AS CORES PARA SUA EX: MINHA = BRANCO, SUA PODE SER =  WHITE
    //irб da erro! 
        if(sscanf(params, "di", id, dias)) return SendClientMessage(playerid, ERROR, "[ ERROR ] Use: /setvip [player id] [dias]");
       //se ele colocas dias = 0 ou mais que 360 dias, vai retorna a msg.
        if(dias < 1 || dias > 360)  return SendClientMessage(playerid, ERROR, "[ ERROR ] » Vip minimo 1 dia maximo 1 ano! de 1 a 360 dias");
    //se o id que ele escolheu estiver offline retorna a msg.
        if(!IsPlayerConnected(id)) return SendClientMessage(playerid, BRANCO, "[ ERROR ] » Nenhuma pessoa online com esse ID");
    //aqui eu vou seta o valor positivo ao jogador que eu escolhi para ser vip, e vou salva no arquivo dele, vcs ja devem ter feito seus sistema de salvamento, ent nгo vou ensinar essa parte, mas vou criar como se estivesse no meu sistema!
       
        new String[128];  format(String, sizeof(String), CONTAS); // aqui estou dizendo onde esta minha pasta com as contas dos registrados! novamente, vcs ja devem ter feito isso!
       
        if(fexist(String)) //se essa minha pasta existe, eu vou seta-lo como Vip 1 = positivo, valor da varial vip negativa = 0
        {
            DOF2_SetInt(String,"Vip",1); //vou coloca no arquivo.ini que contem o nome dele na pasta REGISTRADOS, que ele tem a varavel vip com valor de 1
            Player[id][Vip] = 1;
            SendClientMessage(id, BRANCO, "Vocк virou player vip"); // nem preciso explicar
            SendStringMsgToAll(AZUL, "O GameMaster %s setou <%s> ID:<%i> de player vip por %d",NomePlayerid(playerid), pname, id, dias); aqui jб expliquei
            Player[id][VipExpiro] = gettime()+(UMDIA*dias); //as variбvel que nos criamos na enum  2 vip e Vipexpiro, vamos usar a vip pra dizer se e vip ou nao e a expiro pra dizer se os dias dele acabou ou nгo, a define 1 dia que nos criamos = 24*60*60 * dias = os dias que o setador escolheu, vai da o resultado = dias que ele tem de vip, e usamos o gettime para conta!
            DOF2_CreateFile(VIP_FILE(NomePlayerid(id))); // agora aqui e a pasta que nos criamos pra salva os dias 
    eu criei 2 porque se, nуs setado o valor dos dias, na pasta dos registrados, quando acabace os dias dele, nos teremos que apaga o arquivo com o nome dele, ai apagara praticamente a conta dele por completo, ent la salvei somente, o valor dizendo que ele e vip, pra nos usar nas horas de checar os comandos, como /veh etc. checa se ele e vip ou nao, se sim usa se nao retorna msg dizendo que nao.
            DOF2_SetInt(VIP_FILE(NomePlayerid(id)), "Dias", dias); //vamos criar um arquivo com o nome do player, dentro do arquivo diz os dias que foi setado a ele.
            DOF2_SetInt(VIP_FILE(NomePlayerid(id)), "VipExpiro",Player[id][VipExpiro]);aqui  praticamente nos criamos um check, que iremos usa no dialog do login, ou em onplayerconnect, aqui nos salvamos os dias tbm, mas vamos usar essa variбvel : Player[id][VipExpiro] junto com o gettime! mais a frente! 
            DOF2_SaveFile(); //aqui vamos guarda tudo isso no arquivo.ini.
            return 1;
        }
        else
        {
           SendClientMessage(playerid,ERROR,"ERRO: Jogador nгo encontrado!"); //se esse a pasta nгo existe
           return 1;
        }
    }//fechando setvip
    Em onplayerconnect 

    PHP код:

    Código:
    //lembra vamos usar essa variбvel : Player[id][VipExpiro] junto com o gettime! mais a frente! (kk)
    ent chegou a hora, ela estб setada com o valor  de 24*60*60, e vamos supor que o admin deu 7 dias ent: 24*60*60*7 = 7 dias, nos usamos ela no gettime //Player[id][VipExpiro] = gettime()+(UMDIA*dias);
    Player[playerid][VipExpiro] = DOF2_GetInt(VIP_FILE(NomePlayerid(playerid)), "VipExpira");
    if(Player[playerid][VipExpiro] < gettime()) // O tempo de vip acabou.  // se vipexpiro for igual 24*60*60*7 significa que os dias dele, chegou ao fim, gettime < que VipExpiro gettime = 7 vipexpiro tbm foi setado de 7, se o vipexpiro tiver maior que ele, ja passou 7 dias, ai ele perde vip
               {
                  SendClientMessage(playerid, AZUL, "* Seu VIP expirou.");
                  Player[playerid][Vip] = 0; //setamos o valor da variavel para false
                  DOF2_RemoveFile(VIP_FILE(NomePlayerid(playerid))); //e apagamos o arquivo com o nome dele, nгo do registrados mas sim da pasta vips assim ele somente perdera o vip e nгo a conta
               }
               else    // Tempo de vip ainda nao acabou
               {
    // se o vipexpiro dele tiver menor que o gettime, iremos dizer quanto tempo falta pra acabar, pra ele fica ligado
                  SendStringMsgTo(playerid, AZUL, "* Seu VIP expira em %s.", Convert(Player[playerid][VipExpiro]-gettime())); //vamos supor que ele passou 4 dias de 7, 7 - 4 = 3, ent ele tem 3 dias de vip
                  Player[playerid][Vip] = 1; //e deixaremos ainda com valor positivo
               } 

    //explicaзгo muito ruim, eu msm to achando!

    PHP код:

    Código:
    public OnGameModeExit()
    {
        DOF2_Exit();
        return 1;


    lembrei que vcs n tem o convert

    PHP код:

    Código:
    Convert(number)
    {
        new hours = 0, mins = 0, secs = 0, string[128];
        hours = floatround(number / 3600);
        mins = floatround((number / 60) - (hours * 60));
        secs = floatround(number - ((hours * 3600) + (mins * 60)));
        new days = 0;
        if(hours >= 24)
        {
            days = floatround((hours/24), floatround_floor);
            hours = hours % 24;
        }
        if(days > 0)
        {
            format(string, 100, "%ddias, %dh %dm e %ds", days, hours, mins, secs);
        }
        else if(hours > 0)
        {
            format(string, 100, "%dh %dm e %ds", hours, mins, secs);
        }
        else
        {
            format(string, 100, "%dm e %ds", mins, secs);

    Creditos: Jonorusc



    [Tutorial] Sistema de Vip usando SSCANF && DOF2 D07Xwqb
    [Tutorial] Sistema de Vip usando SSCANF && DOF2 Yjab9HN

      Data/hora atual: Qua 8 maio 2024 - 9:15