28.03.2012, 02:04
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: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...
- 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:
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...
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...
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
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(); } --------------------------------------------------------------------------------
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;
}
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
}
}
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...