Pages

Ads 468x60px


[FilterScript] Register/Login System (SII)

Para começar, eae galera (:
Decidi postar aqui o sistema de registo/login que criei para o meu gamemode, que grava:
- Dinheiro;
- Banco;
- Sexo;
- Vip;
- Administrador.


Gravava também: Hotel, Cargo, Líder, Membro, Representante Player, Skin, Organização, Emprego, ... mas como não quero postar o tópico só para rpg, vou postar só com isso.

Os includes:

pawn Code:
#include a_samp #include SII

Agora por baixo, iremos colocar as funções de dinheiro e as cores:

pawn Code:
#define DarDinheiro(%0,%1)                              Info[%0][Dinheiro] += %1 #define RetirarDinheiro(%0,%1)                          Info[%0][Dinheiro] -= %1 #define SetarDinheiro(%0,%1)                             Info[%0][Dinheiro] = %1 #define GetarDinheiro(%0)                                     Info[%0][Dinheiro] #define ResetarDinheiro(%0)                              Info[%0][Dinheiro] = 0; #define Esverdeado                                                  (0x808000AA) #define Vermelho                                                    (0xE60000FF) #define Amarelo                                                     (0xFFFF00FF) #define Branco                                                      (0xFFFFFFAA) #define Verde                                                       (0x21DD00FF) #define aCor                                                        (0x0080C0AA) #define cVip1                                                       (0xFFF000AA) //Alterar #define cVip2                                                       (0xFFF000AA) //Alterar #define cVip3                                                       (0xFFF000AA) //Alterar

Agora, as defines dos dialogs (registar, logar, sexo, kickado):
pawn Code:
#define DialogRegistar                                                     (100) #define DialogLogar                                                        (101) #define DialogSexo                                                         (102) #define DialogKickado                                                      (104)

Para acabar com as defines, colocar a define do CASE_SENSITIVE e a define das Contas e do AdminBot:
pawn Code:
#define Contas                                                   "Contas/%s.ini" #define AdminBot                                                      "Diogo B." #define CASE_SENSITIVE                                            false

De seguida, iremos colocar as arrays e as forwards do sistema:
pawn Code:
enum Informacoes {     Administrador,     Jogador[24],     SenhaErrada,     Outro[24],         Dinheiro,         Logado,         Banco,         Senha,     Sexo,     Vip, }; static     Info[MAX_PLAYERS][Informacoes],         sStringFrm[128],         sStringArq[128],     Data[3],     Time[3]; forward CallSalvar(playerid); forward CallCarregar(playerid);

Depois de isto tudo feito, já podemos ir para as callbacks.
Para começar, iremos colocar a callback OnPlayerConnect OnPlayerDisconnect (que é quando os players se conectam e desconectam do servidor):
pawn Code:
public OnPlayerDisconnect(playerid, reason)     return CallSalvar(playerid); public OnPlayerConnect(playerid) {     CallCarregar(playerid);     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(INI_Exist(sStringArq))     {         format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Registada!\n\nColoque a sua senha para se poder logar no servidor (:", Info[playerid][Jogador]);         ShowPlayerDialog(playerid, DialogLogar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Login:", sStringFrm, "Logar", "Cancelar" );     }     else     {         format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Não registada!\n\nColoque a sua senha para se registar no servidor (:", Info[playerid][Jogador]);         ShowPlayerDialog( playerid, DialogRegistar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Registo:", sStringFrm, "Registar", "Cancelar" );     }     return true; }

Depois de isto feito, podemos passar para a callback do OnPlayerDialogResponse, onde se encontrarão as funções dos dialogs:
pawn Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(dialogid == DialogLogar)     {         if(response)         {             if(strlen(inputtext) == 0)             {                 format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Registada!\n\nColoque a sua senha para se poder logar no servidor (:", Info[playerid][Jogador]);                 ShowPlayerDialog(playerid, DialogLogar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Login:", sStringFrm, "Logar", "Cancelar");                 SendClientMessage(playerid, Verde, "A senha deve ter mais do que 0 digitos!");             }             static Input[20];             INI_Open(sStringArq);             INI_ReadString(Input, "Senha");             INI_Close();             if(!strcmp(inputtext, Input, CASE_SENSITIVE))             {                 SpawnPlayer(playerid);                 format(sStringFrm, sizeof(sStringFrm), "%s, seja bem-vindo ao servidor (:", Info[playerid][Jogador]);                 SendClientMessage(playerid, Amarelo, sStringFrm);                 if(Info[playerid][Administrador] >= 1)                 {                     format(sStringFrm, sizeof(sStringFrm), "Logado com nível %d de administrador (:", Info[playerid][Administrador]);                     SendClientMessage(playerid, aCor, sStringFrm);                 }                 if(Info[playerid][Vip] == 1)                     return SendClientMessage(playerid, cVip1, "Logado com Vip Gold (:");                 if(Info[playerid][Vip] == 2)                     return SendClientMessage(playerid, cVip2, "Logado com Vip Prata (:");                 if(Info[playerid][Vip] == 3)                     return SendClientMessage(playerid, cVip3, "Logado com Vip Bronze (:");             }             else             {                 format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Registada!\n\nColoque a sua senha para se poder logar no servidor (:", Info[playerid][Jogador]);                 ShowPlayerDialog(playerid, DialogLogar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Login:", sStringFrm, "Logar", "Cancelar");                 SendClientMessage(playerid, Vermelho, "Senha errada! Se errar 3 vezes, é kickado!");                 Info[playerid][SenhaErrada] += 1;                 if(Info[playerid][SenhaErrada] == 3)                 {                     SendClientMessage(playerid, Branco, "Você foi kickado do servidor por errar a senha 3 vezes!");                     Kickar(playerid, "Errou a senha 3 vezes");                 }             }         }         else if(!response)         {             SendClientMessage(playerid, Branco, "Você foi kickado por não querer-se logar!");             Kickar(playerid, "Não quis logar");         }     }     else if(dialogid == DialogRegistar)     {         if(response)         {             if(!strlen(inputtext))             {                 format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Não registada!\n\nColoque a sua senha para se registar no servidor (:", Info[playerid][Jogador]);                 ShowPlayerDialog( playerid, DialogRegistar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Registo:", sStringFrm, "Registar", "Cancelar" );                 SendClientMessage(playerid, Verde, "A senha não pode conter 0 digitos!");             }             strmid(Info[playerid][Senha], inputtext, 0, strlen(inputtext), 128);             INI_Create(sStringArq);             INI_Open(sStringArq);             INI_WriteString("Senha", Info[playerid][Senha]);             ShowPlayerDialog(playerid, DialogSexo, DIALOG_STYLE_MSGBOX, "{5CACEE}A que sexo pertence?", "Para acabarmos de fazer o seu registo, precisamos de saber o seu sexo.\nEscolha o sexo abaixo", "Masculino", "Feminino");         }         else         {             SendClientMessage(playerid, Branco, "Você foi kickado por não querer-se registar!");             Kickar(playerid, "Não quis registar");         }     }     else if(dialogid == DialogSexo)     {         if(response)         {             Info[playerid][Sexo] = 1;             SendClientMessage(playerid, Esverdeado, "Agora que você acabou seu registo... logue-se (:");             Info[playerid][Logado] = true;             SetTimerEx("CallInicioPlayer", 2000, false, "i", playerid);             INI_WriteInt("Sexo", Info[playerid][Sexo]);         }         else if(!response)         {             Info[playerid][Sexo] = 2;             SendClientMessage(playerid, Esverdeado, "Agora que você acabou seu registo... logue-se (:");             Info[playerid][Logado] = true;             INI_WriteInt("Sexo", Info[playerid][Sexo]);         }     }       return true; }

Para acabar, as callbacks para salvamento e para carregamento das informações, e a stock de kickar:
pawn Code:
public CallSalvar(playerid) {     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(INI_Exist(sStringArq))     {         INI_Open(sStringArq);         INI_WriteInt("Dinheiro", GetarDinheiro(playerid));         INI_WriteInt("Banco", Info[playerid][Banco]);         INI_WriteInt("Sexo", Info[playerid][Sexo]);         INI_WriteInt("Vip", Info[playerid][Vip]);               INI_WriteInt("Administrador", Info[playerid][Administrador]);                 INI_Save();         INI_Close();     }     else INI_Create(sStringArq);     return true; } public CallCarregar( playerid ) {     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(INI_Exist(sStringArq))     {         INI_Open(sStringArq);         DarDinheiro(playerid, INI_ReadInt("Dinheiro"));         Info[playerid][Dinheiro] = INI_ReadInt("Dinheiro");         Info[playerid][Banco] = INI_ReadInt("Banco");         Info[playerid][Sexo] = INI_ReadInt("Sexo");         Info[playerid][Vip] = INI_ReadInt("Vip");                 Info[playerid][Administrador] = INI_ReadInt("Administrador");             }     return true; }
pawn Code:
stock Kickar(playerid, motivo[]) {     getdate(Data[0], Data[1], Data[2]);     gettime(Time[0], Time[1], Time[2]);     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringFrm, sizeof(sStringFrm), "{E60000}[Kickado] {FFFFFF}%s foi kickado do servidor. [{E60000}Motivo: {FFFFFF}%s]", Info[playerid][Jogador], motivo);     SendClientMessageToAll(Branco, sStringFrm);     format(sStringArq, sizeof(sStringArq), "%s, você foi kickado do servidor!\n{5CACEE}Administrador: {FFFFFF}%s\n{5CACEE}Motivo: {FFFFFF}%s\n{5CACEE}Data: {FFFFFF}%d/%d/%d\n{5CACEE}Hora: {FFFFFF}%d:%d:%d ", Info[playerid][Jogador], AdminBot, motivo, Data[2], Data[1], Data[0], Time[0], Time[1], Time[2]);     ShowPlayerDialog(playerid, DialogKickado, DIALOG_STYLE_MSGBOX, "{5CACEE}Sistema de Kick", sStringArq, "Concluir", "");     return true; }

CÓDIGO COMPLETO:

pawn Code:
/*------------------------------------------------------------------------------                                  [INCLUDES]                                 ------------------------------------------------------------------------------*/ #include a_samp #include SII /*------------------------------------------------------------------------------                                  [DINHEIRO]                                 ------------------------------------------------------------------------------*/ #define DarDinheiro(%0,%1)                              Info[%0][Dinheiro] += %1 #define RetirarDinheiro(%0,%1)                          Info[%0][Dinheiro] -= %1 #define SetarDinheiro(%0,%1)                             Info[%0][Dinheiro] = %1 #define GetarDinheiro(%0)                                     Info[%0][Dinheiro] #define ResetarDinheiro(%0)                              Info[%0][Dinheiro] = 0; /*------------------------------------------------------------------------------                                  [C & AB]                                 ------------------------------------------------------------------------------*/ #define Contas                                                   "Contas/%s.ini" #define AdminBot                                                      "Diogo B." /*------------------------------------------------------------------------------                                  [DIALOGS]                                 ------------------------------------------------------------------------------*/ #define DialogRegistar                                                     (100) #define DialogLogar                                                        (101) #define DialogSexo                                                         (102) #define DialogKickado                                                      (104) /*------------------------------------------------------------------------------                                  [CORES]                                 ------------------------------------------------------------------------------*/ #define Esverdeado                                                  (0x808000AA) #define Vermelho                                                    (0xE60000FF) #define Amarelo                                                     (0xFFFF00FF) #define Branco                                                      (0xFFFFFFAA) #define Verde                                                       (0x21DD00FF) #define aCor                                                        (0x0080C0AA) /*------------------------------------------------------------------------------                                [CORES VIP]                                 ------------------------------------------------------------------------------*/ #define cVip1                                                       (0xFFF000AA) //Alterar #define cVip2                                                       (0xFFF000AA) //Alterar #define cVip3                                                       (0xFFF000AA) //Alterar /*------------------------------------------------------------------------------                                    [CS]                                 ------------------------------------------------------------------------------*/ #define CASE_SENSITIVE                                                     false /*------------------------------------------------------------------------------                                  [ARRAYS]                                 ------------------------------------------------------------------------------*/ enum Informacoes {     Administrador,     Jogador[24],     SenhaErrada,     Outro[24],         Dinheiro,         Logado,         Banco,         Senha,     Sexo,     Vip, }; static     Info[MAX_PLAYERS][Informacoes],         sStringFrm[128],         sStringArq[128],     Data[3],     Time[3]; forward CallSalvar(playerid); forward CallCarregar(playerid); /*------------------------------------------------------------------------------                                  [CALBACKS]                                 ------------------------------------------------------------------------------*/ public OnPlayerDisconnect(playerid, reason)     return CallSalvar(playerid); public OnPlayerConnect(playerid) {     CallCarregar(playerid);     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(INI_Exist(sStringArq))     {         format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Registada!\n\nColoque a sua senha para se poder logar no servidor (:", Info[playerid][Jogador]);         ShowPlayerDialog(playerid, DialogLogar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Login:", sStringFrm, "Logar", "Cancelar" );     }     else     {         format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Não registada!\n\nColoque a sua senha para se registar no servidor (:", Info[playerid][Jogador]);         ShowPlayerDialog( playerid, DialogRegistar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Registo:", sStringFrm, "Registar", "Cancelar" );     }     return true; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(dialogid == DialogLogar)     {         if(response)         {             if(strlen(inputtext) == 0)             {                 format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Registada!\n\nColoque a sua senha para se poder logar no servidor (:", Info[playerid][Jogador]);                 ShowPlayerDialog(playerid, DialogLogar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Login:", sStringFrm, "Logar", "Cancelar");                 SendClientMessage(playerid, Verde, "A senha deve ter mais do que 0 digitos!");             }             static Input[20];             INI_Open(sStringArq);             INI_ReadString(Input, "Senha");             INI_Close();             if(!strcmp(inputtext, Input, CASE_SENSITIVE))             {                 SpawnPlayer(playerid);                 format(sStringFrm, sizeof(sStringFrm), "%s, seja bem-vindo ao servidor (:", Info[playerid][Jogador]);                 SendClientMessage(playerid, Amarelo, sStringFrm);                 if(Info[playerid][Administrador] >= 1)                 {                     format(sStringFrm, sizeof(sStringFrm), "Logado com nível %d de administrador (:", Info[playerid][Administrador]);                     SendClientMessage(playerid, aCor, sStringFrm);                 }                 if(Info[playerid][Vip] == 1)                     return SendClientMessage(playerid, cVip1, "Logado com Vip Gold (:");                 if(Info[playerid][Vip] == 2)                     return SendClientMessage(playerid, cVip2, "Logado com Vip Prata (:");                 if(Info[playerid][Vip] == 3)                     return SendClientMessage(playerid, cVip3, "Logado com Vip Bronze (:");             }             else             {                 format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Registada!\n\nColoque a sua senha para se poder logar no servidor (:", Info[playerid][Jogador]);                 ShowPlayerDialog(playerid, DialogLogar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Login:", sStringFrm, "Logar", "Cancelar");                 SendClientMessage(playerid, Vermelho, "Senha errada! Se errar 3 vezes, é kickado!");                 Info[playerid][SenhaErrada] += 1;                 if(Info[playerid][SenhaErrada] == 3)                 {                     SendClientMessage(playerid, Branco, "Você foi kickado do servidor por errar a senha 3 vezes!");                     Kickar(playerid, "Errou a senha 3 vezes");                 }             }         }         else if(!response)         {             SendClientMessage(playerid, Branco, "Você foi kickado por não querer-se logar!");             Kickar(playerid, "Não quis logar");         }     }     else if(dialogid == DialogRegistar)     {         if(response)         {             if(!strlen(inputtext))             {                 format(sStringFrm, sizeof(sStringFrm), "{5CACEE}Nome: {FFFFFF}%s\n{5CACEE}Tipo de conta: {FFFFFF}Não registada!\n\nColoque a sua senha para se registar no servidor (:", Info[playerid][Jogador]);                 ShowPlayerDialog( playerid, DialogRegistar, DIALOG_STYLE_INPUT, "{5CACEE}Sistema de Registo:", sStringFrm, "Registar", "Cancelar" );                 SendClientMessage(playerid, Verde, "A senha não pode conter 0 digitos!");             }             strmid(Info[playerid][Senha], inputtext, 0, strlen(inputtext), 128);             INI_Create(sStringArq);             INI_Open(sStringArq);             INI_WriteString("Senha", Info[playerid][Senha]);             ShowPlayerDialog(playerid, DialogSexo, DIALOG_STYLE_MSGBOX, "{5CACEE}A que sexo pertence?", "Para acabarmos de fazer o seu registo, precisamos de saber o seu sexo.\nEscolha o sexo abaixo", "Masculino", "Feminino");         }         else         {             SendClientMessage(playerid, Branco, "Você foi kickado por não querer-se registar!");             Kickar(playerid, "Não quis registar");         }     }     else if(dialogid == DialogSexo)     {         if(response)         {             Info[playerid][Sexo] = 1;             SendClientMessage(playerid, Esverdeado, "Agora que você acabou seu registo... logue-se (:");             Info[playerid][Logado] = true;             SetTimerEx("CallInicioPlayer", 2000, false, "i", playerid);             INI_WriteInt("Sexo", Info[playerid][Sexo]);         }         else if(!response)         {             Info[playerid][Sexo] = 2;             SendClientMessage(playerid, Esverdeado, "Agora que você acabou seu registo... logue-se (:");             Info[playerid][Logado] = true;             INI_WriteInt("Sexo", Info[playerid][Sexo]);         }     }       return true; } /*------------------------------------------------------------------------------                         [SISTEMA DE REGISTO E LOGIN] ------------------------------------------------------------------------------*/ public CallSalvar(playerid) {     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(INI_Exist(sStringArq))     {         INI_Open(sStringArq);         INI_WriteInt("Dinheiro", GetarDinheiro(playerid));         INI_WriteInt("Banco", Info[playerid][Banco]);         INI_WriteInt("Sexo", Info[playerid][Sexo]);         INI_WriteInt("Vip", Info[playerid][Vip]);               INI_WriteInt("Administrador", Info[playerid][Administrador]);                 INI_Save();         INI_Close();     }     else INI_Create(sStringArq);     return true; } public CallCarregar( playerid ) {     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringArq, sizeof(sStringArq), Contas, Info[playerid][Jogador]);     if(INI_Exist(sStringArq))     {         INI_Open(sStringArq);         DarDinheiro(playerid, INI_ReadInt("Dinheiro"));         Info[playerid][Dinheiro] = INI_ReadInt("Dinheiro");         Info[playerid][Banco] = INI_ReadInt("Banco");         Info[playerid][Sexo] = INI_ReadInt("Sexo");         Info[playerid][Vip] = INI_ReadInt("Vip");                 Info[playerid][Administrador] = INI_ReadInt("Administrador");             }     return true; } /*------------------------------------------------------------------------------                                  [KICKAR]                                 ------------------------------------------------------------------------------*/ stock Kickar(playerid, motivo[]) {     getdate(Data[0], Data[1], Data[2]);     gettime(Time[0], Time[1], Time[2]);     GetPlayerName(playerid, Info[playerid][Jogador], 23);     format(sStringFrm, sizeof(sStringFrm), "{E60000}[Kickado] {FFFFFF}%s foi kickado do servidor. [{E60000}Motivo: {FFFFFF}%s]", Info[playerid][Jogador], motivo);     SendClientMessageToAll(Branco, sStringFrm);     format(sStringArq, sizeof(sStringArq), "%s, você foi kickado do servidor!\n{5CACEE}Administrador: {FFFFFF}%s\n{5CACEE}Motivo: {FFFFFF}%s\n{5CACEE}Data: {FFFFFF}%d/%d/%d\n{5CACEE}Hora: {FFFFFF}%d:%d:%d ", Info[playerid][Jogador], AdminBot, motivo, Data[2], Data[1], Data[0], Time[0], Time[1], Time[2]);     ShowPlayerDialog(playerid, DialogKickado, DIALOG_STYLE_MSGBOX, "{5CACEE}Sistema de Kick", sStringArq, "Concluir", "");     return true; }

Alguma dúvida, só perguntar (: