[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
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