Advertisement
Guest User

easyway.pwn

a guest
May 15th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 27.21 KB | None | 0 0
  1. //-------------------------------------------------------------------//
  2. //**************************** INCLUDES *****************************//
  3. //-------------------------------------------------------------------//
  4.  
  5. #include                                <a_samp>
  6. #include                                <crashdetect>
  7. #include                                <YSI\y_iterate>
  8. #include                                <a_mysql>
  9. #include                                <a_mysql_yinline>
  10. #include                                <CTime>
  11. #include                                <Pawn.CMD>
  12. #include                                <sscanf2>
  13.  
  14. //-------------------------------------------------------------------//
  15. //************************* DEFINIÇÕES ******************************//
  16. //********************* Você pode alterar ***************************//
  17. //-------------------------------------------------------------------//
  18.  
  19. // --> Configurações
  20. #define SERVER_NAME                     ("EasyWay")
  21. #define SERVER_VERSION                  ("0.1")
  22. #define MAX_LOGIN_ATTEMPTS              (3) // --> Máximo de tentativas para acertar a senha
  23. #define MAX_CONNECTIONS_FROM_IP         (3) // --> Máximo de IPs conectados ao mesmo tempo
  24. #define MINUTES_TO_LOGIN                (5) // --> Em minutos, tempo limite para o jogador se logar / registrar.
  25.  
  26. // --> Mensagens
  27. #define MSG_CMD_WITHOUT_PERMISSION      "Você não tem permissão para usar este comando."
  28. #define MSG_PLAYER_OFF                  "Jogador não conectado."
  29.  
  30. // --> Cores
  31. #define COLOR_BLUE                      (0x2641FEFF)
  32. #define COLOR_GREY                      (0xAFAFAFFF)
  33. #define COLOR_LIGHTRED                  (0xFF6347FF)
  34. #define COLOR_LIGHTBLUE                 (0x33CCFFAA)
  35. #define COLOR_LIGHTGREEN                (0x66ff66FF)
  36. #define COLOR_CLIENT                    (0xAAC4E5FF)
  37. #define COLOR_TEAL                      (0x00A180FF)
  38. #define COLOR_ORANGE                    (0xFF9409FF)
  39. #define COLOR_PURPLE                    (0xD0AEEBFF)
  40. #define COLOR_OPENSERV                  (0xFFBD9DFF)
  41. #define COLOR_WHITE                     (0xFFFFFFFF)
  42. #define COLOR_PINK                      (0xFF66FFAA)
  43. #define COLOR_RED                       (0xFF0000AA)
  44. #define COLOR_YELLOW                    (0xFFFF00AA)
  45. #define COLOR_GREEN                     (0x33AA33AA)
  46. #define COLOR_LIGHTBLUE2                (0x99ccffAA)
  47. #define COLOR_BROWN                     (0xA8623EAA)
  48. #define COLOR_LIGHTBROWN                (0xf4ac94AA)
  49. #define COLOR_LIGHTBROWN2               (0xc7a6afAA)
  50.  
  51. // --> Cores para dialogs e afins
  52. #define COLOR_TITLE_DIALOG              "{00a180}"
  53. #define COLORT_GREEN                    "{49ad00}"
  54. #define COLORT_YELLOW                   "{fff600}"
  55. #define COLORT_WHITE                    "{ffffff}"
  56. #define COLORT_LIGHTRED                 "{e44235}"
  57. #define COLORT_ORANGE                   "{ff9409}"
  58. #define COLORT_ORANGE2                  "{f2bb73}"
  59. #define COLORT_GREY                     "{a4a4a4}"
  60.  
  61. //-------------------------------------------------------------------//
  62. //************************ !DEFINIÇÕES! *****************************//
  63. //******************** Cuidado ao alterar ***************************//
  64. //-------------------------------------------------------------------//
  65.  
  66. #define DIALOG_REGISTER                 (1) // até 20
  67. #define DIALOG_LOGIN                    (21) // até 24
  68. #define DIALOG_KICK                     (25)
  69. #define DIALOG_MESSAGE                  (26)
  70. #define DIALOG_UNBAN                    (27)
  71.  
  72. #define sendServerMessage(%0,%1) \
  73.     sendClientMessageEx(%0, COLOR_TEAL, "[SERVER]:{FFFFFF} "%1)
  74.  
  75. #define sendSyntaxMessage(%0,%1) \
  76.     sendClientMessageEx(%0, COLOR_GREY, "[USO CORRETO]:{FFFFFF} "%1)
  77.  
  78. #define sendErrorMessage(%0,%1) \
  79.     sendClientMessageEx(%0, COLOR_LIGHTRED, "[ERRO]:{FFFFFF} "%1)
  80.  
  81. #define sendAdminAction(%0,%1) \
  82.     sendClientMessageEx(%0, COLOR_CLIENT, "[ADMIN]:{FFFFFF} "%1)
  83.  
  84. #define sendWarningMessage(%0,%1) \
  85.     sendClientMessageEx(%0, COLOR_YELLOW, "[AVISO]: "%1)
  86.    
  87. #define MENU_LOGIN_INDEX                (1)
  88. #define MENU_LOGIN_REGISTER             (2)
  89. #define MENU_LOGIN_REGISTER_STAGE_1     (3)
  90. #define MENU_LOGIN_REGISTER_STAGE_2     (4)
  91. #define MENU_LOGIN_REGISTER_STAGE_3     (5)
  92.  
  93. //-------------------------------------------------------------------//
  94. //*************************** VARIÁVEIS *****************************//
  95. //-------------------------------------------------------------------//
  96.  
  97. new Dialog[2048],
  98.     String[1024],
  99.     Query[1024],
  100.     MySQL:MySQL_Connection = MYSQL_INVALID_HANDLE;
  101.  
  102. enum enum_Player
  103. {
  104.     // Data
  105.     ORM:pORM,
  106.     pAccountID,
  107.     pName[24],
  108.     pPassword[65],
  109.     pEmail[64],
  110.     pRegisterDate,
  111.     pLastLogin,
  112.     pAdmin,
  113.  
  114.     // Non-data
  115.     pDialogID,
  116.     bool:pKicked,
  117.     bool:pLogged,
  118.     pMaxLoginAttempts,
  119.     pTimerPlayer,
  120.     pIP[64],
  121.     pTimeToLogin,
  122.    
  123.     // Registro
  124.     registerPassword[30]
  125. }
  126.  
  127. new Player[MAX_PLAYERS][enum_Player];
  128.  
  129. //-------------------------------------------------------------------//
  130. //**************************** FORWARDS *****************************//
  131. //-------------------------------------------------------------------//
  132.  
  133. forward KickTimer(playerid);
  134. forward OnPlayerDataLoaded(playerid);
  135. forward OnPlayerRegister(playerid);
  136. forward OnPlayerUpdateEx(playerid);
  137. forward TimerOneMinute();
  138.  
  139. //-------------------------------------------------------------------//
  140.  
  141. main()
  142. {
  143.     print("\n----------------------------------");
  144.     printf("%s [v%s]", SERVER_NAME, SERVER_VERSION);
  145.     print("----------------------------------\n");
  146. }
  147.  
  148. public OnGameModeInit()
  149. {
  150.     print("[MySQL] Estabelecendo conexão com o servidor..");
  151.  
  152.     MySQL_Connection = mysql_connect_file("mysql_connection.ini");
  153.     mysql_log(ALL);
  154.    
  155.     if(MySQL_Connection == MYSQL_INVALID_HANDLE)
  156.     {
  157.         print("[MySQL] Não foi possível realizar a conexão, desligando servidor..");
  158.         SendRconCommand("exit");
  159.     }
  160.     else
  161.         print("[MySQL] Conexão estabelecida com sucesso.");
  162.  
  163.     format(String, sizeof(String), "%s [v%s]", SERVER_NAME, SERVER_VERSION);
  164.     SetGameModeText(String);
  165.    
  166.     SetTimer("TimerOneMinute", 1000*60, true);
  167.  
  168.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  169.     return 1;
  170. }
  171.  
  172. public OnGameModeExit()
  173. {
  174.     mysql_close(MySQL_Connection);
  175.     return 1;
  176. }
  177.  
  178. public OnPlayerConnect(playerid)
  179. {
  180.     static connecting_ip[64];
  181.     GetPlayerIp(playerid, connecting_ip, 64);
  182.    
  183.     if(getNumberOfPlayersOnThisIP(connecting_ip) > MAX_CONNECTIONS_FROM_IP)
  184.         return Kick(playerid);
  185.  
  186.     if(!IsPlayerNPC(playerid))
  187.     {
  188.         SetSpawnInfo(playerid, 0, 23, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  189.         clearPlayerVars(playerid);
  190.         loadPlayer(playerid);
  191.  
  192.         Player[playerid][pTimerPlayer] = SetTimerEx("OnPlayerUpdateEx", 1000, true, "i", playerid);
  193.     }
  194.     return 1;
  195. }
  196.  
  197. public OnPlayerRequestClass(playerid, classid)
  198. {
  199.     if(!IsPlayerNPC(playerid))
  200.     {
  201.         TogglePlayerSpectating(playerid, true);
  202.         InterpolateCameraPos(playerid, 1350.289306, -1399.634887, 39.952976, 1346.096069, -989.852233, 74.761276, 1000*40);
  203.         InterpolateCameraLookAt(playerid, 1350.505981, -1394.746826, 38.923583, 1348.108398, -985.276794, 74.885650, 1000*40);
  204.  
  205.         orm_setkey(Player[playerid][pORM], "Name");
  206.         orm_select(Player[playerid][pORM], "OnPlayerDataLoaded", "d", playerid);
  207.     }
  208.     return 1;
  209. }
  210.  
  211.  
  212. public OnPlayerDataLoaded(playerid)
  213. {
  214.     orm_setkey(Player[playerid][pORM], "ID");
  215.  
  216.     switch(orm_errno(Player[playerid][pORM]))
  217.     {
  218.         case ERROR_INVALID:
  219.         {
  220.             sendServerMessage(playerid, "Ocorreu algum problema, entre novamente..");
  221.             kickEx(playerid);
  222.         }
  223.         case ERROR_OK: showLoginMenu(playerid, MENU_LOGIN_INDEX);
  224.         case ERROR_NO_DATA: showLoginMenu(playerid, MENU_LOGIN_REGISTER);
  225.     }
  226.    
  227.     mysql_format(MySQL_Connection, Query, sizeof(Query), "SELECT * FROM `banlist` WHERE (`AccountID` = '%d' OR `IP` = '%e') LIMIT 1", Player[playerid][pAccountID], Player[playerid][pIP]);
  228.     inline OnPlayerBanned()
  229.     {
  230.         if(cache_num_rows()) // --> Checar se existe algum resultado
  231.         {
  232.             static IP[64], bannedBy[24], reason[30], date, banTime, banID;
  233.  
  234.             cache_get_value_name_int(0, "Date", date);
  235.             cache_get_value_name_int(0, "BanTime", banTime);
  236.             cache_get_value_name(0, "IP", IP);
  237.             cache_get_value_name(0, "BannedBy", bannedBy);
  238.             cache_get_value_name(0, "Reason", reason);
  239.             cache_get_value_name_int(0, "BanID", banID);
  240.            
  241.             if(banTime > gettime())
  242.             {
  243.                 // --> Ainda está banido
  244.                 Dialog[0] = EOS;
  245.                
  246.                 format(Dialog, sizeof(Dialog),
  247.                 ""#COLORT_YELLOW"Você está banido!\n\n\
  248.                 "#COLORT_WHITE"Nick: "#COLORT_GREY"%s\n\
  249.                 "#COLORT_WHITE"IP: "#COLORT_GREY"%s\n\
  250.                 "#COLORT_WHITE"Banido pelo Administrador: "#COLORT_GREY"%s\n\
  251.                 "#COLORT_WHITE"Motivo: "#COLORT_GREY"%s\n\
  252.                 "#COLORT_WHITE"Ocorrido em: "#COLORT_GREY"%s\n\
  253.                 "#COLORT_WHITE"Banido até "#COLORT_GREY"%s",
  254.                 Player[playerid][pName], IP, bannedBy, reason, timestampToDate(date), timestampToDate(banTime));
  255.                
  256.                 showPlayerDialogEx(playerid, DIALOG_KICK, DIALOG_STYLE_MSGBOX, ""#COLOR_TITLE_DIALOG"Banido", Dialog, "Fechar", "");
  257.                 kickEx(playerid);
  258.             }
  259.             else
  260.             {
  261.                 // --> Banimento chegou ao fim
  262.                 format(Query, sizeof(Query), "DELETE FROM `banlist` WHERE `BanID` = '%d'", banID);
  263.                 mysql_tquery(MySQL_Connection, Query);
  264.             }
  265.         }
  266.     }
  267.     mysql_tquery_inline(MySQL_Connection, Query, using inline OnPlayerBanned);
  268. }
  269.  
  270. public OnPlayerRegister(playerid)
  271. {
  272.     sendServerMessage(playerid, "Conta criada com sucesso! Você foi o %dº a criar uma conta.", Player[playerid][pAccountID]);
  273.     Player[playerid][pLogged] = true;
  274.     TogglePlayerSpectating(playerid, false);
  275. }
  276.  
  277.  
  278. public OnPlayerDisconnect(playerid, reason)
  279. {
  280.    if(!IsPlayerNPC(playerid))
  281.     {
  282.         if(Player[playerid][pTimerPlayer] != 0)
  283.             KillTimer(Player[playerid][pTimerPlayer]);
  284.        
  285.         if(Player[playerid][pLogged])
  286.             orm_update(Player[playerid][pORM]);
  287.  
  288.         orm_destroy(Player[playerid][pORM]);
  289.         clearPlayerVars(playerid);
  290.     }
  291.     return 1;
  292. }
  293.  
  294. public OnPlayerSpawn(playerid)
  295. {
  296.     return 1;
  297. }
  298.  
  299. public OnPlayerDeath(playerid, killerid, reason)
  300. {
  301.     return 1;
  302. }
  303.  
  304. public OnPlayerText(playerid, text[])
  305. {
  306.     return 1;
  307. }
  308.  
  309. public OnPlayerStateChange(playerid, newstate, oldstate)
  310. {
  311.     return 1;
  312. }
  313.  
  314. public OnRconCommand(cmd[])
  315. {
  316.     return 1;
  317. }
  318.  
  319. public OnPlayerRequestSpawn(playerid)
  320. {
  321.    if(!Player[playerid][pLogged])
  322.         return false;
  323.        
  324.     return SpawnPlayer(playerid);
  325. }
  326.  
  327.  
  328. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  329. {
  330.     return 1;
  331. }
  332.  
  333. public OnRconLoginAttempt(ip[], password[], success)
  334. {
  335.     return 1;
  336. }
  337.  
  338. public OnPlayerUpdate(playerid)
  339. {
  340.     return 1;
  341. }
  342.  
  343. public OnPlayerUpdateEx(playerid)
  344. {
  345.     if(!Player[playerid][pLogged])
  346.     {
  347.         Player[playerid][pTimeToLogin]++;
  348.  
  349.         if(Player[playerid][pTimeToLogin] > (MINUTES_TO_LOGIN*60))
  350.         {
  351.             sendWarningMessage(playerid, "Você foi kickado por exceder o limite de tempo sem realizar log-in.");
  352.             kickEx(playerid);
  353.             return true;
  354.         }
  355.     }
  356.    
  357.    return true;
  358. }
  359.  
  360. public TimerOneMinute()
  361. {
  362.     foreach(new i : Player)
  363.     {
  364.         if(!Player[i][pLogged])
  365.             continue;
  366.            
  367.        orm_update(Player[i][pORM]);
  368.     }
  369. }
  370.  
  371. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  372. {
  373.     return 1;
  374. }
  375.  
  376. public KickTimer(playerid)
  377. {
  378.     if(Player[playerid][pKicked])
  379.         return Kick(playerid);
  380.  
  381.     return false;
  382. }
  383.  
  384. public OnPlayerCommandReceived(playerid, cmd[], params[], flags)
  385. {
  386.     if(!Player[playerid][pLogged])
  387.         return false;
  388.        
  389.    return true;
  390. }
  391.  
  392. public OnPlayerCommandPerformed(playerid, cmd[], params[], result, flags)
  393. {
  394.    if(result == -1)
  395.    {
  396.        sendErrorMessage(playerid, "Comando \"/%s\" não existente.", cmd);
  397.         return false;
  398.     }
  399.  
  400.     return true;
  401. }
  402.  
  403.  
  404.  
  405. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  406. {
  407.     if(Player[playerid][pDialogID] != dialogid)
  408.     {
  409.         BOT_setPlayerBan(playerid, 30, "Dialog-Hack");
  410.         sendWarningMessage(playerid, "Você foi kickado por suspeita de utilizar Dialog-Hack.");
  411.         return true;
  412.     }
  413.    
  414.     switch(dialogid)
  415.     {
  416.         case DIALOG_REGISTER:
  417.         {
  418.             if(!response)
  419.             {
  420.                 sendServerMessage(playerid, "Tudo bem, volte quando quiser criar uma conta!");
  421.                 kickEx(playerid);
  422.                 return true;
  423.             }
  424.  
  425.             showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1);
  426.             return true;
  427.         }
  428.         case DIALOG_REGISTER+1:
  429.         {
  430.             if(!response)
  431.             {
  432.                 sendServerMessage(playerid, "Tudo bem, volte quando quiser criar uma conta!");
  433.                 kickEx(playerid);
  434.                 return true;
  435.             }
  436.            
  437.             if(isnull(inputtext))
  438.                 return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1, ""#COLORT_LIGHTRED"Você precisa digitar uma senha!");
  439.  
  440.             if(!isValidPassword(inputtext))
  441.                 return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1, ""#COLORT_LIGHTRED"Senha inválida (somente 6 à 30 dígitos).");
  442.  
  443.             format(Player[playerid][registerPassword], 30, inputtext);
  444.             showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_2);
  445.             return true;
  446.         }
  447.         case DIALOG_REGISTER+2:
  448.         {
  449.             if(!response)
  450.             {
  451.                 Player[playerid][registerPassword][0] = EOS;
  452.                 showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1);
  453.                 return true;
  454.             }
  455.            
  456.             if(isnull(inputtext))
  457.                 return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_2, ""#COLORT_LIGHTRED"Você precisa confirmar sua senha!");
  458.  
  459.             if(!strcmp(Player[playerid][registerPassword], inputtext))
  460.                 showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3);
  461.             else
  462.                 showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_2, ""#COLORT_LIGHTRED"As senhas não combinam!");
  463.            
  464.             return true;
  465.         }
  466.         case DIALOG_REGISTER+3:
  467.         {
  468.             if(!response)
  469.             {
  470.                 Player[playerid][registerPassword][0] = EOS;
  471.                 showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_1);
  472.                 return true;
  473.             }
  474.            
  475.             if(isnull(inputtext))
  476.                 return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3, ""#COLORT_LIGHTRED"Você precisa digitar algum e-mail!");
  477.  
  478.             if(!isValidEmail(inputtext))
  479.                 return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3, ""#COLORT_LIGHTRED"Digite um e-mail válido!");
  480.                
  481.             if(SQL_verifyEmail(inputtext))
  482.                 return showLoginMenu(playerid, MENU_LOGIN_REGISTER_STAGE_3, ""#COLORT_LIGHTRED"Este e-mail já está em uso.");
  483.  
  484.             // --> Registro concluido
  485.            
  486.             SHA256_PassHash(Player[playerid][registerPassword], "EveryBodyHatesCris", Player[playerid][pPassword], 65);
  487.             format(Player[playerid][pEmail], 64, inputtext);
  488.            
  489.             Player[playerid][pRegisterDate] = gettime();
  490.             Player[playerid][pLastLogin] = gettime();
  491.            
  492.             orm_insert(Player[playerid][pORM], "OnPlayerRegister", "d", playerid);
  493.         }
  494.         case DIALOG_LOGIN:
  495.         {
  496.             if(!response)
  497.             {
  498.                 sendServerMessage(playerid, "Volte sempre.");
  499.                 kickEx(playerid);
  500.                 return true;
  501.             }
  502.            
  503.             if(isnull(inputtext))
  504.                 return showLoginMenu(playerid, MENU_LOGIN_INDEX, ""#COLORT_LIGHTRED"Digite sua senha!");
  505.                
  506.             static hash[65];
  507.             SHA256_PassHash(inputtext, "EveryBodyHatesCris", hash, 65);
  508.  
  509.             if(!strcmp(hash, Player[playerid][pPassword]))
  510.             {
  511.                 Player[playerid][pLogged] = true;
  512.  
  513.                 sendServerMessage(playerid, "Logado com suceso!");
  514.                 sendServerMessage(playerid, "Seu último login foi em %s.", timestampToDate(Player[playerid][pLastLogin]));
  515.                
  516.                 Player[playerid][pLastLogin] = gettime();
  517.                
  518.                 TogglePlayerSpectating(playerid, false);
  519.             }
  520.             else
  521.             {
  522.                 Player[playerid][pMaxLoginAttempts]++;
  523.                
  524.                 if(Player[playerid][pMaxLoginAttempts] == MAX_LOGIN_ATTEMPTS)
  525.                 {
  526.                     sendWarningMessage(playerid, "Você foi kickado por excessos de tentativas.");
  527.                     kickEx(playerid);
  528.                 }
  529.                 else showLoginMenu(playerid, MENU_LOGIN_INDEX, ""#COLORT_LIGHTRED"Senha inválida.");
  530.             }
  531.            
  532.             return true;
  533.         }
  534.         case DIALOG_UNBAN:
  535.         {
  536.             if(!response)
  537.             {
  538.                 DeletePVar(playerid, "BanID");
  539.                 DeletePVar(playerid, "params");
  540.                 return true;
  541.             }
  542.  
  543.             static banID, params[64];
  544.             banID = GetPVarInt(playerid, "BanID");
  545.             GetPVarString(playerid, "params", params, sizeof(params));
  546.            
  547.             switch(listitem)
  548.             {
  549.                 case 0: // Unban Account
  550.                 {
  551.                     format(Query, sizeof(Query), "UPDATE `banlist` SET `AccountID` = '-1' WHERE `BanID` = '%d'", banID);
  552.                     mysql_tquery(MySQL_Connection, Query);
  553.                    
  554.                     sendAdminAction(playerid, "Você desbaniu a conta \"%s\".", params);
  555.                 }
  556.                 case 1: // Unban IP
  557.                 {
  558.                     format(Query, sizeof(Query), "UPDATE `banlist` SET `IP` = 'N/A' WHERE `BanID` = '%d'", banID);
  559.                     mysql_tquery(MySQL_Connection, Query);
  560.                    
  561.                     sendAdminAction(playerid, "Você desbaniu o IP \"%s\".", params);
  562.                 }
  563.                 case 2: // Unban all
  564.                 {
  565.                     format(Query, sizeof(Query),"DELETE FROM `banlist` WHERE `BanID` = '%d'", banID);
  566.                     mysql_tquery(MySQL_Connection, Query);
  567.                    
  568.                     sendAdminAction(playerid, "Você desbaniu tudo de \"%s\".", params);
  569.                 }
  570.             }
  571.  
  572.             return true;
  573.         }
  574.     }
  575.  
  576.     return false;
  577. }
  578.  
  579. //-------------------------------------------------------------------//
  580. //*************************** COMANDOS ******************************//
  581. //-------------------------------------------------------------------//
  582.  
  583. CMD:setadmin(playerid, params[])
  584. {
  585.     if(!IsPlayerAdmin(playerid))
  586.         return sendErrorMessage(playerid, MSG_CMD_WITHOUT_PERMISSION);
  587.  
  588.     static id, level;
  589.  
  590.     if(sscanf(params, "ui", id, level))
  591.         return sendSyntaxMessage(playerid, "/setadmin <playerid/nick> <level>");
  592.  
  593.     if(id == INVALID_PLAYER_ID)
  594.         return sendErrorMessage(playerid, MSG_PLAYER_OFF);
  595.  
  596.     if(!(level >= 0 && level <= 5))
  597.         return sendSyntaxMessage(playerid, "/setadmin <playerid/nick> <level 0 a 5>");
  598.  
  599.     Player[id][pAdmin] = level;
  600.  
  601.     sendAdminAction(id, "%s setou você de level %d de Administrador.", Player[playerid][pName], level);
  602.     sendAdminAction(playerid, "Você setou %s de level %d de Administrador.", Player[id][pName], level);
  603.     return true;
  604. }
  605.  
  606. CMD:ban(playerid, params[])
  607. {
  608.     if(Player[playerid][pAdmin] < 1)
  609.         return sendErrorMessage(playerid, MSG_CMD_WITHOUT_PERMISSION);
  610.        
  611.     static id, dias, reason[30];
  612.    
  613.     if(sscanf(params, "uds[30]", id, dias, reason))
  614.         return sendSyntaxMessage(playerid, "/ban <playerid/nick> <dias> <motivo>");
  615.  
  616.     if(id == INVALID_PLAYER_ID)
  617.         return sendErrorMessage(playerid, MSG_PLAYER_OFF);
  618.  
  619.     sendClientMessageToAllEx(COLOR_LIGHTRED, "[ADMIN]: %s foi banido pelo Admin %s por %d dias, motivo: %s", Player[id][pName], Player[playerid][pName], dias, reason);
  620.    
  621.     setPlayerBan(playerid, id, dias, reason);
  622.     return true;
  623. }
  624.  
  625. CMD:unban(playerid, params[])
  626. {
  627.     if(Player[playerid][pAdmin] < 1)
  628.         return sendErrorMessage(playerid, MSG_CMD_WITHOUT_PERMISSION);
  629.        
  630.     if(isnull(params))
  631.         return sendSyntaxMessage(playerid, "/unban <accountid ou ip>");
  632.        
  633.     mysql_format(MySQL_Connection, Query, sizeof(Query), "SELECT * FROM `banlist` WHERE (`AccountID` = '%d' OR `IP` = '%e') LIMIT 1", strval(params), params);
  634.     inline UnbanPlayer(tmp[])
  635.     {
  636.         if(cache_num_rows())
  637.         {
  638.             static banID, accountID, IP[64];
  639.             cache_get_value_name_int(0, "BanID", banID);
  640.             cache_get_value_name_int(0, "AccountID", accountID);
  641.             cache_get_value_name(0, "IP", IP);
  642.            
  643.             SetPVarInt(playerid, "BanID", banID);
  644.             SetPVarString(playerid, "params", tmp);
  645.  
  646.             format(Dialog, sizeof(Dialog), "Desbanir Conta "#COLORT_GREY"[%d]\n"#COLORT_WHITE"Desbanir IP "#COLORT_GREY"[%s]\n"#COLORT_WHITE"Desbanir ambos", accountID, IP);
  647.             showPlayerDialogEx(playerid, DIALOG_UNBAN, DIALOG_STYLE_LIST, ""#COLOR_TITLE_DIALOG"Unban", Dialog, "Selecionar", "Cancelar");
  648.         }
  649.         else sendErrorMessage(playerid, "Não foi possivel encontrar \"%s\" no banco de dados.", params);
  650.     }
  651.     mysql_tquery_inline(MySQL_Connection, Query, using inline UnbanPlayer, "s", params);
  652.     return true;
  653. }
  654.  
  655. //-------------------------------------------------------------------//
  656. //**************************** FUNÇÕES ******************************//
  657. //-------------------------------------------------------------------//
  658.  
  659. // --> Player
  660.  
  661. stock loadPlayer(playerid)
  662. {
  663.     GetPlayerName(playerid, Player[playerid][pName], 24);
  664.     GetPlayerIp(playerid, Player[playerid][pIP], 64);
  665.    
  666.     new ORM:ormid = Player[playerid][pORM] = orm_create("players");
  667.     orm_addvar_int(ormid, Player[playerid][pAccountID], "ID");
  668.     orm_addvar_string(ormid, Player[playerid][pName], 24, "Name");
  669.     orm_addvar_string(ormid, Player[playerid][pPassword], 65, "Password");
  670.     orm_addvar_string(ormid, Player[playerid][pEmail], 64, "Email");
  671.     orm_addvar_int(ormid, Player[playerid][pLastLogin], "LastLogin");
  672.     orm_addvar_int(ormid, Player[playerid][pRegisterDate], "RegisterDate");
  673.     orm_addvar_int(ormid, Player[playerid][pAdmin], "Admin");
  674. }
  675.  
  676. stock showLoginMenu(playerid, menuid, message[] = "")
  677. {
  678.     switch(menuid)
  679.     {
  680.         case MENU_LOGIN_INDEX:
  681.         {
  682.             format(String, sizeof(String), "%s\n\n", message);
  683.             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));
  684.             showPlayerDialogEx(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, ""#COLOR_TITLE_DIALOG"Login", Dialog, "Entrar", "Sair");
  685.         }
  686.         case MENU_LOGIN_REGISTER:
  687.         {
  688.             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]);
  689.             showPlayerDialogEx(playerid, DIALOG_REGISTER, DIALOG_STYLE_MSGBOX, ""#COLOR_TITLE_DIALOG"Registro", Dialog, "Sim", "Não");
  690.         }
  691.         case MENU_LOGIN_REGISTER_STAGE_1:
  692.         {
  693.             format(String, sizeof(String), "%s\n\n", message);
  694.             format(Dialog, sizeof(Dialog), "%s"COLORT_WHITE"Para começar, digite uma senha de 6 à 30 dígitos:", (isnull(message) ? "" : String));
  695.             showPlayerDialogEx(playerid, DIALOG_REGISTER+1, DIALOG_STYLE_PASSWORD, ""#COLOR_TITLE_DIALOG"Registro [1/3]", Dialog, "Prosseguir", "Sair");
  696.         }
  697.         case MENU_LOGIN_REGISTER_STAGE_2:
  698.         {
  699.             format(String, sizeof(String), "%s\n\n", message);
  700.             format(Dialog, sizeof(Dialog), "%s"COLORT_WHITE"Agora para confirmar, digite novamente a senha escolhida:", (isnull(message) ? "" : String));
  701.             showPlayerDialogEx(playerid, DIALOG_REGISTER+2, DIALOG_STYLE_PASSWORD, ""#COLOR_TITLE_DIALOG"Registro [2/3]", Dialog, "Prosseguir", "Voltar");
  702.         }
  703.         case MENU_LOGIN_REGISTER_STAGE_3:
  704.         {
  705.             format(String, sizeof(String), "%s\n\n", message);
  706.             format(Dialog, sizeof(Dialog), "%s"COLORT_WHITE"Para terminar, digite um e-mail válido:", (isnull(message) ? "" : String));
  707.             showPlayerDialogEx(playerid, DIALOG_REGISTER+3, DIALOG_STYLE_INPUT, ""#COLOR_TITLE_DIALOG"Registro [3/3]", Dialog, "Concluir", "Voltar");
  708.         }
  709.     }
  710.     return true;
  711. }
  712.  
  713. stock clearPlayerVars(playerid)
  714. {
  715.     // Data
  716.     Player[playerid][pName][0] = EOS;
  717.     Player[playerid][pAccountID] = 0;
  718.     Player[playerid][pPassword][0] = EOS;
  719.     Player[playerid][pEmail][0] = EOS;
  720.     Player[playerid][pRegisterDate] = 0;
  721.     Player[playerid][pLastLogin] = 0;
  722.  
  723.     // Non-data
  724.     Player[playerid][pKicked] = false;
  725.     Player[playerid][pDialogID] = 0;
  726.     Player[playerid][pLogged] = false;
  727.     Player[playerid][pMaxLoginAttempts] = 0;
  728.     Player[playerid][pIP][0] = EOS;
  729.     Player[playerid][pTimerPlayer] = 0;
  730.     Player[playerid][pTimeToLogin] = 0;
  731.    
  732.     // Registro
  733.     Player[playerid][registerPassword][0] = EOS;
  734. }
  735.  
  736. stock SQL_isPlayerBanned(playerid)
  737. {
  738.     static Cache:result, exists;
  739.  
  740.     mysql_format(MySQL_Connection, Query, sizeof(Query), "SELECT * FROM `banlist` WHERE (`Name` = '%e' OR `IP` = '%e') LIMIT 1", Player[playerid][pName]);
  741.     result = mysql_query(MySQL_Connection, Query, true);
  742.     exists = !!cache_num_rows();
  743.  
  744.     cache_delete(result);
  745.     return exists;
  746. }
  747.  
  748. stock setPlayerBan(adminid, id, days, reason[])
  749. {
  750.     static accountid;
  751.     accountid = Player[id][pAccountID];
  752.    
  753.     if(accountid == 0)
  754.         accountid = -1;
  755.    
  756.     days = gettime()+((60*60*24)*days);
  757.    
  758.     mysql_format(MySQL_Connection, Query, sizeof(Query), "INSERT INTO `banlist`(`AccountID`, `IP`, `Reason`, `Date`, `BannedBy`, `BanTime`) VALUES('%d', '%e', '%e', '%d', '%e', '%d')", accountid, Player[id][pIP], reason, gettime(), Player[adminid][pName], days);
  759.     mysql_tquery(MySQL_Connection, Query);
  760.     return kickEx(id);
  761. }
  762.  
  763. stock BOT_setPlayerBan(id, days, reason[])
  764. {
  765.     static accountid;
  766.     accountid = Player[id][pAccountID];
  767.  
  768.     if(accountid == 0)
  769.         accountid = -1;
  770.  
  771.     days = gettime()+((60*60*24)*days);
  772.  
  773.     mysql_format(MySQL_Connection, Query, sizeof(Query), "INSERT INTO `banlist`(`AccountID`, `IP`, `Reason`, `Date`, `BannedBy`, `BanTime`) VALUES('%d', '%e', '%e', '%d', 'BOT', '%d')", accountid, Player[id][pIP], reason, gettime(), days);
  774.     mysql_tquery(MySQL_Connection, Query);
  775.     return Kick(id);
  776. }
  777.  
  778.  
  779. // --> Utilidades
  780.  
  781. stock sendClientMessageToAllEx(color, const str[], va_args<>)
  782. {
  783.     va_format(String, 144, str, va_start<2>);
  784.     return SendClientMessageToAll(color, String);
  785. }
  786.  
  787. stock sendClientMessageEx(playerid, color, const str[], va_args<>)
  788. {
  789.     va_format(String, 144, str, va_start<3>);
  790.     return SendClientMessage(playerid, color, String);
  791. }
  792.  
  793. stock showPlayerDialogEx(playerid, dialogid, style, caption[], info[], button1[], button2[])
  794. {
  795.     Player[playerid][pDialogID] = dialogid;
  796.     ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
  797.     return dialogid;
  798. }
  799.  
  800. stock kickEx(playerid)
  801. {
  802.     if(Player[playerid][pKicked])
  803.         return false;
  804.  
  805.     Player[playerid][pKicked] = true;
  806.     SetTimerEx("KickTimer", 200, false, "d", playerid);
  807.     return true;
  808. }
  809.  
  810. stock isValidPassword(password[])
  811. {
  812.     if(30 < strlen(password) || strlen(password) < 6)
  813.         return false;
  814.  
  815.     return true;
  816. }
  817.  
  818. stock SQL_verifyEmail(email[]) // Checar se o email já é usado, true = sim, false = não
  819. {
  820.     static Cache:result, exists;
  821.  
  822.     mysql_format(MySQL_Connection, Query, sizeof(Query), "SELECT * FROM `players` WHERE `Email` = '%e' LIMIT 1", email);
  823.     result = mysql_query(MySQL_Connection, Query, true);
  824.     exists = !!cache_num_rows();
  825.  
  826.     cache_delete(result);
  827.     return exists;
  828. }
  829.  
  830. stock isValidEmail(email[])
  831. {
  832.     static const ValidEmails[17][16] = {
  833.     {"@gmail.com"},
  834.     {"@hotmail.com.br"},
  835.     {"@hotmail.com"},
  836.     {"@globo.com"},
  837.     {"@globomail.com"},
  838.     {"@uol.com"},
  839.     {"@outlook.com"},
  840.     {"@live.com"},
  841.     {"@msn.com"},
  842.     {"@yahoo.com.br"},
  843.     {"@ymail.com"},
  844.     {"@rocketmail.com"},
  845.     {"@ig.com.br"},
  846.     {"@pop.com.br"},
  847.     {"@bol.com.br"},
  848.     {"@oi.com.br"},
  849.     {"@r7.com"}
  850.     };
  851.  
  852.     for(new i; i < sizeof ValidEmails; i++)
  853.         if(strfind(email, ValidEmails[i], false) != -1)
  854.             return true;
  855.  
  856.     return false;
  857. }
  858.  
  859. stock timestampToDate(datetime, style = 0)
  860. {
  861.     static tm<timestamp>;
  862.     localtime(Time:datetime, timestamp);
  863.  
  864.     switch(style)
  865.     {
  866.         case 0: strftime(String, 64, "%d/%m/%Y às %X", timestamp);
  867.         case 1: strftime(String, 64, "%d/%m/%Y", timestamp);
  868.     }
  869.     return String;
  870. }
  871.  
  872. stock hideDialog(playerid)
  873.     return showPlayerDialogEx(playerid, -1, DIALOG_STYLE_MSGBOX, " ", " ", " ", " ");
  874.  
  875. stock getNumberOfPlayersOnThisIP(test_ip[]) // --> by maxips.pwn, atualizei para uma versão mais compacta
  876. {
  877.     static against_ip[64], count;
  878.     count = 0;
  879.    
  880.     foreach(new i : Player)
  881.     {
  882.         GetPlayerIp(i, against_ip, 64);
  883.         if(!strcmp(against_ip, test_ip))
  884.             count++;
  885.     }
  886.    
  887.     return count;
  888. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement