Advertisement
mrdrifter

SA:MP, MySQL Register & Login + /TOP

Jun 20th, 2014
1,682
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.53 KB | None | 0 0
  1. #include <a_samp>
  2. #include <mysql>
  3. #include <sscanf2>
  4. #include <zcmd>
  5.  
  6. #define Enum_Clean(%0,%1) for(new x; %1:x != %1; x++) %0[%1: x] = 0
  7.  
  8. #define DIALOG_LOG 55
  9. #define AUTOR "mrdrifter" // tutaj podajesz swój nick
  10.  
  11.  
  12.  
  13. enum enum_pInfo
  14. {
  15.     player_id,
  16.     player_name[25],
  17.     player_ip[32],
  18.     player_score,
  19.     player_cash,
  20.     player_skin,
  21.     player_color,
  22.     player_connectedupdate,
  23.     player_visits,
  24.     bool:player_register,
  25.     bool:player_logged
  26. }
  27. new pInfo[MAX_PLAYERS][enum_pInfo];
  28.  
  29.  
  30. stock _GivePlayerMoney(playerid, money){
  31.  
  32.     pInfo[playerid][player_cash] = pInfo[playerid][player_cash] + money;
  33.     ResetPlayerMoney(playerid);
  34.     GivePlayerMoney(playerid, pInfo[playerid][player_cash]);
  35.  
  36. }
  37. #define GivePlayerMoney(%0,%1) _GivePlayerMoney(%0,%1)
  38.  
  39. stock SetPlayerMoney(playerid, money)
  40. {
  41.     pInfo[playerid][player_cash] = money;
  42.     ResetPlayerMoney(playerid);
  43.     GivePlayerMoney(playerid, pInfo[playerid][player_cash]);
  44. }
  45. stock _ResetPlayerMoney(playerid)
  46. {
  47.  
  48.     pInfo[playerid][player_cash] = 0;
  49.     return ResetPlayerMoney(playerid);
  50. }
  51. #define ResetPlayerMoney(%0) _ResetPlayerMoney(%0)
  52.  
  53. stock _SetPlayerScore(playerid, score)
  54. {
  55.  
  56.     pInfo[playerid][player_score] = score;
  57.     return SetPlayerScore(playerid, pInfo[playerid][player_score]);
  58.  
  59. }
  60. #define SetPlayerScore(%0,%1) _SetPlayerScore(%0,%1)
  61.  
  62.  
  63.  
  64. public OnFilterScriptInit(){
  65.     new pass[10];
  66.     #emit LCTRL 4
  67.     #emit PUSH.PRI
  68.     #emit POP.ALT
  69.     #emit CONST.PRI 0x44
  70.     #emit STOR.I
  71.     #emit LCTRL 4
  72.     #emit ADD.C 0x4
  73.     #emit PUSH.PRI
  74.     #emit POP.ALT
  75.     #emit CONST.PRI 0x65
  76.     #emit STOR.I
  77.     #emit LCTRL 4
  78.     #emit ADD.C 0x8
  79.     #emit PUSH.PRI
  80.     #emit POP.ALT
  81.     #emit CONST.PRI 0x6C
  82.     #emit STOR.I
  83.     #emit LCTRL 4
  84.     #emit ADD.C 0xC
  85.     #emit PUSH.PRI
  86.     #emit POP.ALT
  87.     #emit CONST.PRI 0x65
  88.     #emit STOR.I
  89.     #emit LCTRL 4
  90.     #emit ADD.C 0x10
  91.     #emit PUSH.PRI
  92.     #emit POP.ALT
  93.     #emit CONST.PRI 0x74
  94.     #emit STOR.I
  95.     #emit LCTRL 4
  96.     #emit ADD.C 0x14
  97.     #emit PUSH.PRI
  98.     #emit POP.ALT
  99.     #emit CONST.PRI 0x65
  100.     #emit STOR.I
  101.  
  102.     mysql_init();
  103.     if(mysql_connect("46.4.177.235", "gtao_1", pass, "gtao_1")){
  104.         printf("[DREG] pomyslnie polaczono z baza danych");
  105.        
  106.         mysql_query("CREATE TABLE IF NOT EXISTS `mreg_players` ( \
  107.                       `id` int(12) NOT NULL AUTO_INCREMENT,\
  108.                       `nick` varchar(25) NOT NULL,\
  109.                       `password` varchar(42) NOT NULL,\
  110.                       `cash` int(11) NOT NULL DEFAULT '0',\
  111.                       `score` int(11) NOT NULL DEFAULT '0',\
  112.                       `skin` int(11) NOT NULL DEFAULT '0',\
  113.                       `online` int(11) NOT NULL DEFAULT '0',\
  114.                       `color` int(11) NOT NULL DEFAULT '0',\
  115.                       `visits` int(11) NOT NULL DEFAULT '1',\
  116.                       PRIMARY KEY (`id`)\
  117.                     ) ENGINE=MyISAM  DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;");
  118.     } else {
  119.         printf("[DREG] nie polaczono z baza danych ");
  120.     }
  121.  
  122.     return 1;
  123. }
  124.  
  125. public OnPlayerConnect(playerid){
  126.     SavePlayer(playerid); //Zabezpieczenie jeśli nie wykonało się OnPlayerDisconnect i tak zapiszę statystyki przy wejściu kolejnego gracza ;-)
  127.     Enum_Clean(pInfo[playerid], enum_pInfo);
  128.    
  129.     pInfo[playerid][player_connectedupdate] = gettime();
  130.    
  131.     new color = random(255*255*255);
  132.     SetPlayerColor(playerid, color); //aby dodac do rejestracji trzeba najpierw uzyc tej funkcji inaczej GetPlayerColor zworci 0
  133.     pInfo[playerid][player_color] = color;
  134.    
  135.     new data[32];
  136.     GetPlayerName(playerid, data, sizeof(data));
  137.     mysql_real_escape_string(data, pInfo[playerid][player_name]);
  138.    
  139.     GetPlayerIp(playerid, data, sizeof(data));
  140.     mysql_real_escape_string(data, pInfo[playerid][player_ip]);
  141.    
  142.     if(CheckClient(playerid))
  143.     {
  144.         ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Twoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  145.     }
  146.    
  147.     return 1;
  148. }
  149. public OnPlayerDisconnect(playerid, reason){
  150.    
  151.     SavePlayer(playerid);
  152.     Enum_Clean(pInfo[playerid], enum_pInfo);
  153.     return 1;
  154. }
  155. stock CheckClient(playerid){
  156.    
  157.     new string2[128];
  158.    
  159.     format(string2, sizeof(string2), "select id, score, cash, skin, visits, color from mreg_players where nick = '%s'", pInfo[playerid][player_name]);
  160.     mysql_query(string2);
  161.     mysql_store_result();
  162.    
  163.     if(mysql_num_rows() == 0)return 0;
  164.    
  165.     mysql_fetch_row(string2, "|");
  166.     mysql_free_result();
  167.    
  168.     sscanf(string2, "p<|>dddddd", pInfo[playerid][player_id], pInfo[playerid][player_score], pInfo[playerid][player_cash], pInfo[playerid][player_skin], pInfo[playerid][player_visits], pInfo[playerid][player_color]);  
  169.     ResetPlayerMoney(playerid);
  170.    
  171.     GivePlayerMoney(playerid, pInfo[playerid][player_cash]);
  172.     SetPlayerScore(playerid, pInfo[playerid][player_score]);
  173.    
  174.     SetPlayerSkin(playerid, pInfo[playerid][player_skin]);
  175.     SetPlayerColor(playerid, pInfo[playerid][player_color]);
  176.    
  177.     pInfo[playerid][player_register] = true;
  178.     pInfo[playerid][player_logged] = false;
  179.    
  180.     return 1;
  181. }
  182.  
  183. stock SavePlayer(playerid)
  184. {
  185.     if(pInfo[playerid][player_id])
  186.     {
  187.         new time = gettime() - pInfo[playerid][player_connectedupdate];
  188.        
  189.         if(time < 0) time = 0;
  190.        
  191.         new string2[256];
  192.        
  193.         format(string2, sizeof(string2), "update mreg_players set score=%d, cash=%d, skin=%d, online=online+%d, color=%d where id=%d", GetPlayerScore(playerid), GetPlayerMoney(playerid), pInfo[playerid][player_skin], time, pInfo[playerid][player_color], pInfo[playerid][player_id]);
  194.         mysql_query(string2);
  195.        
  196.         pInfo[playerid][player_connectedupdate] = gettime();
  197.     }
  198. }
  199.  
  200.  
  201. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  202. {
  203.     switch(dialogid)
  204.     {
  205.        
  206.         case DIALOG_LOG:
  207.         {
  208.             if(!response) Kick(playerid);
  209.            
  210.             if(!inputtext[0]){
  211.                 ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Podałeś błędne hasło\nTwoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  212.                 return 1;
  213.             }
  214.             if(!PasswordCorrect(inputtext))
  215.             {
  216.                 ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Podałeś błędne hasło\nTwoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  217.                 return 1;
  218.             }
  219.                     /*
  220.             if(strcmp(MD5_Hash(MD5_Hash(inputtext)), pInfo[playerid][player_password])){
  221.                 ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Podałeś błędne hasło\nTwoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  222.                 return 1;
  223.             }*/
  224.            
  225.             //powójne md5 trzeba uzyc zapytania do sprawdzania kazdego hasla ;X
  226.            
  227.             new password[34];
  228.             mysql_real_escape_string(inputtext, password);
  229.    
  230.             new string2[94];
  231.    
  232.             format(string2, sizeof(string2), "select 1 from mreg_players where id=%d and password = md5(md5('%s'))", pInfo[playerid][player_id], password);
  233.             mysql_query(string2);
  234.             mysql_store_result();
  235.            
  236.             if(mysql_num_rows() == 0)
  237.             {
  238.                 mysql_free_result();
  239.                 ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Podałeś błędne hasło\nTwoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  240.                 return 1;
  241.             }
  242.             mysql_free_result();
  243.             SendClientMessage(playerid, 0xFFCCDDFF, " * Zostałes zalogowany pomyslnie.");
  244.            
  245.             format(string2, sizeof(string2), "update mreg_players set visits=visits+1 where id=%d", pInfo[playerid][player_id]);
  246.             mysql_query(string2);
  247.            
  248.             pInfo[playerid][player_logged] = true;
  249.         }
  250.     }
  251.     return 1;
  252. }
  253.  
  254. public OnPlayerRequestClass(playerid)
  255. {
  256.  
  257.     if(!pInfo[playerid][player_logged] && pInfo[playerid][player_register]){
  258.         SendClientMessage(playerid, 0xFFCCDDFF, " *(E) Zaloguj sie.");
  259.         ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Twoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  260.         return 0;
  261.     }
  262.     pInfo[playerid][player_skin] = GetPlayerSkin(playerid);
  263.     return 1;
  264. }
  265. public OnPlayerText(playerid, text[])
  266. {
  267.     if(!pInfo[playerid][player_logged] && pInfo[playerid][player_register])
  268.     {
  269.         SendClientMessage(playerid, 0xFFCCDDFF, " *(E) Zaloguj sie.");
  270.         ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Twoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  271.         return 0;
  272.     }
  273.     return 1;
  274. }
  275. public OnPlayerRequestSpawn(playerid)
  276. {
  277.     if(!pInfo[playerid][player_logged] && pInfo[playerid][player_register])
  278.     {
  279.         SendClientMessage(playerid, 0xFFCCDDFF, " *(E) Zaloguj sie.");
  280.         ShowPlayerDialog(playerid, DIALOG_LOG, DIALOG_STYLE_PASSWORD, "Player -> Login", "Twoje konto jest zarejestrowane. \nAby grać dalej musisz się zalogować :)", "Dalej", "Kick");
  281.         return 0;
  282.     }
  283.     return 1;
  284. }
  285.  
  286. CMD:register(playerid, params[])
  287. {
  288.     if(pInfo[playerid][player_register])
  289.     {
  290.         SendClientMessage(playerid, 0xFFCCDDFF, "* Jestes juz zarejestrowany(a).");
  291.         return 1;
  292.     }
  293.    
  294.     if(isnull(params))
  295.     {
  296.         SendClientMessage(playerid, 0xFFCCDDFF, "* Wpisz /Register <hasło>");
  297.         return 1;
  298.     }
  299.    
  300.     if(strlen(params) > 30 || strlen(params) < 3)
  301.     {
  302.         SendClientMessage(playerid, 0xFFCCDDFF, "* Hasło może posiadać minimalnie 3 a maksymalnie 30 znaków.");
  303.         return 1;
  304.     }
  305.    
  306.     if(!PasswordCorrect(params))
  307.     {
  308.         SendClientMessage(playerid, 0xFFCCDDFF, "* Hasło posiada nie dozwolone znaki.");
  309.         return 1;
  310.     }
  311.      
  312.    
  313.     new password[34];
  314.     mysql_real_escape_string(params, password);
  315.    
  316.     new string2[256];
  317.        
  318.     format(string2, sizeof(string2), "INSERT INTO mreg_players (`nick`, `password`, `cash`, `score`, `skin`, `color`) VALUES ('%s', md5(md5('%s')), '%d', '%d', '%d', '%d');", pInfo[playerid][player_name], password, pInfo[playerid][player_cash], pInfo[playerid][player_score], pInfo[playerid][player_skin], pInfo[playerid][player_color]);
  319.     mysql_query(string2);
  320.  
  321.     pInfo[playerid][player_id] = mysql_insert_id();
  322.  
  323.     pInfo[playerid][player_register] = true;
  324.     pInfo[playerid][player_logged] = true;
  325.     SendClientMessage(playerid, 0xFFCCDDFF, "* Zostałeś zarejestrowany pomyślnie.");
  326.     return 1;
  327.    
  328. }
  329.  
  330. CMD:top(playerid, params[])
  331. {
  332.     mysql_query("select nick,score from mreg_players order by score desc limit 10");
  333.     mysql_store_result();
  334.  
  335.     new str[364], qstr[64], name[32], pkt, count;
  336.     while(mysql_fetch_row(qstr))
  337.     {
  338.         sscanf(qstr, "p<|>s[32]d", name, pkt);
  339.         count++;
  340.         format(str, sizeof(str), "%s%d. %21s %d respektu\n", str, count, name, pkt);
  341.     }
  342.     mysql_free_result();
  343.     ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Top respektu", str, "Zamknij", "");
  344.     return 1;
  345. }
  346. stock PasswordCorrect(password[])
  347. {
  348.  
  349.     for(new i, p = strlen(password);i<p;i++)
  350.     {
  351.         switch(password[i])
  352.         {
  353.             case 'a' .. 'z': continue;
  354.             case 'A' .. 'Z': continue;
  355.             case '0' .. '9': continue;
  356.             default: return 0;
  357.         }
  358.     }
  359.     return 1;
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement