Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //-------------------------------------------------------------------//
- //**************************** INCLUDES *****************************//
- //-------------------------------------------------------------------//
- #include <a_samp>
- #include <crashdetect>
- #include <YSI\y_iterate>
- #include <a_mysql>
- #include <CTime>
- //-------------------------------------------------------------------//
- //************************* DEFINIÇÕES ******************************//
- //********************* Você pode alterar ***************************//
- //-------------------------------------------------------------------//
- // --> Configurações
- #define SERVER_NAME ("EasyWay")
- #define SERVER_VERSION ("0.1")
- #define MAX_LOGIN_ATTEMPTS (3)
- // --> Cores
- #define COLOR_BLUE (0x2641FEFF)
- #define COLOR_GREY (0xAFAFAFFF)
- #define COLOR_LIGHTRED (0xFF6347FF)
- #define COLOR_LIGHTBLUE (0x33CCFFAA)
- #define COLOR_LIGHTGREEN (0x66ff66FF)
- #define COLOR_CLIENT (0xAAC4E5FF)
- #define COLOR_TEAL (0x00A180FF)
- #define COLOR_ORANGE (0xFF9409FF)
- #define COLOR_PURPLE (0xD0AEEBFF)
- #define COLOR_OPENSERV (0xFFBD9DFF)
- #define COLOR_WHITE (0xFFFFFFFF)
- #define COLOR_PINK (0xFF66FFAA)
- #define COLOR_RED (0xFF0000AA)
- #define COLOR_YELLOW (0xFFFF00AA)
- #define COLOR_GREEN (0x33AA33AA)
- #define COLOR_LIGHTBLUE2 (0x99ccffAA)
- #define COLOR_BROWN (0xA8623EAA)
- #define COLOR_LIGHTBROWN (0xf4ac94AA)
- #define COLOR_LIGHTBROWN2 (0xc7a6afAA)
- // --> Cores para dialogs e afins
- #define COLOR_TITLE_DIALOG "{00a180}"
- #define COLORT_GREEN "{49ad00}"
- #define COLORT_YELLOW "{fff600}"
- #define COLORT_WHITE "{ffffff}"
- #define COLORT_LIGHTRED "{e44235}"
- #define COLORT_ORANGE "{ff9409}"
- #define COLORT_ORANGE2 "{f2bb73}"
- #define COLORT_GREY "{a4a4a4}"
- //-------------------------------------------------------------------//
- //************************ !DEFINIÇÕES! *****************************//
- //******************** Cuidado ao alterar ***************************//
- //-------------------------------------------------------------------//
- #define DIALOG_REGISTER (1) // até 20
- #define DIALOG_LOGIN (21)
- #define sendServerMessage(%0,%1) \
- sendClientMessageEx(%0, COLOR_TEAL, "[SERVER]:{FFFFFF} "%1)
- #define sendSyntaxMessage(%0,%1) \
- sendClientMessageEx(%0, COLOR_GREY, "[USO CORRETO]:{FFFFFF} "%1)
- #define sendErrorMessage(%0,%1) \
- sendClientMessageEx(%0, COLOR_LIGHTRED, "[ERRO]:{FFFFFF} "%1)
- #define sendAdminAction(%0,%1) \
- sendClientMessageEx(%0, COLOR_CLIENT, "[ADMIN]:{FFFFFF} "%1)
- #define sendWarningMessage(%0,%1) \
- sendClientMessageEx(%0, COLOR_YELLOW, "[AVISO]: "%1)
- #define MENU_LOGIN_INDEX (1)
- #define MENU_LOGIN_REGISTER (2)
- #define MENU_LOGIN_REGISTER_STAGE_1 (3)
- #define MENU_LOGIN_REGISTER_STAGE_2 (4)
- #define MENU_LOGIN_REGISTER_STAGE_3 (5)
- //-------------------------------------------------------------------//
- //*************************** VARIÁVEIS *****************************//
- //-------------------------------------------------------------------//
- new Dialog[2048],
- String[1024],
- Query[1024],
- MySQL:MySQL_Connection = MYSQL_INVALID_HANDLE;
- enum enum_Player
- {
- // Data
- ORM:pORM,
- pAccountID,
- pName[24],
- pPassword[65],
- pEmail[64],
- pRegisterDate,
- pLastLogin,
- // Non-data
- pDialogID,
- bool:pKicked,
- bool:pLogged,
- pMaxLoginAttempts,
- pTimerPlayer,
- // Registro
- registerPassword[30]
- }
- new Player[MAX_PLAYERS][enum_Player];
- //-------------------------------------------------------------------//
- //**************************** FORWARDS *****************************//
- //-------------------------------------------------------------------//
- forward KickTimer(playerid);
- forward OnPlayerDataLoaded(playerid);
- forward OnPlayerRegister(playerid);
- forward OnPlayerUpdateEx(playerid);
- forward TimerOneMinute();
- //-------------------------------------------------------------------//
- main()
- {
- print("\n----------------------------------");
- printf("%s [v%s]", SERVER_NAME, SERVER_VERSION);
- print("----------------------------------\n");
- }
- public OnGameModeInit()
- {
- printf("[MySQL] Estabelecendo conexão com o servidor..");
- MySQL_Connection = mysql_connect_file("mysql_connection.ini");
- mysql_log(ALL);
- if(MySQL_Connection == MYSQL_INVALID_HANDLE)
- {
- print("[MySQL] Não foi possível realizar a conexão, desligando servidor..");
- SendRconCommand("exit");
- }
- else
- print("[MySQL] Conexão estabelecida com sucesso.");
- format(String, sizeof(String), "%s [v%s]", SERVER_NAME, SERVER_VERSION);
- SetGameModeText(String);
- SetTimer("TimerOneMinute", 1000*60, true);
- AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
- return 1;
- }
- public OnGameModeExit()
- {
- mysql_close(MySQL_Connection);
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- if(!IsPlayerNPC(playerid))
- {
- TogglePlayerSpectating(playerid, true);
- InterpolateCameraPos(playerid, 1350.289306, -1399.634887, 39.952976, 1346.096069, -989.852233, 74.761276, 1000*40);
- InterpolateCameraLookAt(playerid, 1350.505981, -1394.746826, 38.923583, 1348.108398, -985.276794, 74.885650, 1000*40);
- orm_setkey(Player[playerid][pORM], "Name");
- orm_select(Player[playerid][pORM], "OnPlayerDataLoaded", "d", playerid);
- }
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- if(!IsPlayerNPC(playerid))
- {
- SetSpawnInfo(playerid, 0, 23, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
- clearPlayerVars(playerid);
- loadPlayer(playerid);
- Player[playerid][pTimerPlayer] = SetTimerEx("OnPlayerUpdateEx", 1000, true, "i", playerid);
- }
- return 1;
- }
- public OnPlayerDataLoaded(playerid)
- {
- orm_setkey(Player[playerid][pORM], "ID");
- switch(orm_errno(Player[playerid][pORM]))
- {
- case ERROR_INVALID:
- {
- sendServerMessage(playerid, "Ocorreu algum problema, entre novamente..");
- kickEx(playerid);
- }
- case ERROR_OK: showLoginMenu(playerid, MENU_LOGIN_INDEX);
- case ERROR_NO_DATA: showLoginMenu(playerid, MENU_LOGIN_REGISTER);
- }
- }
- public OnPlayerRegister(playerid)
- {
- sendServerMessage(playerid, "Conta criada com sucesso! Você foi o %dº a criar uma conta.", Player[playerid][pAccountID]);
- Player[playerid][pLogged] = true;
- TogglePlayerSpectating(playerid, false);
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- if(!IsPlayerNPC(playerid))
- {
- if(Player[playerid][pTimerPlayer] != 0)
- KillTimer(Player[playerid][pTimerPlayer]);
- orm_update(Player[playerid][pORM]);
- orm_destroy(Player[playerid][pORM]);
- clearPlayerVars(playerid);
- }
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if (strcmp("/mycommand", cmdtext, true, 10) == 0)
- {
- // Do something here
- return 1;
- }
- return 0;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- return 1;
- }
- public OnRconCommand(cmd[])
- {
- return 1;
- }
- public OnPlayerRequestSpawn(playerid)
- {
- if(!Player[playerid][pLogged])
- return false;
- return SpawnPlayer(playerid);
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- return 1;
- }
- public OnRconLoginAttempt(ip[], password[], success)
- {
- return 1;
- }
- public OnPlayerUpdate(playerid)
- {
- return 1;
- }
- public OnPlayerUpdateEx(playerid)
- {
- }
- public TimerOneMinute()
- {
- foreach(new i : Player)
- {
- if(!Player[i][pLogged])
- continue;
- orm_update(Player[i][pORM]);
- }
- }
- public OnPlayerClickPlayer(playerid, clickedplayerid, source)
- {
- return 1;
- }
- public KickTimer(playerid)
- {
- if(Player[playerid][pKicked])
- return Kick(playerid);
- return false;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(Player[playerid][pDialogID] != dialogid)
- {
- kickEx(playerid);
- sendWarningMessage(playerid, "Você foi kickado por suspeita de utilizar Dialog-Hack.");
- return true;
- }
- switch(dialogid)
- {
- case DIALOG_REGISTER:
- {
- if(!response)
- {
- sendServerMessage(playerid, "Tudo bem, volte quando quiser criar uma conta!");
- kickEx(playerid);
- return true;
- }
- showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1);
- return true;
- }
- case DIALOG_REGISTER+1:
- {
- if(!response)
- {
- sendServerMessage(playerid, "Tudo bem, volte quando quiser criar uma conta!");
- kickEx(playerid);
- return true;
- }
- if(isnull(inputtext))
- return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1, ""#COLORT_LIGHTRED"Você precisa digitar uma senha!");
- if(!isValidPassword(inputtext))
- return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1, ""#COLORT_LIGHTRED"Senha inválida (somente 6 à 30 dígitos).");
- format(Player[playerid][registerPassword], 30, inputtext);
- showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_2);
- return true;
- }
- case DIALOG_REGISTER+2:
- {
- if(!response)
- {
- Player[playerid][registerPassword][0] = EOS;
- showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1);
- return true;
- }
- if(isnull(inputtext))
- return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_2, ""#COLORT_LIGHTRED"Você precisa confirmar sua senha!");
- if(!strcmp(Player[playerid][registerPassword], inputtext))
- showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3);
- else
- showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_2, ""#COLORT_LIGHTRED"As senhas não combinam!");
- return true;
- }
- case DIALOG_REGISTER+3:
- {
- if(!response)
- {
- Player[playerid][registerPassword][0] = EOS;
- showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1);
- return true;
- }
- if(isnull(inputtext))
- return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3, ""#COLORT_LIGHTRED"Você precisa digitar algum e-mail!");
- if(!isValidEmail(inputtext))
- return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3, ""#COLORT_LIGHTRED"Digite um e-mail válido!");
- if(SQL_verifyEmail(inputtext))
- return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3, ""#COLORT_LIGHTRED"Este e-mail já está em uso.");
- // --> Registro concluido
- SHA256_PassHash(Player[playerid][registerPassword], "EveryBodyHatesCris", Player[playerid][pPassword], 65);
- format(Player[playerid][pEmail], 64, inputtext);
- Player[playerid][pRegisterDate] = gettime();
- Player[playerid][pLastLogin] = gettime();
- orm_insert(Player[playerid][pORM], "OnPlayerRegister", "d", playerid);
- }
- case DIALOG_LOGIN:
- {
- if(!response)
- {
- sendServerMessage(playerid, "Volte sempre.");
- kickEx(playerid);
- return true;
- }
- if(isnull(inputtext))
- return showLoginMenu(playerid, MENU_LOGIN_INDEX, ""#COLORT_LIGHTRED"Digite sua senha!");
- static hash[65];
- SHA256_PassHash(inputtext, "EveryBodyHatesCris", hash, 65);
- if(!strcmp(hash, Player[playerid][pPassword]))
- {
- Player[playerid][pLogged] = true;
- sendServerMessage(playerid, "Logado com suceso!");
- sendServerMessage(playerid, "Seu último login foi em %s.", timestampToDate(Player[playerid][pLastLogin]));
- Player[playerid][pLastLogin] = gettime();
- TogglePlayerSpectating(playerid, false);
- }
- else
- {
- Player[playerid][pMaxLoginAttempts]++;
- if(Player[playerid][pMaxLoginAttempts] == MAX_LOGIN_ATTEMPTS)
- {
- sendWarningMessage(playerid, "Você foi kickado por excessos de tentativas.");
- kickEx(playerid);
- }
- else showLoginMenu(playerid, MENU_LOGIN_INDEX, ""#COLORT_LIGHTRED"Senha inválida.");
- }
- return true;
- }
- }
- return false;
- }
- //-------------------------------------------------------------------//
- //**************************** FUNÇÕES ******************************//
- //-------------------------------------------------------------------//
- // --> Player
- stock loadPlayer(playerid)
- {
- GetPlayerName(playerid, Player[playerid][pName], 24);
- new ORM:ormid = Player[playerid][pORM] = orm_create("players");
- orm_addvar_int(ormid, Player[playerid][pAccountID], "ID");
- orm_addvar_string(ormid, Player[playerid][pName], 24, "Name");
- orm_addvar_string(ormid, Player[playerid][pPassword], 65, "Password");
- orm_addvar_string(ormid, Player[playerid][pEmail], 64, "Email");
- orm_addvar_int(ormid, Player[playerid][pLastLogin], "LastLogin");
- orm_addvar_int(ormid, Player[playerid][pRegisterDate], "RegisterDate");
- }
- stock showLoginMenu(playerid, menuid, message[] = "")
- {
- switch(menuid)
- {
- case MENU_LOGIN_INDEX:
- {
- format(String, sizeof(String), "%s\n\n", message);
- format(Dialog, sizeof(Dialog), ""#COLORT_WHITE"Bem-vindo novamente "#COLORT_YELLOW"%s!\n\n%s"#COLORT_WHITE"Digite sua senha para logar:", Player[playerid][pName], (isnull(message) ? "" : String));
- showPlayerDialogEx(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, ""#COLOR_TITLE_DIALOG"Login", Dialog, "Entrar", "Sair");
- }
- case MENU_LOGIN_REGISTER:
- {
- format(Dialog, sizeof(Dialog), ""#COLORT_WHITE"Bem-vindo "#COLORT_YELLOW"%s!\n\n"#COLORT_WHITE"Vejo que você não tem uma conta, vamos criar uma?", Player[playerid][pName]);
- showPlayerDialogEx(playerid, DIALOG_REGISTER, DIALOG_STYLE_MSGBOX, ""#COLOR_TITLE_DIALOG"Registro", Dialog, "Sim", "Não");
- }
- case MENU_LOGIN_REGISTER_STAGE_1:
- {
- format(String, sizeof(String), "%s\n\n", message);
- format(Dialog, sizeof(Dialog), "%s"COLORT_WHITE"Para começar, digite uma senha de 6 à 30 dígitos:", (isnull(message) ? "" : String));
- showPlayerDialogEx(playerid, DIALOG_REGISTER+1, DIALOG_STYLE_PASSWORD, ""#COLOR_TITLE_DIALOG"Registro [1/3]", Dialog, "Prosseguir", "Sair");
- }
- case MENU_LOGIN_REGISTER_STAGE_2:
- {
- format(String, sizeof(String), "%s\n\n", message);
- format(Dialog, sizeof(Dialog), "%s"COLORT_WHITE"Agora para confirmar, digite novamente a senha escolhida:", (isnull(message) ? "" : String));
- showPlayerDialogEx(playerid, DIALOG_REGISTER+2, DIALOG_STYLE_PASSWORD, ""#COLOR_TITLE_DIALOG"Registro [2/3]", Dialog, "Prosseguir", "Voltar");
- }
- case MENU_LOGIN_REGISTER_STAGE_3:
- {
- format(String, sizeof(String), "%s\n\n", message);
- format(Dialog, sizeof(Dialog), "%s"COLORT_WHITE"Para terminar, digite um e-mail válido:", (isnull(message) ? "" : String));
- showPlayerDialogEx(playerid, DIALOG_REGISTER+3, DIALOG_STYLE_INPUT, ""#COLOR_TITLE_DIALOG"Registro [3/3]", Dialog, "Concluir", "Voltar");
- }
- }
- return true;
- }
- stock clearPlayerVars(playerid)
- {
- // Data
- Player[playerid][pName][0] = EOS;
- Player[playerid][pAccountID] = 0;
- Player[playerid][pPassword][0] = EOS;
- Player[playerid][pEmail][0] = EOS;
- Player[playerid][pRegisterDate] = 0;
- Player[playerid][pLastLogin] = 0;
- // Non-data
- Player[playerid][pKicked] = false;
- Player[playerid][pDialogID] = 0;
- Player[playerid][pLogged] = false;
- Player[playerid][pMaxLoginAttempts] = 0;
- // Registro
- Player[playerid][registerPassword][0] = EOS;
- }
- // --> Utilidades
- stock sendClientMessageToAllEx(color, const str[], va_args<>)
- {
- va_format(String, 144, str, va_start<2>);
- return SendClientMessageToAll(color, String);
- }
- stock sendClientMessageEx(playerid, color, const str[], va_args<>)
- {
- va_format(String, 144, str, va_start<3>);
- return SendClientMessage(playerid, color, String);
- }
- stock showPlayerDialogEx(playerid, dialogid, style, caption[], info[], button1[], button2[])
- {
- Player[playerid][pDialogID] = dialogid;
- ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
- return dialogid;
- }
- stock kickEx(playerid)
- {
- if(Player[playerid][pKicked])
- return false;
- Player[playerid][pKicked] = true;
- SetTimerEx("KickTimer", 200, false, "d", playerid);
- return true;
- }
- stock isValidPassword(password[])
- {
- if(30 < strlen(password) || strlen(password) < 6)
- return false;
- return true;
- }
- stock SQL_verifyEmail(email[]) // Checar se o email já é usado, true = sim, false = não
- {
- static Cache:result, exists;
- mysql_format(MySQL_Connection, Query, sizeof(Query), "SELECT * FROM `players` WHERE `Email` = '%e'", email);
- result = mysql_query(MySQL_Connection, Query, true);
- exists = !!cache_num_rows();
- cache_delete(result);
- return exists;
- }
- stock isValidEmail(email[])
- {
- static const ValidEmails[17][16] = {
- {"@gmail.com"},
- {"@hotmail.com.br"},
- {"@hotmail.com"},
- {"@globo.com"},
- {"@globomail.com"},
- {"@uol.com"},
- {"@outlook.com"},
- {"@live.com"},
- {"@msn.com"},
- {"@yahoo.com.br"},
- {"@ymail.com"},
- {"@rocketmail.com"},
- {"@ig.com.br"},
- {"@pop.com.br"},
- {"@bol.com.br"},
- {"@oi.com.br"},
- {"@r7.com"}
- };
- for(new i; i < sizeof ValidEmails; i++)
- if(strfind(email, ValidEmails[i], false) != -1)
- return true;
- return false;
- }
- stock timestampToDate(datetime, style = 0)
- {
- static tm<timestamp>;
- localtime(Time:datetime, timestamp);
- switch(style)
- {
- case 0: strftime(String, 64, "%d/%m/%Y às %X", timestamp);
- case 1: strftime(String, 64, "%d/%m/%Y", timestamp);
- }
- return String;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement