Advertisement
Guest User

mysql_gamemode.pwn

a guest
Mar 28th, 2013
569
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.57 KB | None | 0 0
  1. /* MySQL R7/8 Gamemode by Tommyx3
  2.  *
  3.  * Datenbank Struktur:
  4.  
  5.     DROP TABLE IF EXISTS `accounts`;
  6.     CREATE TABLE `accounts` (
  7.       `ID` int(11) NOT NULL AUTO_INCREMENT,
  8.       `Name` varchar(24) NOT NULL,
  9.       `Password` varchar(130) NOT NULL,
  10.       `Score` int(11) NOT NULL,
  11.       `Money` int(11) NOT NULL,
  12.       PRIMARY KEY (`ID`)
  13.     ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
  14.  */
  15.  
  16. #include <a_samp>
  17. #include <a_mysql>
  18.  
  19. #define MYSQL_HOST  "" // Host
  20. #define MYSQL_USER  "" // Benutzername
  21. #define MYSQL_PASS  "" // Passwort
  22. #define MYSQL_DATA  "" // Datenbank
  23.  
  24. #define DIALOG_REGISTER 0
  25. #define DIALOG_LOGIN    1
  26.  
  27. native WP_Hash(buffer[], len, const str[]);
  28.  
  29. enum pInfo
  30. {
  31.     pID,
  32.     pLoggedin,
  33.     pScore,
  34.     pMoney
  35. }
  36. new PlayerInfo[MAX_PLAYERS][pInfo];
  37. new WrongPassword[MAX_PLAYERS];
  38. main()
  39. {
  40.     print("\n----------------------------------");
  41.     print(" MySQL R7/8 Gamemode by Tommyx3");
  42.     print("----------------------------------\n");
  43. }
  44.  
  45. public OnGameModeInit()
  46. {
  47.     DatabaseConnect();
  48.     // Don't use these lines if it's a filterscript
  49.     SetGameModeText("Blank Script");
  50.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  51.     return 1;
  52. }
  53.  
  54. public OnGameModeExit()
  55. {
  56.     return 1;
  57. }
  58.  
  59. public OnPlayerRequestClass(playerid, classid)
  60. {
  61.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  62.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  63.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  64.     return 1;
  65. }
  66.  
  67. public OnPlayerConnect(playerid)
  68. {
  69.     ResetPlayerVariables(playerid);
  70.     CheckPlayerAccount(playerid);
  71.     return 1;
  72. }
  73.  
  74. public OnPlayerDisconnect(playerid, reason)
  75. {
  76.     if(PlayerInfo[playerid][pLoggedin])
  77.         SavePlayerAccount(playerid);
  78.     return 1;
  79. }
  80.  
  81. public OnPlayerSpawn(playerid)
  82. {
  83.     return 1;
  84. }
  85.  
  86. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  87. {
  88.     switch(dialogid)
  89.     {
  90.         case DIALOG_REGISTER:
  91.         {
  92.             if(!response) Kick(playerid);
  93.             if(strlen(inputtext) > 32 || strlen(inputtext) < 4) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Dein Passwort muss mindestens 4 Zeichen oder darf maximal 32 Zeichen enthalten!\n\nWillkommen auf ... Du hast noch keinen Account, \num dich zu Registrieren gib bitte ein gewünschtes Passwort ein:","Registrieren","Abbrechen");
  94.             new password[129];
  95.             WP_Hash(password, 129, inputtext);
  96.             CreatePlayerAccount(playerid, password);
  97.             CheckPlayerAccount(playerid);
  98.         }
  99.         case DIALOG_LOGIN:
  100.         {
  101.             if(!response) Kick(playerid);
  102.             if(strlen(inputtext) > 32 || strlen(inputtext) < 4) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login","Dein Passwort muss mindestens 4 Zeichen oder darf maximal 32 Zeichen enthalten!\n\nWillkommen auf ...\nDeine Accountdaten wurden gefunden, bitte gib dein Passwort ein:","Login","Abbrechen");
  103.             new password[129], query[128];
  104.             WP_Hash(password, 129, inputtext);
  105.             format(query, sizeof query, "SELECT * FROM `accounts` WHERE `ID` = '%d'", PlayerInfo[playerid][pID]);
  106.             mysql_function_query(1, query, true, "OnPlayerAccountLoad", "is", playerid, password);
  107.         }
  108.     }
  109.     return 1;
  110. }
  111.  
  112. stock ResetPlayerVariables(playerid)
  113. {
  114.     PlayerInfo[playerid][pID] = -1, PlayerInfo[playerid][pLoggedin] = 0,
  115.     PlayerInfo[playerid][pScore] = 0, PlayerInfo[playerid][pMoney] = 0,
  116.     WrongPassword[playerid] = 0;
  117. }
  118.  
  119. stock DatabaseConnect() //By Maddin
  120. {
  121.     mysql_debug(1);
  122.     mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATA, MYSQL_PASS);
  123.     if(mysql_ping() == 1)
  124.     {
  125.         print("[MySQL] Verbindung zur Datenbank wurde erfolgreich hergestellt!");
  126.         return 1;
  127.     }
  128.     else
  129.     {
  130.         print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
  131.         print("[MySQL] Es wird erneut versucht eine Verbindung zur Datenbank herzustellen!");
  132.         mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATA, MYSQL_PASS);
  133.         if(mysql_ping() == 1)
  134.         {
  135.             print("[MySQL] Es konnte im 2 Versuch eine Verbindung hergestellt werden!");
  136.             return 1;
  137.         }
  138.         else
  139.         {
  140.             print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
  141.             print("[MySQL] Der Server wird nun beendet!");
  142.             SendRconCommand("exit");
  143.             return 1;
  144.         }
  145.     }
  146. }
  147.  
  148. stock CheckPlayerAccount(playerid)
  149. {
  150.     new query[128], name[MAX_PLAYER_NAME];
  151.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  152.     mysql_real_escape_string(name, name);
  153.     format(query, sizeof query, "SELECT `ID` FROM `accounts` WHERE `Name` = '%s'", name);
  154.     mysql_function_query(1, query, true, "OnPlayerAccountCheck", "i", playerid);
  155. }
  156.  
  157. forward OnPlayerAccountCheck(playerid);
  158. public OnPlayerAccountCheck(playerid)
  159. {
  160.     if(!IsPlayerConnected(playerid)) return 1;
  161.     new rows, fields, result[5];
  162.     cache_get_data(rows, fields);
  163.     if(rows)
  164.     {
  165.         cache_get_field_content(0, "ID", result);
  166.         PlayerInfo[playerid][pID] = strval(result);
  167.         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login", "Willkommen auf ...\nDeine Accountdaten wurden gefunden, bitte gib dein Passwort ein:","Login","Abbrechen");
  168.     }
  169.     else
  170.     {
  171.         ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrierung", "Willkommen auf ...\nDu hast noch keinen Account, um dich zu Registrieren gib bitte ein gewünschtes Passwort ein:", "Registrieren", "Abbrechen");
  172.     }
  173.     return 1; //!!WICHTIG: Immer returnen damit der Cache geleert wird..!!
  174. }
  175.  
  176. stock CreatePlayerAccount(playerid, password[])
  177. {
  178.     new query[256], name[MAX_PLAYER_NAME], escpassword[129];
  179.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  180.     mysql_real_escape_string(name, name);
  181.     mysql_real_escape_string(password, escpassword);
  182.     format(query, sizeof query, "INSERT INTO `accounts` (`Name`, `Password`, `Score`, `Money`) VALUES ('%s', '%s', '0', '0')", name, escpassword);
  183.     mysql_function_query(1, query, false, "", "");
  184. }
  185.  
  186. forward OnPlayerAccountLoad(playerid, password[]);
  187. public OnPlayerAccountLoad(playerid, password[])
  188. {
  189.     if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) return 1;
  190.     new rows, fields, result[129];
  191.     cache_get_data(rows, fields);
  192.     if(!rows) Kick(playerid); //Falls doch kein Account vorhanden ist..
  193.     cache_get_field_content(0, "Password", result);
  194.     if(!strcmp(result, password, true))
  195.     {
  196.         cache_get_field_content(0, "Score", result); PlayerInfo[playerid][pScore] = strval(result);
  197.         cache_get_field_content(0, "Money", result); PlayerInfo[playerid][pMoney] = strval(result);
  198.         PlayerInfo[playerid][pLoggedin] = 1;
  199.         SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
  200.         ResetPlayerMoney(playerid);
  201.         GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
  202.         SpawnPlayer(playerid);
  203.     }
  204.     else
  205.     {
  206.         ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Das Angegebene Passwort stimmt nicht überein.\nBitte gib das richtige Passwort ein\n\nDu hast 3 Versuche sonst wirst du gekickt!:","Login","Abbrechen");
  207.         WrongPassword[playerid] += 1;
  208.         if(WrongPassword[playerid] == 3)
  209.         {
  210.             WrongPassword[playerid] = 0;
  211.             Kick(playerid);
  212.         }
  213.     }
  214.     return 1;
  215. }
  216.  
  217. forward SavePlayerAccount(playerid);
  218. public SavePlayerAccount(playerid)
  219. {
  220.     if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) return 1;
  221.     new query[128];
  222.     format(query, sizeof query, "UPDATE accounts SET Score=%d,Money=%d WHERE ID=%d", GetPlayerScore(playerid), GetPlayerMoney(playerid), PlayerInfo[playerid][pID]);
  223.     mysql_function_query(1, query, false, "", "");
  224.     return 1;
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement