[Tutorial] How to: SII
#1

Hello everybody, estudei e trabalhei muito diante de um computador e aprendi que
dъvidas sгo comuns e infinitas, sem tirar que a minha dъvida аs vezes pode ser a sua...

Entгo recebi 2 mensagem pedindo ajuda com SII, creio que nгo exista sу 2 pessoas que
tenham dъvidas com SII, por isso estou passando aqui pra deixar este simples tutorial para
aqueles que nгo conheзem o SII...
Нndice:
- Oque й SII?
- Pra que serve o SII ?
- Funзхes.
- Trabalhando o SII.
- Desenvolvendo estruturas complexas com SII.

Oque й o SII ?

O SII й um sistema cache de salvamento de arquivos, trabalhado em cima das nativas do prуprio sa:mp
a include <file>...


Pra que serve o SII

Como citado no tуpico acima, SII й um sistema de salvamentos, isso jб diz tudo. Serve para abrir/criar/deletar
arquivos dos quais usando o prуprio SII se pode escrever/ler tags e frases dentro...
Porque Tags ?

Bom o SII ao exato trabalha com o fato da maioria dos programadores de Sa:mp quererem salvar
valores de variбveis(integers, arrays, booleans) de uma forma mais simples e de entendimento mais fбcil
para quando for ler e re-utilizar o valor...

Funзхes:

Код:
INI_Exist(tal[])	-	Muitos, muitos me refiro a todos... Evitam essa funзгo, porque? nгo sei...

Pra que exatamente eu usaria isso?
R: pra saber se o arquivo 'tal' existe...
exatamente igual a nativa file, fexist(file[])

--------------------------------------------------------------------------------

INI_Open(tal[])	-	Jб diz o nome 'Open', abre/cria arquivos.

Pra que exatamente eu usaria isso?
R: Criar arquivos, caso jб existentes, abri-los...

Exemplo?
R:
	if(!INI_Exist("ArquivoTeste.txt"))
	{
		INI_Open("ArquivoTeste.txt");
		INI_Save();
		INI_Close();
	}

--------------------------------------------------------------------------------

INI_Remove(tal[])   -   Jб diz o nome 'Remove', deleta um arquivo.

Pra que exatamente eu usaria isso?
R: Deletar um arquivo indesejбvel.

Exemplo ?
R: Muito simples, й uma funзгo aparte, nгo й necessбrio abrir para deletar.

	if(INI_Exist("ArquivoTeste.txt"))
	{
	    INI_Remove("ArquivoTeste.txt");
	}

--------------------------------------------------------------------------------

INI_Save()	-	Jб diz o nome 'Save', salva tudo ocorreu entre o espaзo tempo de INI_Open atй INI_Save.

Pra que exatamente eu usaria isso?
R: Salvar as modificaзхes e arquivaзхes novas destinadas ao arquivo INI_Open(...)

Pode se levar como exemplo oque eu fiz no INI_Open acima.

--------------------------------------------------------------------------------

INI_Close()	-	Jб diz o nome 'Close', fecha o arquivo INI_Open(...)

Pra que exatamente eu usaria isso?
R: Para evitar erros / danos durante a execuзгo do samp-server...

Pode se levar como exemplo oque eu fiz no INI_Open acima.

--------------------------------------------------------------------------------

INI_WriteString(tag[], line[])	-	Escreve uma linha dependente de uma tag...

Pra que exatamente eu usaria isso?
R: Salvar um texto/frase ou um valor de string desejбvel...

Exemplo ?
R:
	INI_Open(file[]);
	INI_WriteString("Tag", "Texto que desejo salvar");
	INI_Save(); // Sempre lembrando deste нtem para salvar modificaзхes/inovaзхes
	INI_Close(); // Sempre lembrando deste нtem para fechar seu arquivo.

--------------------------------------------------------------------------------

INI_WriteInt(tag[], integer)	-	Escreve um valor inteiro dependente de uma tag...

Pra que exatamente eu usaria isso?
R: Salvar valores nъmericos inteiros...

Exemplo ? - segue a mesma linha de raciocinio do INI_WriteString.
R:
	INI_Open(file[]);
	INI_WriteInt("Tag", 10);
	INI_Save();
	INI_Close();

--------------------------------------------------------------------------------

INI_WriteFloat(tag[], Float:...)	-	Escreve um valor com ponto flutuante dependente de um tag.

Pra que exatamente eu usaria isso?
R: Salvar valores de coordenadas...

Exemplo ?
R:
	INI_Open(file[]);
	INI_WriteFloat("Tag", 10.0);
	INI_Save();
	INI_Close();

--------------------------------------------------------------------------------

INI_ReadString(str[], tag[], tamanho)	-	Lк a linha escrita na 'tag[]'

Como exatamente eu usaria isso?
Explicaзхes:

str[]	=	string para acumular o valor da linha 'tag'.
tag[]	=	tag que contйm a string que vocк deseja ler...
tamanho	=	o tamanho em valor que desejas ler, se nгo determinar valor, ele pega o valor da 'str'.

Exemplo ?
R:
	if(INI_Exist(file))
	{
	    new ler[128]; // A array criada precisa conter o valor da string contida na tag ou ser maior, para poder armazena-lб sem erros.
		INI_Open(file);
		INI_ReadString(ler, "Tag");
		// agora a string 'ler' vai conter o valor da string escrita na 'tag'
		INI_Save();
		INI_Close();
	}

--------------------------------------------------------------------------------

INI_ReadInt(tag[])	-	Lк o valor inteiro salvo na 'tag[]'

Como exatamente eu usaria isso?
Explicaзхes:

tag[]	=	tag que contйm o valor da integer que vocк deseja ler...

Exemplo ?
R:
	if(INI_Exist(file))
	{
	    new inteiro;
		INI_Open(file);
		inteiro = INI_ReadInt("Tag");
		//Agora a integer 'inteiro' vai conter o valor contido na 'tag'
		INI_Save();
		INI_Close();
	}

--------------------------------------------------------------------------------

INI_ReadFloat(tag[])	-	Lк o valor com ponto flutuante salvo na 'tag[]'

Como exatamente eu usaria isso?
Explicaзхes:

tag[]	=	tag que contйm o valor da float que vocк deseja ler...

Exemplo ?
R:
	if(INI_Exist(file))
	{
	    new Float:flutuante;
		INI_Open(file);
		flutuante = INI_ReadFloat("Tag");
		//Agora a float 'flutuante' vai conter o valor contido na 'tag'
		INI_Save();
		INI_Close();
	}

--------------------------------------------------------------------------------
Trabalhando o SII:

Jб vimos as funзхes na teoria, vamos pra prбtica agora.

Botando em ordem tudo que vimos e respeitando a lуgica do compilador Pawno,
comeзaremos criando uma simples stock que salve o valor de uma divisгo...

pawn Код:
#include <a_samp>
#include <SII>

main()
{
    new x, a = 10, b = 60;
    x = a / b;
    salvarResult(x);
}

stock salvarResult(result)
{
    if(!INI_Exist("Resultado.txt")) // caso o arquivo 'Resultado.txt' nгo exista ele prossegue o cуdigo.
    {
        INI_Open("Resultado.txt"); //Cria o arquivo 'Resultado.txt'
        INI_WriteInt("Result", result); //Escreve a tag com o conteъdo 'result'
        INI_Save(); //salva
        INI_Close(); //fecha
    }
    return 1;
}
Desenvolvendo estruturas complexas com SII:

Complexo ? Nem um pouco, jб disse o Willian_Luigi/ViniBorn. Quem sabe faz de olhos fechados, mas para os novatos/iniciantes
jб vi 'neguim' dizendo 'Nunca vou dominar SII, BII, NII, seja oque for...'

Botando tudo em ordem e usando 1/3 dб criatividade que nos foi imposta,
comeзaremos com uma stock e um comando, para salvar o valor que o player tal digitou...

pawn Код:
#include <a_samp>
#include <SII>
#include <ZCMD>
#include <sscanf2>

CMD:valor(playerid, params[])
{
    new val;
    if(sscanf(params, "i", val))
    {
        SendClientMessage(playerid, -1, "/valor [inteiro]");
        return 1;
    }

    salvarValor(val);
    return 1;
}

stock salvarValor(i)
{
    if(!INI_Exist("Valor.txt")) //Caso o arquivo 'Valor.txt' nгo exista prossegue o cуdigo
    {
        INI_Open("Valor.txt"); //Cria o arquivo 'Valor.txt'
        INI_WriteInt("Tag", i); //escreve uma tag com conteъdo inteiro no valor de 'i'
        INI_Save(); //salva
        INI_Close(); //fecha
    }
}
Vamos esquentar a coisa, como vi num tutorial plagiado(com todo respeito... Ao criador original do tutorial lуgico...)
um sistema de registro/login bбsico,

vou envolver dialogs neste exemplo...
Caso vocк nгo tenha um conhecimento muito amplo sobre dialogs pode ler mais
no meu tutorial destinado а dialogs.
Link: [Tutorial] How to: ShowPlayerDialog & Callback: OnDialogResponse


pawn Код:
#include <a_samp>
#include <ZCMD>
#include <sscanf2>
#include <SII>

public OnPlayerConnect(playerid)
{
    new nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nome, sizeof(nome));
    if(!INI_Exist(nome))
    {
        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Registrar", "Novato por aqui, digite uma senha para se registrar", "Confirmar", "");
        return 1;
    }
    else
    {
        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Login", "Jб tens uma conta registrada, digite sua senha para logar.", "Confirmar", "");
    }
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case 1:
        {
            switch(response)
            {
                case 0..1:
                {
                    if(strlen(inputtext) > 15 || strlen(inputtext) < 4)
                    {
                        SendClientMessage(playerid, -1, "A senha precisa conter mais de 4 caracteres e menos de 15");
                        ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Registrar", "Novato por aqui, digite uma senha para se registrar", "Confirmar", "");
                    }
                    registrar(playerid, inputtext);
                    return 1;
                }
            }
        }
        case 2:
        {
            switch(response)
            {
                case 0..1:
                {
                    logar(playerid, inputtext);
                }
            }
        }
    }
    return 1;
}

stock registrar(playerid, senha[])
{
    new nome[MAX_PLAYER_NAME];
    GetPlayerName(playerid, nome, sizeof(nome));
    INI_Open(nome);
    INI_WriteString("Senha", senha);
    INI_Save();
    INI_Close();
    return 1;
}

stock logar(playerid, senha[])
{
    new nome[MAX_PLAYER_NAME], ler[15];
    GetPlayerName(playerid, nome, sizeof(nome));
    INI_Open(nome);
    INI_ReadString(ler, "Senha");
    INI_Save();
    INI_Close();
    if(strlen(senha) > 15 || strlen(senha) < 4)
    {
        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Login", "ERRO, senha errada ! digite sua senha para logar.", "Confirmar", "");
        return 0;
    }
    if(strcmp(senha, ler, true) != -1)
    {
        SendClientMessage(playerid, -1, "Logado com sucesso.");
        // resto das funзхes de login.
        return 1;
    }
    else
    {
        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_PASSWORD, "Login", "ERRO, senha errada ! digite sua senha para logar.", "Confirmar", "");
    }
    return 0;
}


Oque eu tentei passar para vocкs?
R: A iniciaзгo do SII, aliбs criatividade nenhuma basta quando a aprendizagem nгo й estruturada...

Porque eu uso SII ?
R: Realmente eu nгo sei, achei bonito(mentira) foi me passado que SII era bom(por Willian_Luigi), e eu gostei...

E as outras funзхes, essas stocks que tu criou...?
R: Nгo estarei explicando parte por parte de tudo, aliбs o tutorial й sobre SII.
Tentei conceituar vocкs а respeito do SII, e espero ter conseguido !



Como sempre, dicas e crнticas bem vindas ! Obrigado...
Reply
#2

Muito bom
Muito bem explicado, pena que nao uso SII mais vim a entender DOF2 graзas a vocк com 1 tuto pelo msn vlws
Parabens
Reply
#3

Bom tutorial cara, to aprendendo sobre pawn e isso vai ser muito importante pra mim

VLW ae '-'
Reply
#4

Quote:
Originally Posted by histire
Посмотреть сообщение
Muito bom
Muito bem explicado, pena que nao uso SII mais vim a entender DOF2 graзas a vocк com 1 tuto pelo msn vlws
Parabens
Exato, foi por causa de vocк e mais 1 que criei este tуpico.

Quote:
Originally Posted by kratty
Посмотреть сообщение
Bom tutorial cara, to aprendendo sobre pawn e isso vai ser muito importante pra mim

VLW ae '-'
Obrigado !
Reply
#5

Bom tutorial, parabйns.
Reply
#6

Excelente tutorial, bem explicado.

Mas se eu usasse um desses gerenciadores de arquivos eu usaria y_ini
Reply
#7

Bom tuto
Reply
#8

Quote:
Originally Posted by Pedro_Miranda
Посмотреть сообщение
Excelente tutorial, bem explicado.

Mas se eu usasse um desses gerenciadores de arquivos eu usaria y_ini
Vou dar uma olhada nele depois, obrigado.
Reply
#9

Quote:
Originally Posted by Jeffrey_Hatrix Jeffrey_
Посмотреть сообщение
'Nunca vou dominar SII, BII, NII, seja oque for...'
Isso me lembra muito alguem... \/

Quote:
Originally Posted by Pedro_Miranda
Посмотреть сообщение
Excelente tutorial, bem explicado.

Mas se eu usasse um desses gerenciadores de arquivos eu usaria y_ini
Belo tutorial.
Reply
#10

Quote:
Originally Posted by Willian_Luigi
Посмотреть сообщение
Isso me lembra muito alguem... \/



Belo tutorial.
Realmente, vбrios ini por ai, ficava atй confuso kkkkkkkkkk
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)