Guest User

MySQL Grundegrüst

a guest
Sep 16th, 2013
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.57 KB | None | 0 0
  1. //INCLUDES
  2. #include    <a_samp>
  3. #include    <ocmd>
  4. #include    <a_mysql>
  5. #include    <sscanf2>
  6.  
  7.  
  8. //DEFINES
  9. #undef MAX_PLAYERS
  10. #define MAX_PLAYERS 30
  11. #define Host                            "127.0.0.1"
  12. #define Username                        "root"
  13. #define Passwort                        ""
  14. #define Database                        "selfmade"
  15.  
  16. //GLOBALE VARIABLEN
  17. new mycon;
  18.  
  19. //ENUMS
  20. enum {
  21.     Dialog_Reg = 1,  // Anpassen, falls notwendig
  22.     Dialog_Login
  23. }
  24.  
  25.  
  26. enum SpielerInfo
  27. {
  28.     pName[MAX_PLAYER_NAME+1],
  29.     pMoney,
  30.     Float:pHealth,
  31.     LastLogin[11],
  32.     bool:pLogged
  33. }
  34. new PlayerInfo[MAX_PLAYERS][SpielerInfo];
  35.  
  36.  
  37. //Forwards
  38. forward LoadPlayerDataSequence(playerid, l_step);
  39. forward KickPlayer(playerid);
  40.  
  41.  
  42.  
  43. //Main Ausgabe
  44. main()
  45. {
  46.     print("\n----------------------------------");
  47.     print(" Blank Gamemode by your name here");
  48.     print("----------------------------------\n");
  49. }
  50.  
  51. //==================================================//
  52.  
  53. public OnGameModeInit()
  54. {
  55.     SetGameModeText("Blank Script");
  56.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  57.     mycon = mysql_connect("127.0.0.1","Username","Database","Passwort");
  58.     return 1;
  59. }
  60.  
  61. public OnGameModeExit()
  62. {
  63.     mysql_close();
  64.     return 1;
  65. }
  66.  
  67. public OnPlayerRequestClass(playerid, classid)
  68. {
  69.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  70.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  71.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  72.     PlayerInfo[playerid][pLogged] = 2;
  73.     SpawnPlayer(playerid);
  74.     return 1;
  75. }
  76.  
  77. public OnPlayerConnect(playerid)
  78. {
  79.     GetPlayerName(playerid,PlayerInfo[playerid][pName],MAX_PLAYER_NAME);
  80.     new query[60 + MAX_PLAYER_NAME];
  81.     mysql_format(mycon, query, sizeof(query), "SELECT COUNT(*) AS `count` FROM `User` WHERE `Name` = '%e'",PlayerInfo[playerid][pName]);
  82.     mysql_function_query(mycon, query, true, "LoadPlayerDataSequence","dd",playerid,1);
  83.     return 1;
  84. }
  85.  
  86. public OnPlayerDisconnect(playerid, reason)
  87. {
  88.     if(PlayerInfo[playerid][pLogged])
  89.     {
  90.         SavePlayerData(playerid);
  91.     }
  92.     ResetPlayerVariables(playerid);
  93.     return 1;
  94. }
  95.  
  96. public OnPlayerSpawn(playerid)
  97. {
  98.     SetPlayerPos(playerid,-1977.1072,289.4454,35.1719);
  99.     if(PlayerInfo[playerid][pLogged] == 2)
  100.     {
  101.    
  102.     }
  103.     return 1;
  104. }
  105.  
  106. public OnPlayerDeath(playerid, killerid, reason)
  107. {
  108.     return 1;
  109. }
  110.  
  111. public OnVehicleSpawn(vehicleid)
  112. {
  113.     return 1;
  114. }
  115.  
  116. public OnVehicleDeath(vehicleid, killerid)
  117. {
  118.     return 1;
  119. }
  120.  
  121. public OnPlayerText(playerid, text[])
  122. {
  123.     return 1;
  124. }
  125.  
  126. public OnPlayerCommandText(playerid, cmdtext[])
  127. {
  128.     if (strcmp("/mycommand", cmdtext, true, 10) == 0)
  129.     {
  130.         // Do something here
  131.         return 1;
  132.     }
  133.     return 0;
  134. }
  135.  
  136. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  137. {
  138.     return 1;
  139. }
  140.  
  141. public OnPlayerExitVehicle(playerid, vehicleid)
  142. {
  143.     return 1;
  144. }
  145.  
  146. public OnPlayerStateChange(playerid, newstate, oldstate)
  147. {
  148.     return 1;
  149. }
  150.  
  151. public OnPlayerEnterCheckpoint(playerid)
  152. {
  153.     return 1;
  154. }
  155.  
  156. public OnPlayerLeaveCheckpoint(playerid)
  157. {
  158.     return 1;
  159. }
  160.  
  161. public OnPlayerEnterRaceCheckpoint(playerid)
  162. {
  163.     return 1;
  164. }
  165.  
  166. public OnPlayerLeaveRaceCheckpoint(playerid)
  167. {
  168.     return 1;
  169. }
  170.  
  171. public OnRconCommand(cmd[])
  172. {
  173.     return 1;
  174. }
  175.  
  176. public OnPlayerRequestSpawn(playerid)
  177. {
  178.     return 1;
  179. }
  180.  
  181. public OnObjectMoved(objectid)
  182. {
  183.     return 1;
  184. }
  185.  
  186. public OnPlayerObjectMoved(playerid, objectid)
  187. {
  188.     return 1;
  189. }
  190.  
  191. public OnPlayerPickUpPickup(playerid, pickupid)
  192. {
  193.     return 1;
  194. }
  195.  
  196. public OnVehicleMod(playerid, vehicleid, componentid)
  197. {
  198.     return 1;
  199. }
  200.  
  201. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  202. {
  203.     return 1;
  204. }
  205.  
  206. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  207. {
  208.     return 1;
  209. }
  210.  
  211. public OnPlayerSelectedMenuRow(playerid, row)
  212. {
  213.     return 1;
  214. }
  215.  
  216. public OnPlayerExitedMenu(playerid)
  217. {
  218.     return 1;
  219. }
  220.  
  221. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  222. {
  223.     return 1;
  224. }
  225.  
  226. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  227. {
  228.     return 1;
  229. }
  230.  
  231. public OnRconLoginAttempt(ip[], password[], success)
  232. {
  233.     return 1;
  234. }
  235.  
  236. public OnPlayerUpdate(playerid)
  237. {
  238.     return 1;
  239. }
  240.  
  241. public OnPlayerStreamIn(playerid, forplayerid)
  242. {
  243.     return 1;
  244. }
  245.  
  246. public OnPlayerStreamOut(playerid, forplayerid)
  247. {
  248.     return 1;
  249. }
  250.  
  251. public OnVehicleStreamIn(vehicleid, forplayerid)
  252. {
  253.     return 1;
  254. }
  255.  
  256. public OnVehicleStreamOut(vehicleid, forplayerid)
  257. {
  258.     return 1;
  259. }
  260.  
  261. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  262. {
  263.     switch(dialogid)
  264.     {
  265.         case Dialog_Reg:
  266.         {
  267.             if(!response) // Wenn er den 2. Button (Abbrechen) gedrückt wurde
  268.             {
  269.                 SendClientMessage(playerid,0xFF0000FF,"Bitte benutzen Sie /q, um das Spiel zu beenden!");
  270.                 SetTimerEx("KickPlayer",250,0,"i",playerid);
  271.                 return 1;
  272.             }
  273.             if(!strlen(inputtext) || strlen(inputtext) < 5 || strlen(inputtext) > 25) // Für Anfänger (nehmen wir diese!)
  274.             // if(!inputtext[0] || !(3 <= strlen(inputtext) <= 25))
  275.             {
  276.                 // Da die Eingabe wegen Länge oder gar keiner Eingabe fehlgeschlagen ist, bitten wir ihn erneut um eine Eingabe, diesmal mit Hinweis (in Rot!)
  277.                 ShowPlayerDialog(playerid, Dialog_Reg, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Registrierung]","{FFFFFF}Bitte geben Sie Ihr gewünschtes Passwort ein!\n{FF0000}Bitte zwischen 5 & 25 Zeichen!","Register","Abbrechen");
  278.                 return 1;
  279.             }
  280.             new query[128+MAX_PLAYER_NAME], year, month, day;
  281.             getdate(year, month, day);
  282.             format(query,sizeof(query),"%d/%d/%d",day,month,year); // Damit wir keine extra Variable noch extra erstellen müssen
  283.             mysql_format(mycon,query, sizeof(query), "INSERT INTO `User` (`Name`, `Passwort`, `Geld`, `Leben`, `LastLogin`) VALUES('%e','%e',0,100.0,'%e')", PlayerInfo[playerid][pName], inputtext, query);
  284.             mysql_tquery(mycon, query, "", ""); // Hier benutzen wir mysql_tquery, da wir keine Werte aus der Datenbank brauchen, sondern etwas reinschreiben
  285.             PlayerInfo[playerid][pLogged] = true;
  286.             SpawnPlayer(playerid);
  287.             return 1;
  288.         }
  289.         case Dialog_Login:
  290.         {
  291.             if(!response)
  292.             {
  293.                 SendClientMessage(playerid,0xFF0000FF,"Bitte benutzen Sie /q, um das Spiel zu beenden!");
  294.                 SetTimerEx("KickPlayer",250,0,"i",playerid);
  295.                 return 1;
  296.             }
  297.             if(!strlen(inputtext) || strlen(inputtext) < 5 || strlen(inputtext) > 25) // Wie gesagt, Für Anfänger
  298.             // if(!inputtext[0] || !(3 <= strlen(inputtext) <= 25)) // Für Fortgeschrittene
  299.             {
  300.                 // Da die Eingabe wegen Länge oder gar keiner Eingabe fehlgeschlagen ist, bitten wir ihn erneut um eine Eingabe, wieder mit Hinweis (in Rot!)
  301.                 ShowPlayerDialog(playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Loginsequenz]","{FFFFFF}Bitte geben Sie Ihr Passwort ein!\n{FF0000}Es hat mindestens 5 Zeichen!","Login","Abbrechen");
  302.                 return 1;
  303.             }
  304.             // So hier müssen wir nun Abfragen ob das Passwort denn dasselbe ist!
  305.             new query[80 + MAX_PLAYER_NAME];
  306.             mysql_format(mycon, query, sizeof(query), "SELECT COUNT(*) AS `count` FROM `User` WHERE `Name` = '%e' AND `Passwort` = '%e'",PlayerInfo[playerid][pName],inputtext);
  307.             // Hier ganz einfach, wie beim anderen COUNT, wird hier auch gezählt, ob es diesen Eintrag, wo Name und Passwort gleich sind, gibt!
  308.             mysql_function_query(mycon, query, true, "LoadPlayerDataSequence","dd",playerid,2); // Step 2
  309.             // Das ganze schicken wir ab!
  310.             return 1;
  311.         }
  312.     }
  313.     return 1;
  314. }
  315.  
  316. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  317. {
  318.     return 1;
  319. }
  320.  
  321. public LoadPlayerDataSequence(playerid, l_step)
  322. {
  323.     switch(l_step)
  324.     {
  325.         case 1:
  326.         {
  327.             // Jetzt gucken wir, ob es einen Eintrag gibt
  328.             new count = cache_get_field_content_int(0,"count"); // Hier holen wir uns den Integer als der "count", die wir temporär in MySQL erstellt haben und stecken sie in die Variable count
  329.             if(count) // Wenn count 1 oder höher ist (Keine Angst, höher als 1 kann sie nicht kommen)
  330.             {
  331.                 // Der Eintrag existiert, also lassen wir den Spieler einloggen
  332.                 ShowPlayerDialog(playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Loginsequenz]","{FFFFFF}Bitte geben Sie Ihr Passwort ein!","Login","Abbrechen");
  333.                 return 1;
  334.             }
  335.             else
  336.             {
  337.                 // Es gibt keinen Eintrag, also ist er neu und muss sich registrieren
  338.                 ShowPlayerDialog(playerid, Dialog_Reg, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort eingabe - Registrierung]","{FFFFFF}Bitte geben Sie Ihr gewünschtes Passwort ein!","Register","Abbrechen");
  339.                 return 1;
  340.             }
  341.         }
  342.         case 2:
  343.         {
  344.            // Jetzt gucken wir, ob es einen Eintrag gibt
  345.             new count = cache_get_field_content_int(0,"count");
  346.             if(count) // Wenn count 1 oder höher ist
  347.             {
  348.                 // Der Eintrag existiert, also lassen wir den Spieler nun die Spielerdaten laden und danach den Spieler spawnen
  349.                 new query[60 + MAX_PLAYER_NAME];
  350.                 mysql_format(mycon,query, sizeof(query), "SELECT * FROM `User` WHERE `Name` = '%e'",PlayerInfo[playerid][pName]);
  351.                 mysql_function_query(mycon,query,true,"LoadPlayerDataSequence","dd",playerid,3);
  352.                 return 1;
  353.             }
  354.             else
  355.             {
  356.                 // Es gibt keinen Eintrag, also ist das Passwort falsch
  357.                 ShowPlayerDialog(playerid, Dialog_Login, DIALOG_STYLE_PASSWORD, "{00FF00}[Passwort Eingabe - Loginsequenz]","{FFFFFF}Bitte geben Sie Ihr richtiges Passwort ein!\n{FF0000}Die vorherige Eingabe war falsch!","Login","Abbrechen");
  358.                 return 1;
  359.             }
  360.         }
  361.         case 3:
  362.         {
  363.             // Wir laden nun die Spielerdaten
  364.             // Der Vorteil bei den cache-Funktionen ist, dass sie am Ende kein mysql_free_result brauchen sondern direkt danach den Cache leeren
  365.             PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0,"Geld");
  366.             PlayerInfo[playerid][pHealth] = cache_get_field_content_float(0,"Leben");
  367.             cache_get_field_content(0,"LastLogin",PlayerInfo[playerid][LastLogin]);
  368.             PlayerInfo[playerid][pLogged] = true;
  369.             SpawnPlayer(playerid);
  370.             return 1;
  371.             // Fertig!
  372.         }
  373.         default:
  374.         {
  375.             SendClientMessage(playerid,0xFF0000FF,"Es könnte ein Bug aufgetreten sein! Bitte reconnecten Sie!");
  376.             SetTimerEx("KickPlayer",250,0,"i",playerid);
  377.             return 1;
  378.         }
  379.     }
  380.     return 1;
  381. }
  382. stock SavePlayerData(playerid)
  383. {
  384.     // Hier speichern wir noch die Daten ab
  385.     new query[150 + MAX_PLAYER_NAME];
  386.     new day,month,year; getdate(year,month,day);
  387.     format(PlayerInfo[playerid][LastLogin],11,"%d/%d/%d",day,month,year);
  388.     mysql_format(mycon,query, sizeof(query), "UPDATE `User` SET `Geld` = %d,`Leben` = %.1f,`LastLogin` = '%e' WHERE `Name` = '%e'",PlayerInfo[playerid][pMoney],PlayerInfo[playerid][pHealth],PlayerInfo[playerid][LastLogin],PlayerInfo[playerid][pName]);
  389.     mysql_tquery(mycon,query,"","");
  390.     return 1;
  391. }
  392.  
  393. stock ResetPlayerVariables(playerid)
  394. {
  395.     // Und hier noch Resetten
  396.     for(new x; SpielerInfo:x < SpielerInfo; ++x) PlayerInfo[playerid][SpielerInfo:x] = 0;
  397.     return 1;
  398. }
  399.  
  400. public KickPlayer(playerid)
  401.     return Kick(playerid);
Advertisement
Add Comment
Please, Sign In to add comment