Theme Support

Unordered List

Recent Posts

Tecnologia do Blogger.

quinta-feira, 28 de janeiro de 2016

[TUTORIAL] Variáveis - Definição, uso e tipos.

Bem, neste tutorial irei explicar passo a passo como criar uma variável e como elas podem ser úteis .


Considero este um tema muito importante na linguagem Pawn, por isso, leiam com atenção:





1 - O que são variáveis ?





Variáveis são símbolos criados para assumir algum valor, elas podem variar (daí o nome variável) dependendo de onde e de como estamos usando-as .



Em uma questão de Matemática por exemplo, se ela diz que X = 2, então sabemos que quando o X aparecer em algum lugar da conta que fizermos, poderemos substituí-lo por 2.



Essa questão de Matemática, como voce resolveria se a questão dissesse que Y = 10 e voce tivesse que achar o valor de X ? 


Code:
X = 3 + Y

E aí  ? Quanto valeria o X ?


Resposta: X valeria 13, pois:


Code:
X = 3 + Y

É igual á:


Code:
X = 3 + 10

que é igual á:


Code:
X = 13


Não entendeu ? Leia de novo .






2 - Variáveis na linguagem Pawn:




No Pawn, as variáveis são usadas em quase tudo .


Como exemplo, vamos restringir um comando chamado /pum, só usando váriavéis :



- Primeiro criamos uma variável:

Code:
new Futebol;//Ao criarmos a variável, ela automaticamente ganha o valor 0.


- Agora vamos fazer com que ela ganhe um valor (4, por exemplo), ao usar qualquer comando (no caso, o comando /ei):


Code:
if(strcmp("/ei",cmdtext,true,3)==0)
 {
  Futebol = 4;//Ao usar o comando /ei, a variável ganha valor igual á 4
  return 1;
 }


E finalmente, o comando /pum que queríamos restringir:


Code:
if(strcmp("/pum",cmdtext,true,4)==0)
 {
  if(Futebol == 4)//Isso checará se a variável "Futebol" é igual á 4, só se for igual á 4, acontecerá o que tem dentro das chaves do if, ou seja, o print("PUMMM!");
  {
   print("PUMMM!");
  }
  return 1;
 }


Agora vamos pensar..., a linha if(Futebol == 4) checou se variável é igual á 4 certo ?


Mas, tem um porém aí, A VARIÁVEL SÓ SERÁ 4 SE O CARA TIVER USADO O COMANDO /ei ANTES, POIS ELA SÓ VIRA 4QUANDO ESSE COMANDO É USADO, LEMBRA ? 



Viu ? , agora o comando /pum só pode ser ativado se o comando /ei for usado antes, em outras palavras, ele está restrito agora .






3 - Tipos de variáveis I (Locais e Globais) :





* Variáveis Locais.



Uma variável local só pode ser usada em um único lugar, por exemplo:



Code:
if(strcmp("/afff",cmdtext,true,5)==0)
 {
  new TENSO; //A variável TENSO foi criada dentro do comando /afff
  return 1;
 }//A variável TENSO é destruída quando esta chave é lida após o processamento do comando.



Se a variável foi criada dentro do comando /afff e destruída quando a chave foi lida, então nem podemos pensar em usar aTENSO em outro comando, pois ela só é criada dentro do comando /afff e destruída no final dele. 



Por isso chamados esse tipo de variável de Variável Local, pois só podemos usá-la em um local do GM/FS (no caso acima, só poderíamos usar a variável dentro do comando, e antes do final dele ).




* Variáveis Globais.


As globais normalmente são criadas no Topo do GM ou FS, um lugar que é livre de chaves que possam destruir essas variáveis.


Se criamos uma variável no Topo do GM, por exemplo:


Code:
new PQP;


Como ela está no topo do GM e não foi destruída por nenhuma chave, então podemos usa-lá em qualquer lugar do GM/FS que seja, sem precisar criá-la de novo pois ela já existe no Topo do GM.


Se é assim, poderíamos usá-la em um comando:


Code:
if(strcmp("/xiu",cmdtext,true,4)==0)
 {
  PQP = 3; //A variável já foi criada no Topo do GM, por isso vamos igualá-la aqui no comando.
  return 1;
 }


Obs: Variáveis Globais não podem ser destruídas por chaves de nenhuma public, comando etc.






4 - Tipos de variáveis II (new, static e const) :




* New


Método de criação de uma variável comum, bastando colocar new + nome da variável + ponto e vírgula :


Exemplo:

Code:
new Eita; //variável criada.




* Static


Método de criação de uma variável com uma característica especial: quando local ela não é destruída :


Exemplo:

Code:
if(strcmp("/noob",cmdtext,true,5)==0)
 {
  for(new x = 0; x < 5; x++)
  {
      static LOL;//Variável LOL é criada
      LOL = 3;
  }//Mesmo sendo local ela não é destruída aqui. Por essa razão, no próximo giro do loop ela não é criada novamente e contém o mesmo valor que tinha antes do momento no qual era para ser apagada.
  return 1;
 }




* Const



Método de criação de uma constante, ou seja, uma variável que sempre terá o mesmo valor:


Code:
const Pickup = 2;//Sempre terá o valor 2


Se depois for usado algo como:


Code:
Pickup = 26;


O pawno gerará um error pois não é possível mudar o valor de uma constante.






5 - Tags e Arrays :





*Tags



As Tags são formas de classificar uma variável com uma caracterista especial, elas normalmente aparecem na variável na forma de um complemento no começo do nome da mesma .


Float e bool são tags padrões do Pawn.


Exemplo de uso de Float:

Code:
new Float:Exemplo = 1.222; //Caracterista especial: conseguem se igualar á números fracionários.

Exemplo de uso de bool:

Code:
new bool:Exemplo = true; //Caracterista especial: só podem se igualar á dois valores, true e false.




*Arrays



São multi-variáveis, com variáveis arrays é possível criar várias variáveis de uma vez só .


Exemplo:

Ao invés de usar:

Code:
new Sanduiche1;
new Sanduiche2;
new Sanduiche3;


Pode se fazer com variável array :

Code:
new Sanduiche[3];


Daí a igualação seria assim:

Code:
Sanduiche[0] = 1;
Sanduiche[1] = 1;
Sanduiche[2] = 1;


Ops, mas por que será que não coloquei ali Sanduiche[3] = 1;  ?


Por que nunca deve-se igualar uma variável no seu máximo de cells permitidas, ou seja, como criamos assim:


Code:
new Sanduiche[3];

Não poderemos usar:
Code:
Sanduiche[3] = 1;


Apenas valores dentro dos colchetes [ ], que forem menores do que 3, pois a cell da array quando a criamos era 3 .


Mas mesmo assim, 3 valores da array foram igualados assim como seriam se tivessem sido criadas 3 variáveis comuns para cada valor.


Também há casos como:

Criamos uma variável array:

Code:
new Sorriso[MAX_PLAYERS]; //Mesma coisa que VariavelArray[500];, pois MAX_PLAYERS está definido assim no a_samp.inc

E a usamos como:

Code:
Sorriso[playerid] = 1;

Ou seja, para cada ID diferente a variável vai ter um valor, por exemplo, se o playerid (ou ID no jogo) de um jogador é 5, então a variável ficaria assim quando fosse lida na execução do jogo:

Code:
Sorriso[5] = 1;

Pois, playerid = 5, no caso de um jogador, se fosse outro jogador de ID 9, então seria playerid = 9, entre outros.


Variáveis arrays também são as únicas que podem armazenar texto, como por exemplo:

Code:
new Jornal[10] = "é nóis";


Lembrando que o total de caracteres do texto deve ser menor do que a cell da array, no caso, menor que 10.

Fonte: Fórum SA-MP

FIM, e este foi meu tutorial sobre variáveis 


Espero ter ajudado 

domingo, 10 de janeiro de 2016

[TUTORIAL] Operações ternária

Ok, hoje estou aqui para explicar como é que a operação ternária.

Para quem não sabe, uma operação ternária equivale a um "if" & "else", mas de uma maneira mais "pequena".
Normalmente usa-se as operações ternárias nos returns, e quando queremos dar um dos dois[ou mais, mas a ideia foi só para dois] valores a uma variável.

Normalmente, os iniciantes em programação costumam um código parecido[este foi feito à força]
Code:
if(variavel[playerid] == true) {
    outravariavel[playerid] = GetPlayerMoney(playerid);
} else {
    outravariavel[playerid] = 0;
}
Aqui, temos 5 linhas de código, o qual, pode ser mais simplificado para esta ocasião...
Code:
outravariavel[playerid] = (variavel[playerid] == true ? GetPlayerMoney(playerid) : 0);
Bem simples, não?
Agora vou passar a explicar como é que as operações ternárias trabalham...
As condições ternárias consistem em:
(Uma condição ? o que fazer se verdadeiro : o que fazer se falso).
Por outras palavras
Code:
return (n1 == 1 ? true : false);
Explicado:
Code:
return (se n1 igual 1 ? o que devolver se verdadeiro : o que devolver se falso);

[TUTORIAL] Sistema de Registro e Login em DOF2

Tutorial - DOF2

Bom eu vi algumas pessoas pedindo tutoriais sobre DOF2, e decidi criar esse tutorial simples, com algumas funções mais utilizadas. O sistema que fiz é o típico Registro e Login, um sistema fácil e simples de se fazer, ainda mais quando se fala de DOF2.

Bom, vamos começar o tutorial, se tiver algo para complementar, peço que avise para mim corrigir o problema pois ainda não sei usar todas as funções da include.


Funções que iremos usar

Iremos usar as seguintes funções nesse sistema de Registro e Login:

Code:
DOF2_Exit(); //Função para fechar a include (Creio eu) que terá que sempre ser colocada na callback OnGameModeExit
DOF2_SaveFile(); //Para salvar as alterações feitas no arquivo
DOF2_GetInt(file[],key[],tag[]=""); //Armazena o valor correspondente na variável
DOF2_SetInt(file[],key[],value,tag[]=""); //Substitui a 'key' existente no arquivo pela 'tag' no arquivo
DOF2_FileExists(file[]); //Verifica se o arquivo existe
DOF2_CreateFile(file[],password[]=""); //Cria um arquivo
É claro que tem muitas outras funções de DOF2, mais essas são as mais usadas em vários sistemas e eu sei usá-las melhor.


Começando...

Primeiramente, vamos adicionar as includes ao nosso sistema.
Code:
//TOPO DO GM/FS
#include    a_samp
#include    DOF2

Após isso, iremos definir o Id das DIALOGS.
Code:
#define     DIALOG_REGISTRO         1
#define     DIALOG_LOGAR            2

Agora, vamos adicionar uma enum para armazenar as informações do jogador, juntamente criando a variável para o player e uma outra variável para verificar se o player errou a senha e ser kickado após errar 'X' vezes.
Code:
enum Informacoes
{
 Senha,
 Matou,
 Morreu,
 Dinheiro
}

new Player[MAX_PLAYERS][Informacoes];
new Erro[MAX_PLAYERS];

Como já foi dito, na callback OnGameModeExit(); será adicionado:
Code:
public OnGameModeExit()
{
 DOF2_Exit();
 return 1;
}

Bom, agora o player precisa se registrar antes de entrar no jogo, quando o player se conectar no servidor, irá aparecer uma Dialog para Registro, caso sua conta esteja criada na pasta "Contas" retorna a Dialog de Login. Ficando assim:
Code:
public OnPlayerConnect(playerid)
{
 new arquivo[40], name[MAX_PLAYER_NAME]; //'arquivo' uma string para a format | 'name' para pegar o nome do playerid
 GetPlayerName(playerid, name, 32); //Pega o nome do playerid
 format(arquivo, 40, "Contas/%s.ini", name); //Formata o arquivo com o nome do playerid
 if(DOF2_FileExists(arquivo)) //Verifica se a pasta existe
 { //Caso existir, irá retornar a dialog de Login
  ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você é Registrado, digite sua senha para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
 }
 else  //Caso o arquivo não exista
 { //Irá retornar a dialog de registro
     ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Você ainda não é Registrado, digite uma senha para se registrar!", "Confirma", "Cancelar");
 }
 return 1;
}

Agora, vamos as dialogs, onde irá ser para o player logar ou registrar.
Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new arquivo[40], name[MAX_PLAYER_NAME]; //'arquivo' uma string para a format | 'name' para pegar o nome do playerid
    GetPlayerName(playerid, name, 32); //Para pegar o nome do playerid
    format(arquivo, 40, "Contas/%s.ini", name); //Formata o arquivo com o nome do playerid
 if(dialogid == DIALOG_REGISTRO)
 {
     if(!strval(inputtext)) //Verifica se o player digitou LETRAS, caso for true
  { //Retorna a dialog de registro novamente para ele digitar NÚMEROS
   ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Digite apenas números!\nDigite sua senha novamente para se registrar!", "Confirma", "Cancelar");
   return 1;
  }
  if(!response) //Verifica se ele clicar em 'Cancelar"
  { //Caso ele clicar em cancelar, irá retornar ao playerid KICK
   Kick(playerid);
   return 1;
  }
  else //Verifica se ele Confirma o Registro
  { //Caso for true, ira criar o arquivo na pasta CONTAS
   Player[playerid][Senha] = strval(inputtext); //Player[playerid][Senha] vai ser igual ao que ele digitar na dialog Registro
   DOF2_CreateFile(arquivo); //Vai criar o arquvivo na pasta Contas
   DOF2_SetInt(arquivo, "Senha", Player[playerid][Senha]); //Vai salvar a senha do playerid
   DOF2_SetInt(arquivo, "Matou", Player[playerid][Matou]); //Vai salvar quantas vezes ele matou
   DOF2_SetInt(arquivo, "Morreu", Player[playerid][Morreu]); //Vai salvar quantas vezes ele morreu
   DOF2_SetInt(arquivo, "Dinheiro", Player[playerid][Dinheiro]); //Vai salvar o dinheiro dele
   DOF2_SaveFile(); //E finalmente salvando o arquivo, sem essa função o arquivo não será salvo!
   //Retornando a dialog de Login ao player no final para ele logar no server
   ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você se cadastrou, agora é só logar com sua senha registrada!", "Confirma", "Cancelar");
  }
 }
 if(dialogid == DIALOG_LOGAR)
 {
  if(!strval(inputtext)) //Verifica se o player digitou letras, caso for true
  { //Retorna a dialog de Login novamente para ele digitar NÚMEROS
   ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Digite apenas números!\nDigite sua senha cadastrada para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
   return 1;
  }
  if(!response) //Verifica se ele clicar em 'Cancelar"
  { //Caso ele clicar em cancelar, irá retornar ao playerid KICK
      Kick(playerid);
      return 1;
  }
  else //Verifica se ele Confirma o Login
  { //Caso for true, ira verificar se o que ele digitar será a mesma senha que ele se registrou anteriormente
   Player[playerid][Senha] = DOF2_GetInt(arquivo, "Senha"); //Pega a senha do jogador no arquivo da conta
   if(strval(inputtext) == Player[playerid][Senha]) //Se o que ele digitar for igual ao valor que carregou aqui em cima /\
   { //Retornará os dados do player e após irá dar Spawn no mesmo
       Player[playerid][Matou] = DOF2_GetInt(arquivo, "Matou"); //Pega quantos ele matou no arquivo
       Player[playerid][Morreu] = DOF2_GetInt(arquivo, "Morreu"); //Pega quantos ele morreu no arquivo
    Player[playerid][Dinheiro] = DOF2_GetInt(arquivo, "Dinheiro"); //Pega o dinheiro e iguala ao Player[playerid][Dinheiro]
    GivePlayerMoney(playerid, Player[playerid][Dinheiro]); //Da o dinheiro carregado acima
    SpawnPlayer(playerid); //Spawna o player
   }
   else //Caso ele digitar a senha errada
   {
    ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
                Erro[playerid]++; //O erro vai aumentar cada vez que ele errar
    if(Erro[playerid] == 5) //Quando chegar à 5 vezes, irá retornar a msg e o Ban
    {
     SendClientMessage(playerid, -1, "Sua conta está banida por errar 5 vezes a sua senha, contacte o Admin para retirar seu Ban!");
     Ban(playerid);
     return 1;
    }
   }
  }
 }
 return 1;
}

Se caso o player sair do servidor, vamos precisar salvar a conta dele, para não dar erros depois na hora que ele for logar e não estiver salvo suas informaçoes(Dinheiro, Kills, Deaths). Então na callback OnPlayerDisconnect(playerid);
Code:
public OnPlayerDisconnect(playerid)
{
    new arquivo[40], name[MAX_PLAYER_NAME]; //'arquivo' uma string para a format | 'name' para pegar o nome do playerid
    GetPlayerName(playerid, name, 32); //Para pegar o nome do playerid
    format(arquivo, 40, "Contas/%s.ini", name); //Formata o arquivo com o nome do playerid
 if(DOF2_FileExists(arquivo)) //Verifica se o arquivo da conta do playerid existe
 {
  Player[playerid][Dinheiro] = GetPlayerMoney(playerid); //Pega o dinheiro que o player tem no momento e iguala a Var de informações dele
  DOF2_SetInt(arquivo, "Senha", Player[playerid][Senha]); //Salva a senha, caso ele tenha modificado
  DOF2_SetInt(arquivo, "Matou", Player[playerid][Matou]); //Salva quantos players ele matou
  DOF2_SetInt(arquivo, "Morreu", Player[playerid][Morreu]); //Salva quantas vezes ele morreu
  DOF2_SetInt(arquivo, "Dinheiro", Player[playerid][Dinheiro]); //Salva o dinheiro que foi igualado ao GetPlayerMoney logo acima no começo da função
  DOF2_SaveFile(); //E finalmente salvando o arquivo
 }
 return 1;
}


Sobre o Tutorial

Bom, o sistema é SIMPLES e não muito otimizado, poderia ser mais otimizado com menos linhas, mas prefiro fazer assim para que possamos entender melhor e para quem ainda não sabe mecher com Pawn possa interpretar melhor os códigos.


Requerimentos

Include a_samp
Include DOF2 - PASTEBIN


Sistema Completo e mais Otimizado

Code:
#include    a_samp
#include    DOF2

#define     DIALOG_REGISTRO         1
#define     DIALOG_LOGAR            2

enum Informacoes
{
    Senha,
    Matou,
    Morreu,
    Dinheiro
}

new Player[MAX_PLAYERS][Informacoes];
new Erro[MAX_PLAYERS];

main()
{
    print("Tutorial feito por: EditPawn");
}

public OnGameModeExit()
{
    DOF2_Exit();
    return 1;
}

public OnPlayerConnect(playerid)
{
    if(DOF2_FileExists(Contas(playerid))) ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você é Registrado, digite sua senha para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
    else ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Você ainda não é Registrado, digite uma senha para se registrar!", "Confirma", "Cancelar");
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    SalvarContas(playerid);
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_REGISTRO)
    {
        if(!strval(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", "Digite apenas números!\nDigite sua senha novamente para se registrar!", "Confirma", "Cancelar");
        if(!response) return Kick(playerid);
        else
        {
            Player[playerid][Senha] = strval(inputtext); 
            SalvarContas(playerid);
            ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você se cadastrou, agora é só logar com sua senha registrada!", "Confirma", "Cancelar");
        }
    }
    if(dialogid == DIALOG_LOGAR)
    {
        if(!strval(inputtext)) return ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Digite apenas números!\nDigite sua senha cadastrada para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
        if(!response) return Kick(playerid);
        else
        { 
            Player[playerid][Senha] = DOF2_GetInt(Contas(playerid), "Senha");
            if(strval(inputtext) == Player[playerid][Senha])
            {
                Player[playerid][Matou] = DOF2_GetInt(Contas(playerid), "Matou");
                Player[playerid][Morreu] = DOF2_GetInt(Contas(playerid), "Morreu");
                Player[playerid][Dinheiro] = DOF2_GetInt(Contas(playerid), "Dinheiro"); 
                GivePlayerMoney(playerid, Player[playerid][Dinheiro]);
            }
            else
            {
                ShowPlayerDialog(playerid, DIALOG_LOGAR, DIALOG_STYLE_PASSWORD, "Logar", "Você digitou sua senha errado, digite-a novamente para logar!\nSe errar 5 vezes sua conta será banida!", "Confirma", "Cancelar");
                Erro[playerid]++;
                if(Erro[playerid] == 5)
                {
                    SendClientMessage(playerid, -1, "Sua conta está banida por errar 5 vezes a sua senha, contacte o Admin para retirar seu Ban!");
                    Ban(playerid);
                    return 1;
                }
            }
        }
    }
    return 1;
}

stock Contas(playerid)
{
    new arquivo[40], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, 32);
    format(arquivo, 40, "Contas/%s.ini", name);
    return arquivo;
}

stock SalvarContas(playerid)
{
 if(!DOF2_FileExists(Contas(playerid))) DOF2_CreateFile(Contas(playerid));
    else
    {
        Player[playerid][Dinheiro] = GetPlayerMoney(playerid);
        DOF2_SetInt(Contas(playerid), "Senha", Player[playerid][Senha]);
        DOF2_SetInt(Contas(playerid), "Matou", Player[playerid][Matou]);
        DOF2_SetInt(Contas(playerid), "Morreu", Player[playerid][Morreu]);
        DOF2_SetInt(Contas(playerid), "Dinheiro", Player[playerid][Dinheiro]);
        DOF2_SaveFile();
    }
    return 1;
}


Créditos

EditPawn - Por criar o Tutorial


Dúvidas/Sugestões/Críticas

Bom, ainda não sei usar todas as funções do DOF2 como já falei anteriormente, mas caso haja algum erro, dúvida, sugestões ou até mesmo críticas, estarei a disposição a responder ao mesmo. Espero que seja útil à quem ainda não sabe mecher com DOF2.

Espero que gostem do meu primeiro tuto '-' 

@EDIT
Esqueci de mencionar...
Terá que criar a pasta 'Contas' na ScriptFiles para salvar as contas.

@EDIT²
Arrumei as células e else '-'

@EDIT³
Trocado e Arrumado no sistema de login o DOF2_CheckLogin para outro sistema.

[TUTORIAL] Como utilizar a include DOF2

Olá pessoal.

Muitas pessoas podem ter dúvidas de como usar a include dof2. Nesse tutorial estarei tirando esse misticismo de que é algo complicado, como vemos em muitas comunidade de SA-MP. Após ler e entender esse tutorial, você estará apto a desenvolver qualquer tipo de sistema que queira armazenar dados.

O que é
DOF2 é uma include responsável por gerenciamento de dados armazenados em arquivos. Ele é muito utilizado em sistemas de registro, salvamento, empresas, etc...

Aonde encontrar
Infelizmente, não encontrei o tópico oficial do DOF2, todavia você pode encontralo clicando aqui.

Como instalar
1) Faça o download do arquivo. Click aqui.
2) Salve o arquivo na pasta pawno/includes com o nome de DOF2.inc. DOF2 em maiúsculo e a extensão .inc.
3) Na parte de includes no seu gamemode, normalmente no topo, inclua a include inserindo o código abaixo:
Code:
#include DOF2
Pronto. Seguindo esses 3 passos você tem o DOF2 instalado e pronto para ser usado.

Funcionalidade
O sistema de armazenamento e identificação dos dados em DOF2 funciona no formato:
CHAVE=VALOR

CHAVE: é o identificador de cada valor. Você não pode ter chaves com o mesmo nome. Você sempre se referencia a ela quando quer recuperar algum valor.

VALOR: é o valor propriamente dito.

Você pode imaginar esse sistema como um sistema de variável aonde a chave é o nome da variável e o valor é o valor da variável.

PS: Vocês podem encontrar muito no cabeçalho das funções a palavra: key[], que se refere a chave;

Comandos básicos
Vamos agora entrar na parte dos comandos básicos. Nesse tutorial irei ensinar a vocês o uso dos comandos que acho que vocês tem a maior chance de usar. Existem diversos outros comandos, todavia, não os acho pertinentes.

DOF2_CreateFile(file[],password[]="")
Cria um arquivo.

Exemplo de uso:
Code:
new str[128], name[32];
GetPlayerName(playerid, name. sizeof(name));
format(str, sizeof(str), "contas/%s.ini", name);
DOF2_CreateFile(str);
DOF2_FileExists(file[])
Verifica se um arquivo existe. Retorna true se existir e false caso contrário.

Exemplo de uso:
Code:
new str[128], name[32];
GetPlayerName(playerid, name. sizeof(name));
format(str, sizeof(str), "contas/%s.ini", name);
if(!DOF2_FileExists(str) DOF2_CreateFile(str);
DOF2_RenameFile(oldfile[],newfile[])
Renomeia um arquivo.

Exemplo de uso:
Code:
new str[128], new[128];
format(str, sizeof(str), "contas/joao.ini");
format(new, sizeof(new), "contas/pedro.ini");
DOF2_CreateFile(str);
DOF2_RenameFile(str, new);
DOF2_RemoveFile(file[])
Deleta um arquivo.

Exemplo de uso:
Code:
new str[128];
format(str, sizeof(str), "contas/joao.ini");
DOF2_RemoveFile(str);
DOF2_CopyFile(filetocopy[],newfile[])
Copia o conteúdo de um arquivo e cria um novo arquivo a partir desse conteúdo.

Exemplo de uso:
Code:
new str[128], new[128];
format(str, sizeof(str), "contas/joao.ini");
format(new, sizeof(new), "contas/pedro.ini");
DOF2_CreateFile(str);
DOF2_CopyFile(str, new);
DOF2_SaveFile()
Salva o conteúdo do arquivo que está sendo trabalhado.

Exemplo de uso:
Code:
new str[128];
format(str, sizeof(str), "contas/joao.ini");
DOF2_CreateFile(str);
DOF2_SaveFile();
DOF2_GetString(file[],key[],tag[]="")
DOF2_GetInt(file[],key[],tag[]="")
DOF2_GetFloat(file[],key[],tag[]="")
DOF2_GetBool(file[],key[],tag[]="")
Comandos que recebem um tipo de valor do arquivo: literal, numérico, fracionário e booleano (string, int, float e boolean).

Exemplo de uso:
Code:
new str[128], nome[32], idade, Float:salario;
format(str, sizeof(str), "contas/joao.ini");
nome = DOF2_GetString(str, "name");
idade = DOF2_GetInt(str, "age");
salario = DOF2_GetFloat(str, "salary");
banido = DOF2_GetBool(str, "banned");
DOF2_SetString(file[],key[],tag[]="")
DOF2_SetInt(file[],key[],tag[]="")
DOF2_SetFloat(file[],key[],tag[]="")
Comando que inserem um valor no arquivo. Literal, numérico, fracionário e booleano (string, int, float e boolean).

Exemplo de uso:
Code:
new str[128], nome[32], idade, Float:salario;
format(str, sizeof(str), "contas/joao.ini");
DOF2_SetString(str, "name", "Joao");
DOF2_SetInt(str, "age", 18);
DOF2_SetFloat(str, "salary", 0.0);
DOF2_SetBool(str, "banned", true);
Assim chegamos na parte final do nosso tutorial sobre DOF2. Com esse conteúdo vocês estão aptos a construir qualquer sistema de armazenamento de informações que bem desejarem. 

Abraços e até a próxima.

domingo, 15 de março de 2015

BradoksApp Messenger v0.1






★★★ Interface bem aperfeiçoada ★★★
O BradoksApp Messenger é um mensageiro para smartphones disponível para telefones Android, BlackBerry, iPhone, Windows Phone e Nokia. O BradoksApp utiliza a sua rede 3G ou Wi-Fi (quando disponível) para enviar mensagens para seus amigos e família. Mude de SMS para BradoksApp para enviar e receber mensagens, imagens, mensagens de áudio e vídeo. Totalmente GRATUITO!
POR QUE USAR O BradoksApp:
★ NENHUMA COBRANÇA ESCONDIDA: Assim que você e seus amigos baixarem o aplicativo, vocês podem conversar o quanto quiserem. Envie um milhão de mensagens por dia para seus amigos, de graça! O BradoksApp utiliza a sua conexão com a internet: 3G/EDGE ou Wi-Fi quando disponível.
★ MULTIMIDIA: Envie vídeo, imagens, e notas de áudio para seus amigos e contatos.
★ CONVERSA DE GRUPO: Aproveite para bater papo com seus grupos de amigos.
★ SEM TAXAS INTERNACIONAIS: Assim como não há custo para enviar emails para o exterior, não há custos para enviar mensagens para telefones internacionais pelo BradoksApp. Converse com seus amigos ao redor do mundo que tiverem BradoksApp, e evite os custos indesejáveis.
★ DIGA NÃO ÀS SENHAS E NOMES DE USUÁRIO: Por que se incomodar com senhas e nomes de usuário? O BradoksApp funciona com o seu número de telefone, assim como o SMS, e integra completamente com a lista de contatos do seu telefone.
★ SEM NECESSIDADE DE ENTRAR E SAIR: Sem confusão de precisar conectar e desconectar de outros computadores ou aparelhos. Com as notificações do BradoksApp, você está sempre conectado.
★ SEM NECESSIDADE DE ADICIONAR AMIGOS: A sua lista de contatos é automaticamente conectada. Os seus contatos que já estiverem no BradoksApp serão automaticamente mostrados no BradoksApp.
★ MENSAGENS OFFLINE: Mesmo se você perder a notificação ou desligar o seu telefone, o BradoksApp guardará as suas mensagens offline até que você possa baixar na próxima vez que você usar o aplicativo.
★ E MUITO MAIS: Envie sua localização, troque contatos, personalize o papel de parede, personalize os sons de notificação, modo paisagem, horário preciso de mensagens, envie seu histórico de conversas por email, transmita mensagens para vários contatos ao mesmo tempo, e muito mais!
--------------------------------------------------------------------------------------- 
Ficamos sempre felizes em falar com você! Se você possui alguma pergunta ou opinião, por favor nos envie um e-mail para:
leobradoksyt@gmail.com
ou siga-nos no facebook:
https://www.facebook.com/leonardo.bradoks
nosso site: http://leonardobradoks.blogspot.com/2015/03/BradoksApp.html
--------------------------------------------------------------------------------------- 
Alternativo: http://files.appsgeyser.com/BradoksApp.apk

Caso não consiga baixar pelo link acima, utilize o QRCode abaixo.



←  Anterior Proxima  → Inicio

Midias Sociais

Seguidores

Total de Visualizações