SA-MP Forums Archive
[AJUDA] Problemгo com bIni!!! - 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] Problemгo com bIni!!! (/showthread.php?tid=289304)



[AJUDA] Problemгo com bIni!!! - dudaefj - 11.10.2011

Bom
Ainda lembro na primeira vez que fui usar Fini, passei umas 7hrs atй a lуgica + a galera do forum me convencerem de que Fini era realmente bugadгo. Alguns atй hoje discordam, porйm nunca foram capazes de explicar qual era o erro daquele cуdigo...

Espero que o mesmo nгo aconteзa com bIni
jб gastei algumas horas aqui e definitivamente nгo encontro nenhum erro na minha lуgica...
Tenho esperanзa que alguйm aqui seja capaz de encontrar para mim
ou concluir novamente que o sistema de cache tem bug ;(
Espero que nгo seja esta ъltima opзгo!!

bom, vamos lб
cуdigo simples:
ao usar o comando /daradmin, ele chama esta funзгo, com:
string[] = nick de qm usou o comando
playerid = id de qm recebeu admin
nivel = nivel de admin
Entгo a funзгo se encarrega de criar 2 arquivos
Admins/Nome_Sobrenome.ini e
Admins/IDs/id.ini
com o mesmo conteъdo.. Apenas informaзхes de quem promoveu, quando promoveu e o nнvel que foi promovido.
Abre, Escreve, Salva, Fecha.

PHP код:
stock DarAdmin(string[],playerid,nivel)
{
    new 
arquivo[50], nome[24],texto[128];
    
GetPlayerName(playerid,nome,24);
    
format(arquivo,50,"Admins/%s.ini",nome);
    new 
a22m22d22;
    new 
h22,mi22,s22;
    
getdate(a22,m22,d22);
    
gettime(h22,mi22,s22);
    new 
i;
    if(
nivel>0)
    {
        if(!
dini_Exists(arquivo)) 
        {
            
INI_Create(arquivo);
            
INI_Open(arquivo);
            
INI_WriteString("Nome",nome);
            
INI_WriteInt("ID",IDAdmin());
            
format(texto,128,"Data: (%d/%d/%d) Hora: (%d:%d:%d)",d22,m22,a22,h22,mi22,s22)
            
INI_WriteString("UltimoLogin",texto);
            
INI_WriteString("Promocao0",texto);
            
INI_WriteInt("Level0",nivel);
            
INI_WriteString("AdicionadoPor",string);
            
INI_Save();
            
INI_Close();
            
            
INI_Open("Admins/Lista.ini");
            for(
i=i<MAX_ADMINSi++)
            {
                
format(arquivo,50"Admin%d",i);
                if(!
strcmp(INI_ReadString(arquivo),"0",true)) break;
            }
            
INI_WriteString(arquivo,nome);
            
format(arquivo,50,"Nivel%d",i);
            
INI_WriteInt(arquivo,nivel);
            
INI_Save();
            
INI_Close();
            
            
format(arquivo,50,"Admins/IDs/%d.ini",IDAdmin());
            
INI_Create(arquivo);
            
INI_Open(arquivo);
            
INI_WriteString("Nome",nome);
            
INI_WriteInt("ID",IDAdmin());
            
format(texto,128,"Data: (%d/%d/%d) Hora: (%d:%d:%d)",d22,m22,a22,h22,mi22,s22)
            
INI_WriteString("UltimoLogin",texto);
            
INI_WriteString("Promocao0",texto);
            
INI_WriteInt("Level0",nivel);
            
INI_WriteString("AdicionadoPor",string);
            
INI_Save();
            
INI_Close();
            
        }
        else
        {
            
printf(arquivo);
            new 
ID,texto2[20],texto3[20],texto4[30];
            
printf(arquivo);
            
INI_Open(arquivo);
            
printf(arquivo);
            for( 
=0i<MAX_PROMOCOESi++)
            {
                
format(texto2,20,"Promocao%d",i);
                if(!
strcmp(INI_ReadString(texto2),"0",true)) break
            }
            
format(texto3,20,"Level%d",i);
            
format(texto4,30,"PromovidoPor%d",i);
            
format(texto,128,"Data: (%d/%d/%d) Hora: (%d:%d:%d)",d22,m22,a22,h22,mi22,s22)
            
INI_WriteString(texto2,texto);
            
INI_WriteInt(texto3,nivel);
            
INI_WriteString(texto4,string);
            
ID INI_ReadInt("ID");
            
INI_Save();
            
INI_Close();
            
            
INI_Open("Admins/Lista.ini");
            for( 
i=0i<MAX_ADMINSi++)
            {
                
format(arquivo,50"Admin%d",i);
                if(!
strcmp(INI_ReadString(arquivo),nome,true)) break;
            }
            
INI_WriteString(arquivo,nome);
            
format(arquivo,50,"Nivel%d",i);
            
INI_WriteInt(arquivo,nivel);
            
INI_Save();
            
INI_Close();
            
            
format(arquivo,50,"Admins/IDs/%d.ini",ID);
            
INI_Open(arquivo);
            
INI_WriteString(texto2,texto);
            
INI_WriteInt(texto3,nivel);
            
INI_WriteString(texto4,string);
            
INI_Save();
            
INI_Close();
        }
    }


Porйm...
na primeira vez que a funзгo й chamada, tudo ocorre perfeitamente
na segunda vez, tudo ocorre perfeitamente
na terceira vez, tudo ocorre perfeitamente
na quarta vez, o servidor crasha

podem ver que coloquei os "printf(arquivo)" pois tentei descobrir exatamente em qual momento dava-se o crash
e descobri que o crash ocorre na hora do INI_Open(arquivo);
porйm o valor da string "arquivo" й exatamente o mesmo em todos os casos!
mas apenas na quarta vez que a funзгo й chamada, dб-se o crash!!!


serб que alguйm sabe!?


Re: [AJUDA] Problemгo com bIni!!! - dudaefj - 12.10.2011

ninguйm?
kd os bons scripters!?
kd os defensores do Fini e bIni ?
eu gostei tanto desse sistema
nгo qria que fosse bugado =(
ou se for, queria ao menos que alguйm dissesse "tbm acho que й bugado" pra eu nгo ficar procurando pкlo em ovo =(


Re: [AJUDA] Problemгo com bIni!!! - Cristhian - 12.10.2011

eu uso Dini.. use Dini! riaiariariariaria


Re: [AJUDA] Problemгo com bIni!!! - WLSF - 12.10.2011

pawn Код:
stock DarAdmin(string[],playerid,nivel)
{
    new arquivo[50],wiiStr[60], nome[24],texto[128];
    GetPlayerName(playerid,nome,24);
    format(wiiStr,50,"Admins/%s.ini",nome);
    new a22, m22, d22;
    new h22,mi22,s22;
    getdate(a22,m22,d22);
    gettime(h22,mi22,s22);
    if(nivel>0)
    {
        if(!fexist(wiiStr))
        {
            INI_Create(wiiStr);
            INI_Open(wiiStr);
            INI_WriteString("Nome",nome);
            INI_WriteInt("ID",IDAdmin());
            format(texto,128,"Data: (%d/%d/%d) Hora: (%d:%d:%d)",d22,m22,a22,h22,mi22,s22)
            INI_WriteString("UltimoLogin",texto);
            INI_WriteString("Promocao0",texto);
            INI_WriteInt("Level0",nivel);
            INI_WriteString("AdicionadoPor",string);
            INI_Save();
            INI_Close();

            INI_Open("Admins/Lista.ini");
            for(new i, x = MAX_ADMINS; i < x; i++)
            {
                format(arquivo,50, "Admin%d",i);
                if(!strcmp(INI_ReadString(arquivo),"0",true)) break;
            }
            INI_WriteString(arquivo,nome);
            format(arquivo,50,"Nivel%d",i);
            INI_WriteInt(arquivo,nivel);
            INI_Save();
            INI_Close();

            format(arquivo,50,"Admins/IDs/%d.ini",IDAdmin());
            INI_Create(arquivo);
            INI_Open(arquivo);
            INI_WriteString("Nome",nome);
            INI_WriteInt("ID",IDAdmin());
            format(texto,128,"Data: (%d/%d/%d) Hora: (%d:%d:%d)",d22,m22,a22,h22,mi22,s22)
            INI_WriteString("UltimoLogin",texto);
            INI_WriteString("Promocao0",texto);
            INI_WriteInt("Level0",nivel);
            INI_WriteString("AdicionadoPor",string);
            INI_Save();
            INI_Close();

        }
        else
        {
            new ID,texto2[20],texto3[20],texto4[30];
            printf(wiiStr);
            INI_Open(wiiStr);
            printf(wiiStr);
            for(new i, x = MAX_PROMOCOES; i < x; i++)
            {
                format(texto2,20,"Promocao%d",i);
                if(!strcmp(INI_ReadString(texto2),"0",true)) break
            }
            format(texto3,20,"Level%d",i);
            format(texto4,30,"PromovidoPor%d",i);
            format(texto,128,"Data: (%d/%d/%d) Hora: (%d:%d:%d)",d22,m22,a22,h22,mi22,s22)
            INI_WriteString(texto2,texto);
            INI_WriteInt(texto3,nivel);
            INI_WriteString(texto4,string);
            ID = INI_ReadInt("ID");
            INI_Save();
            INI_Close();

            INI_Open("Admins/Lista.ini");
            for(new i, x = MAX_ADMINS; i < x; i++)
            {
                format(arquivo,50, "Admin%d",i);
                if(!strcmp(INI_ReadString(arquivo),nome,true)) break;
            }
            INI_WriteString(arquivo,nome);
            format(arquivo,50,"Nivel%d",i);
            INI_WriteInt(arquivo,nivel);
            INI_Save();
            INI_Close();

            format(arquivo,50,"Admins/IDs/%d.ini",ID);
            INI_Open(arquivo);
            INI_WriteString(texto2,texto);
            INI_WriteInt(texto3,nivel);
            INI_WriteString(texto4,string);
            INI_Save();
            INI_Close();
        }
    }
}
Relate erros/bugs caso ocorra algum (: nгo sei usar bIni fIni tIni dIni pIni nem nada disso, aconselho ou File ou SII


Re: [AJUDA] Problemгo com bIni!!! - dudaefj - 12.10.2011

pow nгo entendi todas as mudanзas que vc fez
mas ja vi que vai dar pal pq vc coloco a declaraзгo do "i" dentro do for
ae vai dar pal qdo for usar o i fora do for

PHP код:
            for(new iMAX_ADMINSxi++)
            {
                
format(arquivo,50"Admin%d",i);
                if(!
strcmp(INI_ReadString(arquivo),"0",true)) break;
            }
            
INI_WriteString(arquivo,nome);
            
format(arquivo,50,"Nivel%d",i); 
й melhor ele ser declarado antes msm...
como nгo sei o que vc mudo, alйm disso e do nome da string "arquivo"
vou mudar esse new i e testar ^^


@Edit
Bom, continuo crashando o server

entгo como a sintaxe de bIni й quase igual ao SII, eu troquei a include e fiz os ajustes no INI_ReadString (ъnica com sintaxe diferente)
parou de bugar

minha conclusгo уbvia й que bIni й bugado tbm =(
pena
tinha gostado mais da sitnaxe do bIni do que do SII
(exceto pelo INI_Open do SII que achei mais legal, ele jб verifica se existe e cria... mais prбtico xD)


Re: [AJUDA] Problemгo com bIni!!! - WLSF - 12.10.2011

Espero ter ajudado entгo... SII й уtimo e fбcil (:


Re: [AJUDA] Problemгo com bIni!!! - dudaefj - 12.10.2011

ajudo sim willian
+rep por ser o ъnico a tentar ;]


Re: [AJUDA] Problemгo com bIni!!! - [S]trong - 13.10.2011

Nгo consegui ver erros ao cуdigo, mas uso bini e nгo tive problemas.
Poderia colocar o log dos crashs? Tambйm poderia dizer se foi imprimido com PRINTF e o que foi imprimido?

Experimente colocar INI_Close antes de dar o Open PROVAVELMENTE vocк deve ter se esquecido de fechar outro arquivo em outra parte do cуdigo.

Boa sorte.


Re: [AJUDA] Problemгo com bIni!!! - dudaefj - 13.10.2011

Log do crash
kkkk
eu sempre quis entender esses logs de crash

bom, acho que й esse...
Код:
SA-MP Server: 0.3c



Exception At Address: 0x77542262



Registers:

EAX: 0x00000024	EBX: 0x0000004E	ECX: 0x004E54F0	EDX: 0x00000000

ESI: 0x00000024	EDI: 0x00000020	EBP: 0x0018F5E4	ESP: 0x0018F5D0

EFLAGS: 0x00010216



Stack:

+0000: 0x04BA4798   0x00000000   0x0048266B   0x0018F608

+0010: 0x0018F600   0x0018F620   0x004A259E   0x00000020

+0020: 0x004A2BEE   0x00000000   0x04BA4798   0x00000000

+0030: 0x0000004E   0x00484054   0x0018F5F8   0x0018F1A4

+0040: 0x0018F810   0x004A6BC4   0x004C11D8   0xFFFFFFFF

+0050: 0x00000000   0x0040551E   0x0000004E   0x00000000

+0060: 0x04BA4788   0x0018F650   0x00000001   0x004059AF

+0070: 0x00000001   0x01D38648   0x043E65EC   0x0000000E

+0080: 0x041D6F04   0x00402C20   0x01D38648   0x04BA4798

+0090: 0x00000000   0x01D38648   0x00000000   0x01000001

+00A0: 0x00000001   0x007BE190   0x007BE19C   0x007BFB10

+00B0: 0x00793C38   0x007BE5B0   0x00793C38   0x041D3278

+00C0: 0x043E65EC   0x0510DC78   0x041D0020   0x00213374

+00D0: 0x00482D0B   0x01D38648   0x0018F6D8   0x000000A2

+00E0: 0x01D38648   0x00000000   0x01D38648   0x0018F6E8

+00F0: 0x0018F6DC   0x0510DC78   0x04B7A1E0   0x00000000

+0100: 0x00000000   0x0510DC78   0x00000000   0x04B7A1E0

+0110: 0x0049CC75   0x000000A2   0x00793BF4   0x0018F824

+0120: 0x0055C298   0x0018FC54   0x00000010   0x000000A8

+0130: 0x000000A8   0x000000A0   0x0018F824   0x01CA0100


os logs do printf sгo esses:

Quote:

[22:01:56] Number of vehicle models: 89
[22:02:00] Incoming connection: 127.0.0.1:60739
[22:02:00] [join] Niko_Belik has joined the server (0:127.0.0.1)
[22:02:00] Nome do Arquivo: Conce/Niko_Belik.ini
[22:02:02] Admins/Niko_Belik.ini //PRIMEIRA VEZ QUE A FUNЗГO FOI CHAMADA, sucesso
[22:02:02] Admins/Niko_Belik.ini
[22:02:02] Admins/Niko_Belik.ini
[22:02:02] Niko_Belik logou no servidor.
[22:02:06] RCON (In-Game): Player #0 (Niko_Belik) has logged in.
[22:02:09] |ADMIN|: Niko_Belik promoveu Niko_Belik para administrador no nivel 4.
[22:02:09] Admins/Niko_Belik.ini //SEGUNDA VEZ QUE A FUNЗГO FOI CHAMADA, sucesso
[22:02:09] Admins/Niko_Belik.ini
[22:02:09] Admins/Niko_Belik.ini
[22:02:10] |ADMIN|: Niko_Belik promoveu Niko_Belik para administrador no nivel 3.
[22:02:10] Admins/Niko_Belik.ini //TERCEIRA VEZ QUE A FUNЗГO FOI CHAMADA, sucesso
[22:02:10] Admins/Niko_Belik.ini
[22:02:10] Admins/Niko_Belik.ini
[22:02:11] |ADMIN|: Niko_Belik promoveu Niko_Belik para administrador no nivel 5.
[22:02:11] Admins/Niko_Belik.ini //QUARTA VEZ QUE A FUNЗГO FOI CHAMADA, DEU PAL NA HORA DE EXECUTAR O INI_Open
[22:02:11] Admins/Niko_Belik.ini
//Crash
os printf's davam neste momento:
PHP код:
            printf(arquivo); 
            new 
ID,texto2[20],texto3[20],texto4[30]; 
            
printf(arquivo); 
            
INI_Open(arquivo); 
            
printf(arquivo); 
3 print's pra cada fez que a funзгo DarAdmin rodava
porйm exatamente na hora do INI_Open ele crashava (apenas na quarta vez que a funзгo era chamada)
embora a string "arquivo" tinha sempre o mesmo valor na hora que funcionava e na hora que nгo funcionava

;/


Re: [AJUDA] Problemгo com bIni!!! - MiTToS - 13.10.2011

Uso bIni e estou fazendo todo o meu trabalho baseado no bIni, vou fazer alguns testes e ver se obtenho algum erro, logo mais eu edito.


#EDIT


Nгo encontrei nenhum bug, vou fazer outros testes e posto o resultado jaja.


Teste #1


Pawn
Код:
INI_Create("Arquivo1.ini"), print("Criou o arquivo");
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #1");
INI_WriteString("Linha1", "Teste1"), print("Escreveu no arquivo #1");
INI_Save(), print("Salvou o arquivo #1");
INI_Close(), print("Fechou o arquivo #1");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #2");
INI_WriteString("Linha2", "Teste2"), print("Escreveu no arquivo #2");
INI_Save(), print("Salvou o arquivo #2");
INI_Close(), print("Fechou o arquivo #2");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #3");
INI_WriteString("Linha3", "Teste3"), print("Escreveu no arquivo #3");
INI_Save(), print("Salvou o arquivo #3");
INI_Close(), print("Fechou o arquivo #3");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #4");
INI_WriteString("Linha4", "Teste4"), print("Escreveu no arquivo #4");
INI_Save(), print("Salvou o arquivo #4");
INI_Close(), print("Fechou o arquivo #4");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #5");
INI_WriteString("Linha5", "Teste5"), print("Escreveu no arquivo #5");
INI_Save(), print("Salvou o arquivo #5");
INI_Close(), print("Fechou o arquivo #5");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #6");
INI_WriteString("Linha6", "Teste6"), print("Escreveu no arquivo #6");
INI_Save(), print("Salvou o arquivo #6");
INI_Close(), print("Fechou o arquivo #6");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #7");
INI_WriteString("Linha7", "Teste7"), print("Escreveu no arquivo #7");
INI_Save(), print("Salvou o arquivo #7");
INI_Close(), print("Fechou o arquivo #7");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #8");
INI_WriteString("Linha8", "Teste8"), print("Escreveu no arquivo #8");
INI_Save(), print("Salvou o arquivo #8");
INI_Close(), print("Fechou o arquivo #8");
Log
Код:
[01:40:28] Criou o arquivo
[01:40:28] Abriu o arquivo #1
[01:40:28] Escreveu no arquivo #1
[01:40:28] Salvou o arquivo #1
[01:40:28] Fechou o arquivo #1
[01:40:28] Abriu o arquivo #2
[01:40:28] Escreveu no arquivo #2
[01:40:28] Salvou o arquivo #2
[01:40:28] Fechou o arquivo #2
[01:40:28] Abriu o arquivo #3
[01:40:28] Escreveu no arquivo #3
[01:40:28] Salvou o arquivo #3
[01:40:28] Fechou o arquivo #3
[01:40:28] Abriu o arquivo #4
[01:40:28] Escreveu no arquivo #4
[01:40:28] Salvou o arquivo #4
[01:40:28] Fechou o arquivo #4
[01:40:28] Abriu o arquivo #5
[01:40:28] Escreveu no arquivo #5
[01:40:28] Salvou o arquivo #5
[01:40:28] Fechou o arquivo #5
[01:40:28] Abriu o arquivo #6
[01:40:28] Escreveu no arquivo #6
[01:40:28] Salvou o arquivo #6
[01:40:28] Fechou o arquivo #6
[01:40:28] Abriu o arquivo #7
[01:40:28] Escreveu no arquivo #7
[01:40:28] Salvou o arquivo #7
[01:40:28] Fechou o arquivo #7
[01:40:28] Abriu o arquivo #8
[01:40:28] Escreveu no arquivo #8
[01:40:28] Salvou o arquivo #8
[01:40:28] Fechou o arquivo #8
[01:40:28] Teste bIni versгo 3.0
Dentro do arquivo
Код:
Linha1=Teste1
Linha2=Teste2
Linha3=Teste3
Linha4=Teste4
Linha5=Teste5
Linha6=Teste6
Linha7=Teste7
Linha8=Teste8



#EDIT 2


O meu segundo teste foi, abrir um arquivo, escrever algo nele, salvar e NГO FECHAR.
logo em seguida criei outro arquivo, abrir, escrevi, salvei e fechei.

o resultado foi certo e nгo encontrei falha alguma..

Quote:

INI_Create("Arquivo1.ini"), print("Criou o arquivo");
INI_Open("Arquivo1.ini"), print("Abriu o arquivo #1");
INI_WriteString("Linha1", "Teste1"), print("Escreveu no arquivo #1");
INI_Save(), print("Salvou o arquivo #1");
//INI_Close(), print("Fechou o arquivo #1");
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
INI_Create("Arquivo2.ini"), print("Criou o arquivo");
INI_Open("Arquivo2.ini"), print("Abriu o arquivo #2");
INI_WriteString("Linha2", "Teste2"), print("Escreveu no arquivo #2");
INI_Save(), print("Salvou o arquivo #2");
INI_Close(), print("Fechou o arquivo #2");