SA-MP Forums Archive
[Ajuda]Limpar arquivo - 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]Limpar arquivo (/showthread.php?tid=195438)



[Ajuda]Limpar arquivo - keller012 - 02.12.2010

Eu estou fazendo um sistema que salva o dia,mes,ano,hora,minuto e ip que o player logou para que no proximo login apareзa para ele:

Seu ultimo login foi dia 02/12/2010 бs 16:15, pelo ip: 11111111111

Ele funciona quase 100%
o unico problema й que quando ele loga pela segunda vez, envez de salvar por cima doque tinha ele apenas continua.
Estou fazendo da seguinte forma:

Para salvar os dados do login:
pawn Код:
new giveplayer[MAX_PLAYER_NAME];
               GetPlayerName(playerid, giveplayer, sizeof(giveplayer));
               new stringaa[128];
               new stringgg[128];
               GetPlayerIp(playerid,ip,15);
               format(stringaa, sizeof(stringaa), "/LogPlayer/%s.ini", giveplayer);
                if(!dini_Exists(stringaa))
                    {
                        dini_Create(stringaa);
                    }
                new File:logadmin = fopen(stringaa, io_append);
                if(logadmin)
                {
                new Ano, Mes,Dia;
                getdate(Ano, Mes,Dia);
                getdate(Anologp[playerid], Meslogp[playerid],Dialogp[playerid]);
                new Hora, Minuto, Segundo;
                gettime(Hora, Minuto, Segundo);
                gettime(Horalogp[playerid], Minutologp[playerid], Segundologp[playerid]);
                format(stringgg, sizeof stringgg, "%d|%d|%d|%d|%d|%s", Dia, Mes, Ano, Hora, Minuto,ip);
                fwrite(logadmin, stringgg);
                fclose(logadmin);
Para ler os dados do ultimo login:
pawn Код:
new Baname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, Baname, sizeof(Baname));
         new string123[128];
        format(string123, sizeof(string123), "/LogPlayer/%s.ini", Baname);
        if(fexist(string123))
        {
         new load[12][32];
        new str[128];
        new UltimoDia,UltimoMes,UltimoAno,UltimaHora,UltimoMinuto,UltimoIp[15];
        new File:file = fopen(string123,io_read);
        if (file)
        {
            while (fread(file, str, sizeof str))
            {
                split(str, load, '|');

                UltimoDia = strval(load[0]);
                UltimoMes = strval(load[1]);
                UltimoAno = strval(load[2]);
                UltimaHora = strval(load[3]);
                UltimoMinuto = strval(load[4]);
                strmid(UltimoIp, load[5], 0, strlen(load[5])-1, 15);
                format(str, sizeof str, "Seu ultimo login foi dia %d/%d/%d бs %d:%d, pelo ip: %s",UltimoDia,UltimoMes,UltimoAno,UltimaHora,UltimoMinuto,UltimoIp);
               SendClientMessage(playerid, ADMIN_RED, str);
               }
               }
               return 1;
              }
Oque esta acontecendo й o seguinte:
O primeiro login vai salvar assim:
2|12|2010|16|18|1111111

e vai ler certinho
ja no segundo vai ficar salvo assim:
2|12|2010|16|18|11111113|12|2010|15|11|1111111

Um atras do outro.
Dando problemas.
Oque eu queria fazer й limpar o arquivo antes de cada novo salvamento.
So nao sei como.
Alguem pode me ajudar pls??
xD


Re: [Ajuda]Limpar arquivo - rjjj - 02.12.2010

Bom, dando uma olhada em algumas includes motei uma funзгo que faz o reset:

Coloque:

pawn Код:
//No Final do Gamemode/Filterscript

stock freset(filename[])
{
    fremove(filename);
    if (fexist(filename)) return false;
    new File:resetvar;
    resetvar=fopen(filename,io_write);
    if (resetvar) {
        fclose(resetvar);
        return true;
    }
    return false;
}
Basta vocк colocar

Код:
freset(stringaa);
Antes de:

Код:
fwrite(logadmin, stringgg);
Espero ter ajudado


Re: [Ajuda]Limpar arquivo - keller012 - 02.12.2010

eu tentei aqui nao funcionou =/
eu tentei colocar pra deletar o arquivo tambem
mas nao da certo com o player on...
=\


Re: [Ajuda]Limpar arquivo - rjjj - 03.12.2010

Estranho =/


A include Dini tem algumas funзхes que podem ajudб-lo a resetar o arquivo.


Vocк pode usar primeiro dini_Remove(deletando o arquivo) e depois dini_Create(criando outro arquivo igual, mas vazio por dentro), tudo isso antes de fwrite.


Assim quando os dados forem ser salvos, o arquivo serб removido, recriado (ficando vazio por dentro) e aн sim reescrito por dentro sem colocar os dados em cima de outros, pois o arquivo estarб em branco antes


Re: [Ajuda]Limpar arquivo - keller012 - 03.12.2010

axo que ja tentei de todas as formas possiveis...
e essa que tu falo й uma delas.
ja tentei fazer por .txt
pra ver se deleta com o cara on
ja tentei de tudo.

so nao intendo pq que com a conta on nao deleta o arquivo.
pq se eu digitar com outra conta /deletararquivo(por exemplo)
o arquivo deleta, se a conta estiver off

edit:

eu tava pensando em algo que salvasse o nick do cara
para que depois que ele saisse do servidor deleta o arquivo

mas eu tentei salvar assim:
Код:
new nome = sendername;
e dei warning


Re: [Ajuda]Limpar arquivo - rjjj - 03.12.2010

Bom cara, nгo sei como vocк planejou fazer seu sistema, mas eu fiz as variбveis que faltavam e arrumei mais alguns cуdigos e agora o salvamento e carregamento agora estгo funcionando 100%:



Salvamento (Fiz no OnPlayerDisconnect):


pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    new giveplayer[MAX_PLAYER_NAME];
    new Anologp[MAX_PLAYERS];
    new Meslogp[MAX_PLAYERS];
    new Dialogp[MAX_PLAYERS];
    new Horalogp[MAX_PLAYERS];
    new Minutologp[MAX_PLAYERS];
    new Segundologp[MAX_PLAYERS];
    new Ano, Mes,Dia;
    new Hora, Minuto, Segundo;
    new ip[128];
    new stringaa[128];
    new stringgg[128];
    new stringbb[128];
    GetPlayerName(playerid, giveplayer, sizeof(giveplayer));
    GetPlayerIp(playerid,ip,15);
    format(stringaa, sizeof(stringaa), "/LogPlayer/%s.ini", giveplayer);
    if(fexist(stringaa))
    {
        fremove(stringaa);
        if (fexist(stringaa)) return false;
        new File:specialvar;
        specialvar=fopen(stringaa,io_write);
        if (specialvar) {
            getdate(Ano, Mes,Dia);
            getdate(Anologp[playerid], Meslogp[playerid],Dialogp[playerid]);
            gettime(Hora, Minuto, Segundo);
            gettime(Horalogp[playerid], Minutologp[playerid], Segundologp[playerid]);
            new File:gogo = fopen(stringaa, io_append);
            format(stringbb, sizeof(stringbb), "%d|%d|%d|%d|%d|%s", Dia, Mes, Ano, Hora, Minuto, ip);
            fwrite(gogo, stringbb);
            fclose(gogo);
            fclose(specialvar);
            return true;
        }
        return false;
    }
    else
    {
        getdate(Ano, Mes,Dia);
        getdate(Anologp[playerid], Meslogp[playerid],Dialogp[playerid]);
        gettime(Hora, Minuto, Segundo);
        gettime(Horalogp[playerid], Minutologp[playerid], Segundologp[playerid]);
        new File:logadmin = fopen(stringaa, io_append);
        format(stringgg, sizeof(stringgg), "%d|%d|%d|%d|%d|%s", Dia, Mes, Ano, Hora, Minuto, ip);
        fwrite(logadmin, stringgg);
        fclose(logadmin);
        return 1;
    }
}

E Carregamento (Fiz no OnPlayerSpawn):


pawn Код:
public OnPlayerSpawn(playerid)
{
    new nicklogger[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nicklogger, sizeof(nicklogger));
    new stringlogging[128];
    format(stringlogging, sizeof(stringlogging), "/LogPlayer/%s.ini", nicklogger);
    if(fexist(stringlogging))
    {
        new Baname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, Baname, sizeof(Baname));
        new string123[128];
        format(string123, sizeof(string123), "/LogPlayer/%s.ini", Baname);
        if(fexist(string123))
        {
            new load[12][32];
            new str[128];
            new UltimoDia,UltimoMes,UltimoAno,UltimaHora,UltimoMinuto,UltimoIp[15];
            new File:file = fopen(string123,io_read);
            if (file)
            {
                    while (fread(file, str, sizeof str))
                    {
                        split(str, load, '|');
                        UltimoDia = strval(load[0]);
                        UltimoMes = strval(load[1]);
                        UltimoAno = strval(load[2]);
                        UltimaHora = strval(load[3]);
                        UltimoMinuto = strval(load[4]);
                        strmid(UltimoIp, load[5], 0, strlen(load[5])-1, 15);
                        format(str, sizeof str, "Seu ultimo login foi dia %d/%d/%d бs %d:%d, pelo ip: %s",UltimoDia,UltimoMes,UltimoAno,UltimaHora,UltimoMinuto,UltimoIp);
                        SendClientMessage(playerid, ADMIN_RED, str);
                    }
            }
        }
    }
 }
Espero ter ajudado


Respuesta: [Ajuda]Limpar arquivo - RockFire - 03.12.2010

rjjj tentei adaptar pra o meu GM e ta dando um erro
Documents and Settings\kOrN\Desktop\SA-MP Server\gamemodes\soa-gm.pwn(754) : error 017: undefined symbol "split"

a linha й essa
split(str, load, '|');


Re: [Ajuda]Limpar arquivo - ipsBruno - 03.12.2010

Final GM:

pawn Код:
stock freset(filename[])
{
    if(!fexist(filename)) return false;
    fremove(filename);    
    new File:resetvar;
    resetvar=fopen(filename,io_write);
    fclose(resetvar);
    return true;      
}
stock split(const string[], string1[], string2[], character, maxsize = strlen(string)+1)
{
format(string1, maxsize, "%s", string);
format(string2, maxsize, "%s", string);
strdel(string1, character+1, strlen(string));
strdel(string2, 0, character+1);
return 1;
}



Re: [Ajuda]Limpar arquivo - keller012 - 03.12.2010

drakins
o gm nao ta compilando
ele da erro
por causa do split


Re: [Ajuda]Limpar arquivo - rjjj - 03.12.2010

Coloque no final do GM:

pawn Код:
stock split(const strsrc[], strdest[][], delimiter)
{
    new i, li;
    new aNum;
    new len;
    while(i <= strlen(strsrc)){
        if(strsrc[i]==delimiter || i==strlen(strsrc)){
            len = strmid(strdest[aNum], strsrc, li, i, 128);
            strdest[aNum][len] = 0;
            li = i+1;
            aNum++;
        }
        i++;
    }
    return 1;
}

Espero ter ajudado