Advertisement
Xolokos

XSQLREGISTER

Aug 7th, 2013
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.50 KB | None | 0 0
  1.  
  2. #include <a_samp>
  3. #include <a_mysql>
  4.  
  5. // SQL REGISTER par Xolokos.
  6. // V1.02.
  7.  
  8. #define SQL_HOTE "127.0.0.1" // localhost marche aussi.
  9. #define SQL_UTILISATEUR "root" // root utilisateur par défault de SQL.
  10. #define SQL_MOTDEPASSE "" // Sans mot de passe.
  11. #define SQL_DATABASE "SAMPSERVEUR" // Votre DB.
  12.  
  13. #define SQL_TABLE "COMPTES" // Votre table.
  14.  
  15. /**/
  16.  
  17. new bool:ISCONNECTED[MAX_PLAYERS];
  18.  
  19. new SKINS[MAX_PLAYERS];
  20.  
  21. new Float:POSITIONS[3];
  22.  
  23. /**/
  24.  
  25. #define DIALOGREGISTER 5
  26. #define DIALOGLOGIN 10
  27.  
  28. /**/
  29.  
  30. #define CONNEXIONMSG "{FF0000}\t[XSQLREGISTER]\n{FFFFFF}\nLes nouvelles sont sur le forum et sur notre site.{FF0000}\n\n\t[CHANGELOG]{FFFFFF}\n\n\t- Nouvelles...\n\t- Nouvelles...\n\t- Nouvelles..."
  31. #define ENREGISTREMENTMSG "{FF0000}[XSQLREGISTER]\n{FFFFFF}Bienvenue, enregistrez-vous dans la case ci-dessous."
  32.  
  33. /**/
  34.  
  35. new ACCOUNTUPDATE[1024];
  36.  
  37. /**/
  38.  
  39. stock UPDATESQL(QUERY[])
  40. {
  41.     new UQUERY[256];
  42.     format(UQUERY, sizeof(UQUERY), "%s", QUERY);
  43.     ACCOUNTUPDATE = UQUERY;
  44. }
  45.  
  46. stock UPDATEVARINT(QUERY[], VARIABLE, bool:LAST)
  47. {
  48.     if(!LAST)
  49.     {
  50.         format(ACCOUNTUPDATE, sizeof(ACCOUNTUPDATE), "%s `%s` = '%d',", ACCOUNTUPDATE, QUERY, VARIABLE);
  51.     }
  52.     else format(ACCOUNTUPDATE, sizeof(ACCOUNTUPDATE), "%s `%s` = '%d'", ACCOUNTUPDATE, QUERY, VARIABLE);
  53. }
  54.  
  55. stock UPDATEVARCHAR(QUERY[], VARIABLE[], bool:LAST)
  56. {
  57.     if(!LAST)
  58.     {
  59.         format(ACCOUNTUPDATE, sizeof(ACCOUNTUPDATE), "%s `%s` = '%s',", ACCOUNTUPDATE, QUERY, VARIABLE);
  60.     }
  61.     else format(ACCOUNTUPDATE, sizeof(ACCOUNTUPDATE), "%s `%s` = '%s'", ACCOUNTUPDATE, QUERY, VARIABLE);
  62. }
  63.  
  64. stock UPDATEWHERE(PLAYID)
  65. {
  66.     new NOM[MAX_PLAYER_NAME];
  67.     GetPlayerName(PLAYID, NOM, sizeof(NOM));
  68.     format(ACCOUNTUPDATE, sizeof(ACCOUNTUPDATE), "%s WHERE `NOM` = '%s'", ACCOUNTUPDATE, NOM);
  69. }
  70.  
  71. stock SENDQUERY()
  72. {
  73.     mysql_query(ACCOUNTUPDATE);
  74.     printf("%s", ACCOUNTUPDATE);
  75.     ACCOUNTUPDATE = "";
  76. }
  77.  
  78. /**/
  79.  
  80. stock ENREGISTREMENT(PLAYID, PASS[])
  81. {
  82.     new QUERY[256], NOM[MAX_PLAYER_NAME], IP[16];
  83.     GetPlayerName(PLAYID, NOM, sizeof(NOM));
  84.     GetPlayerIp(PLAYID, IP, sizeof(IP));
  85.  
  86.     ISCONNECTED[PLAYID] = true;
  87.     format(QUERY, sizeof(QUERY), "INSERT INTO `"SQL_TABLE"` (NOM, MDP, IP, SKINS, SCORE, PX, PY, PZ, CONNECTED) VALUES('%s', '%s', '%s', '70', '0', '0', '0', '0', '1')", NOM, PASS, IP);
  88.     mysql_query(QUERY);
  89.  
  90.     return 1;
  91. }
  92.  
  93. stock DISCONNECT(PLAYID)
  94. {
  95.     if(ISCONNECTED[PLAYID])
  96.     {
  97.         new IP[16], Float:POS[3];
  98.         GetPlayerIp(PLAYID, IP, sizeof(IP));
  99.         GetPlayerPos(PLAYID, POS[0], POS[1], POS[2]);
  100.  
  101.         UPDATESQL("UPDATE `"SQL_TABLE"` SET");
  102.  
  103.         UPDATEVARCHAR("IP", IP, false); // UPDATEVARCHAR("NOMDELACOLONE", VARIABLE A ATTRIBUER, DERNIERE VARIABLE ( true/false).
  104.         UPDATEVARINT("SKINS", GetPlayerSkin(PLAYID), false);
  105.         UPDATEVARINT("SCORE", GetPlayerScore(PLAYID), false);
  106.  
  107.         UPDATEVARINT("PX", floatround(POS[0]), false); // Arrondie de la position.
  108.         UPDATEVARINT("PY", floatround(POS[1]), false); // Arrondie de la position.
  109.         UPDATEVARINT("PZ", floatround(POS[2]), false); // Arrondie de la position.
  110.  
  111.         ISCONNECTED[PLAYID] = false;
  112.         UPDATEVARINT("CONNECTED", 0, true); // C'est la dernière variable donc true.
  113.         UPDATEWHERE(PLAYID); // Mettre a jour WHERE le NOM = 'nomjoueur'.
  114.         SENDQUERY(); // Envoyer a requête et liberer ACCOUNTUPDATE.
  115.         return 1;
  116.     }
  117.     return 1;
  118. }
  119.  
  120. stock LOGIN(PLAYID)
  121. {
  122.     new QUERY[1024], NOM[MAX_PLAYER_NAME], SAVS[20];
  123.     GetPlayerName(PLAYID, NOM, sizeof(NOM));
  124.  
  125.     format(QUERY, sizeof(QUERY), "SELECT * FROM `"SQL_TABLE"` WHERE `NOM` = '%s'", NOM);
  126.  
  127.     mysql_query(QUERY);
  128.     mysql_store_result();
  129.  
  130.     while(mysql_fetch_row_format(QUERY, "|"))
  131.     {
  132.         mysql_fetch_field_row(SAVS, "SKINS"); SKINS[PLAYID] = strval(SAVS);
  133.         mysql_fetch_field_row(SAVS, "SCORE"); SetPlayerScore(PLAYID, strval(SAVS));
  134.         mysql_fetch_field_row(SAVS, "PX"); POSITIONS[0] = strval(SAVS);
  135.         mysql_fetch_field_row(SAVS, "PY"); POSITIONS[1] = strval(SAVS);
  136.         mysql_fetch_field_row(SAVS, "PZ"); POSITIONS[2] = strval(SAVS);
  137.     }
  138.     mysql_free_result();
  139.  
  140.     new SCDQUERY[128];
  141.     format(SCDQUERY, sizeof(SCDQUERY), "UPDATE `"SQL_TABLE"` SET `CONNECTED` = '1' WHERE `NOM` = '%s'", NOM);
  142.     mysql_query(SCDQUERY);
  143.    
  144.     ISCONNECTED[PLAYID] = true;
  145.     TogglePlayerSpectating(PLAYID, false);
  146.     return 1;
  147. }
  148.  
  149.  
  150. /**/
  151.  
  152. public OnFilterScriptInit()
  153. {
  154.     mysql_connect(SQL_HOTE, SQL_UTILISATEUR, SQL_DATABASE, SQL_MOTDEPASSE);
  155.     mysql_debug(true);
  156.  
  157.     if(!mysql_ping())
  158.     {
  159.         print(" [UNE ERREUR EST SURVENUE LORS DE LA CONNEXION A LA BASE DE DONNEE OU AU SERVEUR]");
  160.         print(" [VERIFIEZ LES PARAMETRES DE CONNEXION A LA DB, USER, LA TABLE AVANT DE RELANCER]");
  161.         print(" [VERIFIEZ QUE LE PORT LISTEN SOIT LIBRE ( 80 PAR DEFAULT )]");
  162.     }
  163.     else
  164.     {
  165.         print(" [CONNEXION AU SERVEUR SQL EFFECTUE]");
  166.         print(" [X-SQL-REGISTER PAR XOLOKOS]");
  167.     }
  168.    
  169.     // CHAR caractères simple abcd...
  170.     // VARCHAR caractères simple et numéro abc123...
  171.     // INT nombres simple 123456...
  172.     // FLOAT nombres a virgules 1,5454 positions sur la map vie etc.
  173.    
  174.     // Création de la table si elle n'existe pas...
  175.    
  176.     mysql_query("CREATE TABLE `"SQL_TABLE"` (`NOM` char(30), `MDP` char(35), `IP` varchar(20), `SKINS` int(2) , `SCORE` int(20) , `PX` int(5), `PY` int(5), `PZ` int(5), `CONNECTED` int(2))");
  177.     return 1;
  178. }
  179.  
  180. public OnFilterScriptExit()
  181. {
  182.     print("[X-SQL-REGISTER]");
  183.     return 1;
  184. }
  185.  
  186. /**/
  187.  
  188. public OnPlayerConnect(playerid)
  189. {
  190.     new QUERY[256], NOM[MAX_PLAYER_NAME];
  191.     GetPlayerName(playerid, NOM, sizeof(NOM));
  192.  
  193.     TogglePlayerSpectating(playerid, true);
  194.  
  195.     format(QUERY, sizeof(QUERY), "SELECT NOM FROM `"SQL_TABLE"` WHERE NOM = '%s'", NOM);
  196.     mysql_query(QUERY);
  197.     mysql_store_result();
  198.  
  199.     new ROWS = mysql_num_rows();
  200.  
  201.     if(!ROWS)
  202.     {
  203.         ShowPlayerDialog(playerid, DIALOGREGISTER, DIALOG_STYLE_PASSWORD, "{FF0000}[XSQLREGISTER]", ENREGISTREMENTMSG, "ENREGISTRER", "");
  204.         mysql_free_result();
  205.     }
  206.     else if(ROWS == 1)
  207.     {
  208.         ShowPlayerDialog(playerid, DIALOGLOGIN, DIALOG_STYLE_PASSWORD, "{FF0000}[XSQLREGISTER]", CONNEXIONMSG, "CONNEXION", "");
  209.         mysql_free_result();
  210.     }
  211.     else if(ROWS > 1)
  212.     {
  213.         ShowPlayerDialog(playerid, DIALOGLOGIN+3, DIALOG_STYLE_PASSWORD, "{FF0000}[XSQLREGISTER]","{FF0000}\nERREUR CODE = 10, PLUSIEURS COMPTE A CE NOM.\n", "", "");
  214.         mysql_free_result();
  215.     }
  216.     return 1;
  217. }
  218.  
  219. public OnPlayerSpawn(playerid)
  220. {
  221.     SetPlayerSkin(playerid, SKINS[playerid]);
  222.     if(POSITIONS[0] != 0 && POSITIONS[1] != 0 && POSITIONS[2] != 0)
  223.     {
  224.         SetPlayerPos(playerid, POSITIONS[0], POSITIONS[1], POSITIONS[2]);
  225.     }
  226.     return 1;
  227. }
  228.  
  229. public OnPlayerDisconnect(playerid, reason)
  230. {
  231.     DISCONNECT(playerid);
  232.     return 1;
  233. }
  234.  
  235. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  236. {
  237.     if (dialogid == DIALOGREGISTER)
  238.     {
  239.         if(!response) return Kick(playerid);
  240.         else if (!strlen(inputtext)) return Kick(playerid);
  241.  
  242.         if(strlen(inputtext))
  243.         {
  244.             new ESCA[100];
  245.             mysql_real_escape_string(inputtext, ESCA);
  246.             ENREGISTREMENT(playerid, inputtext);
  247.             TogglePlayerSpectating(playerid, false);
  248.             return 1;
  249.         }
  250.         else if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOGREGISTER, DIALOG_STYLE_PASSWORD , "{FF0000}[XSQLREGISTER]","{FF0000}ERREUR CODE = 1, MOT DE PASSE TROP COURT (5MIN).", "ENREGISTREMENT", "KICK");
  251.         else if(strlen(inputtext) > 20) return ShowPlayerDialog(playerid, DIALOGREGISTER, DIALOG_STYLE_PASSWORD , "{FF0000}[XSQLREGISTER]","{FF0000}ERREUR CODE = 2, MOT DE PASSE TROP LONG (20MAX).", "ENREGISTREMENT", "KICK");
  252.         return 1;
  253.     }
  254.     else if (dialogid == DIALOGLOGIN)
  255.     {
  256.         new QUERY[256], NOM[MAX_PLAYER_NAME], ESCA[100];
  257.         GetPlayerName(playerid, NOM, sizeof(NOM));
  258.  
  259.         if(!response) return Kick(playerid);
  260.         else if (!strlen(inputtext)) return Kick(playerid);
  261.         else if (strlen(inputtext) <= 0) return Kick(playerid);
  262.  
  263.         mysql_real_escape_string(inputtext, ESCA);
  264.         format(QUERY, sizeof(QUERY), "SELECT `NOM` FROM `"SQL_TABLE"` WHERE NOM = '%s' AND MDP = '%s'", NOM, ESCA);
  265.         mysql_query(QUERY);
  266.         mysql_store_result();
  267.  
  268.         new ROWS = mysql_num_rows();
  269.        
  270.         if(ROWS == 1)
  271.         {
  272.             LOGIN(playerid);
  273.             mysql_free_result();
  274.         }
  275.         else if(ROWS > 1)
  276.         {
  277.             ShowPlayerDialog(playerid, DIALOGLOGIN, DIALOG_STYLE_PASSWORD , "{FF0000}[XSQLREGISTER]","{FF0000}ERREUR CODE = 10, PLUSIEURS COMPTE A CE NOM.", "", "KICK");
  278.             mysql_free_result();
  279.         }
  280.         else if(!ROWS)
  281.         {
  282.             ShowPlayerDialog(playerid, DIALOGLOGIN, DIALOG_STYLE_PASSWORD , "{FF0000}[XSQLREGISTER]","{FF0000}ERREUR CODE = 0, MOT DE PASSE INCORRECT.", "CONNEXION", "KICK");
  283.             mysql_free_result();
  284.         }
  285.         return 1;
  286.     }
  287.     return 1;
  288. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement