Advertisement
Xolokos

XSQLREGISTER

Aug 7th, 2013
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 8.43 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.     new IP[16], Float:POS[3];
  96.     GetPlayerIp(PLAYID, IP, sizeof(IP));
  97.     GetPlayerPos(PLAYID, POS[0], POS[1], POS[2]);
  98.    
  99.     UPDATESQL("UPDATE `"SQL_TABLE"` SET");
  100.  
  101.     UPDATEVARCHAR("IP", IP, false); // UPDATEVARCHAR("NOMDELACOLONE", VARIABLE A ATTRIBUER, DERNIERE VARIABLE ( true/false).
  102.     UPDATEVARINT("SKINS", GetPlayerSkin(PLAYID), false);
  103.     UPDATEVARINT("SCORE", GetPlayerScore(PLAYID), false);
  104.    
  105.     UPDATEVARINT("PX", floatround(POS[0]), false); // Arrondie de la position.
  106.     UPDATEVARINT("PY", floatround(POS[1]), false); // Arrondie de la position.
  107.     UPDATEVARINT("PZ", floatround(POS[2]), false); // Arrondie de la position.
  108.  
  109.     ISCONNECTED[PLAYID] = false;
  110.     UPDATEVARINT("CONNECTED", 0, true); // C'est la dernière variable donc true.
  111.     UPDATEWHERE(PLAYID); // Mettre a jour WHERE le NOM = 'nomjoueur'.
  112.     SENDQUERY(); // Envoyer a requête et liberer ACCOUNTUPDATE.
  113.     return 1;
  114. }
  115.  
  116. stock LOGIN(PLAYID)
  117. {
  118.     new QUERY[1024], NOM[MAX_PLAYER_NAME], SAVS[20];
  119.     GetPlayerName(PLAYID, NOM, sizeof(NOM));
  120.  
  121.     format(QUERY, sizeof(QUERY), "SELECT * FROM `"SQL_TABLE"` WHERE `NOM` = '%s'", NOM);
  122.  
  123.     mysql_query(QUERY);
  124.     mysql_store_result();
  125.  
  126.     while(mysql_fetch_row_format(QUERY, "|"))
  127.     {
  128.         mysql_fetch_field_row(SAVS, "SKINS"); SKINS[PLAYID] = strval(SAVS);
  129.         mysql_fetch_field_row(SAVS, "SCORE"); SetPlayerScore(PLAYID, strval(SAVS));
  130.         mysql_fetch_field_row(SAVS, "PX"); POSITIONS[0] = strval(SAVS);
  131.         mysql_fetch_field_row(SAVS, "PY"); POSITIONS[1] = strval(SAVS);
  132.         mysql_fetch_field_row(SAVS, "PZ"); POSITIONS[2] = strval(SAVS);
  133.     }
  134.     mysql_free_result();
  135.  
  136.     new SCDQUERY[128];
  137.     format(SCDQUERY, sizeof(SCDQUERY), "UPDATE `"SQL_TABLE"` SET `CONNECTED` = '1' WHERE `NOM` = '%s'", NOM);
  138.     mysql_query(SCDQUERY);
  139.    
  140.     ISCONNECTED[PLAYID] = true;
  141.     TogglePlayerSpectating(PLAYID, false);
  142.     return 1;
  143. }
  144.  
  145.  
  146. /**/
  147.  
  148. public OnFilterScriptInit()
  149. {
  150.     mysql_connect(SQL_HOTE, SQL_UTILISATEUR, SQL_DATABASE, SQL_MOTDEPASSE);
  151.     mysql_debug(true);
  152.  
  153.     if(!mysql_ping())
  154.     {
  155.         print(" [UNE ERREUR EST SURVENUE LORS DE LA CONNEXION A LA BASE DE DONNEE OU AU SERVEUR]");
  156.         print(" [VERIFIEZ LES PARAMETRES DE CONNEXION A LA DB, USER, LA TABLE AVANT DE RELANCER]");
  157.         print(" [VERIFIEZ QUE LE PORT LISTEN SOIT LIBRE ( 80 PAR DEFAULT )]");
  158.     }
  159.     else
  160.     {
  161.         print(" [CONNEXION AU SERVEUR SQL EFFECTUE]");
  162.         print(" [X-SQL-REGISTER PAR XOLOKOS]");
  163.     }
  164.    
  165.     // CHAR caractères simple abcd...
  166.     // VARCHAR caractères simple et numéro abc123...
  167.     // INT nombres simple 123456...
  168.     // FLOAT nombres a virgules 1,5454 positions sur la map vie etc.
  169.    
  170.     // Création de la table si elle n'existe pas...
  171.    
  172.     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))");
  173.     return 1;
  174. }
  175.  
  176. public OnFilterScriptExit()
  177. {
  178.     print("[X-SQL-REGISTER]");
  179.     return 1;
  180. }
  181.  
  182. /**/
  183.  
  184. public OnPlayerConnect(playerid)
  185. {
  186.     new QUERY[256], NOM[MAX_PLAYER_NAME];
  187.     GetPlayerName(playerid, NOM, sizeof(NOM));
  188.  
  189.     TogglePlayerSpectating(playerid, true);
  190.  
  191.     format(QUERY, sizeof(QUERY), "SELECT NOM FROM `"SQL_TABLE"` WHERE NOM = '%s'", NOM);
  192.     mysql_query(QUERY);
  193.     mysql_store_result();
  194.  
  195.     new ROWS = mysql_num_rows();
  196.  
  197.     if(!ROWS)
  198.     {
  199.         ShowPlayerDialog(playerid, DIALOGREGISTER, DIALOG_STYLE_PASSWORD, "{FF0000}[XSQLREGISTER]", ENREGISTREMENTMSG, "ENREGISTRER", "");
  200.         mysql_free_result();
  201.     }
  202.     else if(ROWS == 1)
  203.     {
  204.         ShowPlayerDialog(playerid, DIALOGLOGIN, DIALOG_STYLE_PASSWORD, "{FF0000}[XSQLREGISTER]", CONNEXIONMSG, "CONNEXION", "");
  205.         mysql_free_result();
  206.     }
  207.     else if(ROWS > 1)
  208.     {
  209.         ShowPlayerDialog(playerid, DIALOGLOGIN+3, DIALOG_STYLE_PASSWORD, "{FF0000}[XSQLREGISTER]","{FF0000}\nERREUR CODE = 10, PLUSIEURS COMPTE A CE NOM.\n", "", "");
  210.         mysql_free_result();
  211.     }
  212.     return 1;
  213. }
  214.  
  215. public OnPlayerSpawn(playerid)
  216. {
  217.     SetPlayerSkin(playerid, SKINS[playerid]);
  218.     if(POSITIONS[0] != 0 && POSITIONS[1] != 0 && POSITIONS[2] != 0)
  219.     {
  220.         SetPlayerPos(playerid, POSITIONS[0], POSITIONS[1], POSITIONS[2]);
  221.     }
  222.     return 1;
  223. }
  224.  
  225. public OnPlayerDisconnect(playerid, reason)
  226. {
  227.     DISCONNECT(playerid);
  228.     return 1;
  229. }
  230.  
  231. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  232. {
  233.     if (dialogid == DIALOGREGISTER)
  234.     {
  235.         if(!response) return Kick(playerid);
  236.         else if (!strlen(inputtext)) return Kick(playerid);
  237.  
  238.         if(strlen(inputtext))
  239.         {
  240.             new ESCA[100];
  241.             mysql_real_escape_string(inputtext, ESCA);
  242.             ENREGISTREMENT(playerid, inputtext);
  243.             TogglePlayerSpectating(playerid, false);
  244.             return 1;
  245.         }
  246.         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");
  247.         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");
  248.         return 1;
  249.     }
  250.     else if (dialogid == DIALOGLOGIN)
  251.     {
  252.         new QUERY[256], NOM[MAX_PLAYER_NAME], ESCA[100];
  253.         GetPlayerName(playerid, NOM, sizeof(NOM));
  254.  
  255.         if(!response) return Kick(playerid);
  256.         else if (!strlen(inputtext)) return Kick(playerid);
  257.         else if (strlen(inputtext) <= 0) return Kick(playerid);
  258.  
  259.         mysql_real_escape_string(inputtext, ESCA);
  260.         format(QUERY, sizeof(QUERY), "SELECT `NOM` FROM `"SQL_TABLE"` WHERE NOM = '%s' AND MDP = '%s'", NOM, ESCA);
  261.         mysql_query(QUERY);
  262.         mysql_store_result();
  263.  
  264.         new ROWS = mysql_num_rows();
  265.        
  266.         if(ROWS == 1)
  267.         {
  268.             LOGIN(playerid);
  269.             mysql_free_result();
  270.         }
  271.         else if(ROWS > 1)
  272.         {
  273.             ShowPlayerDialog(playerid, DIALOGLOGIN, DIALOG_STYLE_PASSWORD , "{FF0000}[XSQLREGISTER]","{FF0000}ERREUR CODE = 10, PLUSIEURS COMPTE A CE NOM.", "", "KICK");
  274.             mysql_free_result();
  275.         }
  276.         else if(!ROWS)
  277.         {
  278.             ShowPlayerDialog(playerid, DIALOGLOGIN, DIALOG_STYLE_PASSWORD , "{FF0000}[XSQLREGISTER]","{FF0000}ERREUR CODE = 0, MOT DE PASSE INCORRECT.", "CONNEXION", "KICK");
  279.             mysql_free_result();
  280.         }
  281.         return 1;
  282.     }
  283.     return 1;
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement