Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // This is a comment
- // uncomment the line below if you want to write a filterscript
- //#define FILTERSCRIPT
- #include <a_samp>
- #include <a_mysql>
- forward OnUserCheck(playerid);
- forward OnUserRegister(playerid);
- forward OnUserLogin(playerid);
- forward Tutorial(playerid);
- main()
- {
- print("\n----------------------------------");
- print(" - by SebMcpepp");
- print("----------------------------------\n");
- }
- #define MYSQL_HOST "127.0.0.1" //IP Adresse des MySQL Servers
- #define MYSQL_USER "root" //Benutzername der angemeldet wird
- #define MYSQL_PASS "" //Passwort des Benutzers
- #define MYSQL_DBSE "samp_db" //Name der Datenbank
- new handle; //Die Connection-Handle, über die wir später auf die Tabellen der Datenbank zugreifen
- enum pDataEnum
- {
- p_id,
- bool:pLoggedIn,
- pName[MAX_PLAYER_NAME],
- pLevel,
- pAdmin,
- pMoney,
- pKills,
- pDeaths
- }
- new bool:pFirstLog[MAX_PLAYERS],PlayerInfo[MAX_PLAYERS][pDataEnum];
- new TutTimer[MAX_PLAYERS],TutTime[MAX_PLAYERS];
- #define ConnectionCheck(%1); if(!IsPlayerConnected(%1)) { return 1; }
- //Dialog IDs (gegebenenfalls ändern, falls bereits belegt)
- #define DIALOG_REGISTER 1
- #define DIALOG_LOGIN 2
- #define COLOR_YELLOW 0xFFFF00FF
- public OnGameModeInit()
- {
- MySQL_SetupConnection();
- SetGameModeText("- v.0.1");
- AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
- return 1;
- }
- public OnGameModeExit()
- {
- mysql_close(handle);
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- //Wenn der Spieler die Class-Selection betritt, prüfe ob er bereits eingeloggt ist
- if(!PlayerInfo[playerid][pLoggedIn])
- {
- //Wenn nicht, dann prüfe ob der Spieler ein Konto hat
- //Dazu wird ein Query gesendet und ein neues Callback aufgerufen
- //%e steht für einen geprüften String (sollte anstatt %s in Queries verwendet werden)
- new query[128];
- mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);
- //Das Query wird abgesendet und die playerid an OnUserCheck übergeben
- mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
- }
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- PlayerInfo[playerid][p_id] = 0;
- PlayerInfo[playerid][pLoggedIn] = false;
- PlayerInfo[playerid][pLevel] = 0;
- PlayerInfo[playerid][pAdmin] = 0;
- PlayerInfo[playerid][pMoney] = 0;
- PlayerInfo[playerid][pKills] = 0;
- PlayerInfo[playerid][pDeaths] = 0;
- GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- SaveUserStats(playerid);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- SetPlayerPos(playerid, 329.0244,-1513.3033,36.0391);
- SetPlayerCameraPos(playerid, 329.0244,-1513.3033,36.0391);
- SetPlayerCameraLookAt(playerid, 329.0244,-1513.3033,36.0391);
- SetPlayerFacingAngle(playerid,49.4261);
- if(pFirstLog[playerid] == true)//Erster Login
- {
- SetPlayerPos(playerid,0.0,0.0,0.0); // Tutorial Position
- TogglePlayerControllable(playerid,false);
- TutTime[playerid] = 1;
- TutTimer[playerid] = SetTimerEx("Tutorial",1000,1,"i",playerid);
- return 1;
- }
- else if(pFirstLog[playerid] == false)//Nicht erster Login
- {
- GivePlayerMoney(playerid,PlayerInfo[playerid][pMoney]);
- SetPlayerScore(playerid,PlayerInfo[playerid][pLevel]);
- return 1;
- }
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- if(killerid != INVALID_PLAYER_ID)
- {
- PlayerInfo[killerid][pKills]++;
- //if(PlayerInfo[killerid][pKills] > 3)
- //{
- // PlayerInfo[killerid][pLevel] = 1;
- //}
- }
- PlayerInfo[playerid][pDeaths]++;
- return 1;
- }
- public OnVehicleSpawn(vehicleid)
- {
- return 1;
- }
- public OnVehicleDeath(vehicleid, killerid)
- {
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if (strcmp("/spawn", cmdtext, true, 10) == 0)
- {
- SpawnPlayer(playerid);
- return 1;
- }
- return 0;
- }
- public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
- {
- return 1;
- }
- public OnPlayerExitVehicle(playerid, vehicleid)
- {
- return 1;
- }
- public OnPlayerStateChange(playerid, newstate, oldstate)
- {
- return 1;
- }
- public OnPlayerEnterCheckpoint(playerid)
- {
- return 1;
- }
- public OnPlayerLeaveCheckpoint(playerid)
- {
- return 1;
- }
- public OnPlayerEnterRaceCheckpoint(playerid)
- {
- return 1;
- }
- public OnPlayerLeaveRaceCheckpoint(playerid)
- {
- return 1;
- }
- public OnRconCommand(cmd[])
- {
- return 1;
- }
- public OnPlayerRequestSpawn(playerid)
- {
- return 1;
- }
- public OnObjectMoved(objectid)
- {
- return 1;
- }
- public OnPlayerObjectMoved(playerid, objectid)
- {
- return 1;
- }
- public OnPlayerPickUpPickup(playerid, pickupid)
- {
- return 1;
- }
- public OnVehicleMod(playerid, vehicleid, componentid)
- {
- return 1;
- }
- public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
- {
- return 1;
- }
- public OnVehicleRespray(playerid, vehicleid, color1, color2)
- {
- return 1;
- }
- public OnPlayerSelectedMenuRow(playerid, row)
- {
- return 1;
- }
- public OnPlayerExitedMenu(playerid)
- {
- return 1;
- }
- public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
- {
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- return 1;
- }
- public OnRconLoginAttempt(ip[], password[], success)
- {
- return 1;
- }
- public OnPlayerUpdate(playerid)
- {
- return 1;
- }
- public OnPlayerStreamIn(playerid, forplayerid)
- {
- return 1;
- }
- public OnPlayerStreamOut(playerid, forplayerid)
- {
- return 1;
- }
- public OnVehicleStreamIn(vehicleid, forplayerid)
- {
- return 1;
- }
- public OnVehicleStreamOut(vehicleid, forplayerid)
- {
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- if(dialogid == DIALOG_REGISTER)
- {
- //Spieler hat Abbrechen gewählt
- if(!response) return Kick(playerid);
- //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
- if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrierung", "Bitte registrieren Sie sich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
- //Wenn alles passt wird der Spieler in der Datenbank angelegt
- //Als Verschlüsselung für das Passwort wird MD5 verwendet
- new query[256];
- mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, level, money) VALUES ('%e', MD5('%e'),1,2500)", PlayerInfo[playerid][pName], inputtext);
- //Das Query wird abgesendet und die playerid an OnUserRegister übergeben
- mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
- pFirstLog[playerid] = true;
- return 1;
- }
- if(dialogid == DIALOG_LOGIN)
- {
- //Spieler hat Abbrechen gewählt
- if(!response) return Kick(playerid);
- //Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
- if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmelden", "Bitte melden Sie sich an:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
- //Wenn alles passt wird die Datenbank ausgelesen
- new query[256];
- mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);
- //Das Query wird abgesendet und die playerid an OnUserLogin übergeben
- mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
- pFirstLog[playerid] = false;
- return 1;
- }
- return 0;
- }
- public OnPlayerClickPlayer(playerid, clickedplayerid, source)
- {
- return 1;
- }
- //PUBLICS
- public Tutorial(playerid)
- {
- if(TutTime[playerid] >= 1) // wenn die Zeit auf 1 gesetzt worden war, gehts los. Wenn während des Tutorials die zeit wieder auf 0 gesetzt wird, passiert in dem Timer garnichts.
- {
- if(TutTime[playerid] == 2)// hier wird abgefragt wieviel Sekunden seit dem Start des Tutorials verstrichen sind
- {
- SendClientMessage(playerid,COLOR_YELLOW,"*~'__(Tutorial: Willkommen!)__'~*");
- SendClientMessage(playerid,COLOR_YELLOW,"Es folgt nun ein kleines Tutorial, passe bitte gut auf.");
- SendClientMessage(playerid,COLOR_YELLOW,"Falls dann doch noch Fragen offen bleiben, fragt im Forum oder die Admins/Spieler.");
- }
- else if(TutTime[playerid] == 10)// hier wird abgefragt wieviel Sekunden seit dem Start des Tutorials verstrichen sind
- {
- SendClientMessage(playerid,COLOR_YELLOW,"*~'__(Tutorial: Respekt und Umgangston!)__'~*");
- SendClientMessage(playerid,COLOR_YELLOW,"Bitte behandle jeden so wie du gern behandelt werden möchtest.");
- SendClientMessage(playerid,COLOR_YELLOW,"Falls du in einem falschen Umgangston redest wirst du verwarnt.");
- SendClientMessage(playerid,COLOR_YELLOW,"Bitte respektiere die Admins auch, denn auch sie werden dich..");
- SendClientMessage(playerid,COLOR_YELLOW,"..respektieren. Also: Achte auf deinen Umgangston!");
- }
- else if(TutTime[playerid] == 18)// hier wird abgefragt wieviel Sekunden seit dem Start des Tutorials verstrichen sind
- {
- SendClientMessage(playerid,COLOR_YELLOW,"*~'__(Tutorial: Bugusing oder Ähnliches!)__'~*");
- SendClientMessage(playerid,COLOR_YELLOW,"Falls du jemanden siehst, der einen Bug used.");
- SendClientMessage(playerid,COLOR_YELLOW,"Oder auch wenn er cheatet oder andere 'illegale' Sachen tut..");
- SendClientMessage(playerid,COLOR_YELLOW,"Bitte reporte ihn oder mach einen Screen und stell ihn ins Forum.");
- }
- else if(TutTime[playerid] == 26)// hier wird abgefragt wieviel Sekunden seit dem Start des Tutorials verstrichen sind
- {
- SendClientMessage(playerid,COLOR_YELLOW,"*~'__(Tutorial: Häuser und Autos!)__'~*");
- SendClientMessage(playerid,COLOR_YELLOW,"Wie auf jedem Reallife Server, so auch hier gibt es Autohäuser und Häuser zum Verkauf.");
- SendClientMessage(playerid,COLOR_YELLOW,"Wenn du ein Haus haben willst, brauchst du einen Makler. Du spawnst immer wieder vor deinem Haus.");
- SendClientMessage(playerid,COLOR_YELLOW,"Wenn du ein Auto haben willt, fahr zum nächsten Autohaus.");
- SendClientMessage(playerid,COLOR_YELLOW,"Es gibt mehrere von Ihnen und verschiedene Preisklassen.Dein Auto kannst du dann irgendwo parken..");
- SendClientMessage(playerid,COLOR_YELLOW,"..oder auch Verkaufen, falls es dir nicht gefällt.");
- }
- else if(TutTime[playerid] == 34)// hier wird abgefragt wieviel Sekunden seit dem Start des Tutorials verstrichen sind
- {
- SendClientMessage(playerid,COLOR_YELLOW,"*~'__(Tutorial: Berufe und Firmen!)__'~*");
- SendClientMessage(playerid,COLOR_YELLOW,"Jeder Bürger von San Fierro kann eine eigene Firma gründen.");
- SendClientMessage(playerid,COLOR_YELLOW,"Du brauchst jedoch genug Geld und ein Konzept.");
- SendClientMessage(playerid,COLOR_YELLOW,"Wenn du dies beides besitzt, schreib es ins Forum und wir werden es uns anschauen.");
- SendClientMessage(playerid,COLOR_YELLOW,"Doch auch andere Berufe kannst du ausüben, bewerben tut man sich im Forum..");
- SendClientMessage(playerid,COLOR_YELLOW,"..dort kannst du auch dich für ein Chef Posten bewerben, falls einer frei ist.");
- }
- else if(TutTime[playerid] == 42)
- {
- SendClientMessage(playerid,COLOR_YELLOW,"*~'__(Tutorial: Das Ende!)__'~*");
- SendClientMessage(playerid,COLOR_YELLOW,"Vielen Dank, dass du dir Zeit fürs Tutorial genommen hast.");
- SendClientMessage(playerid,COLOR_YELLOW,"Falls weitere Fragen bestehen, wende dich an Spieler oder Admins.");
- }
- else if(TutTime[playerid] == 50) // hier wird abgefragt wieviel Sekunden seit dem Start des Tutorials verstrichen sind
- {
- KillTimer(TutTimer[playerid]); // der Tutorial Timer wird beendigt
- TutTime[playerid] = -1; // die Tutorial Zeit auf INVALID gsetzt - nach Goldkiller :)
- SpawnPlayer(playerid); // der Spawn, wo er nach dem Tutorial hinsoll
- TogglePlayerControllable(playerid,true); // hier wird die Fähigkeit sich zu bewegen wieder auf "wahr" gesetzt
- GameTextForPlayer(playerid,"~g~Willkommen, ~r~ auf -",6000,1); // GameText am Ende des Tutorials
- pFirstLog[playerid] = false;
- }
- TutTime[playerid]++; // hier wird die Zeit jede Sekunde erhöht
- }
- }
- //MYSQL & LoginRegister
- public OnUserCheck(playerid)
- {
- //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
- if(cache_get_row_count() == 0)
- {
- //Der Spieler konnte nicht gefunden werden, er muss sich registrieren
- ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrierung", "Bitte registrieren Sie sich:", "Ok", "Abbrechen");
- }
- else
- {
- //Es existiert ein Ergebnis, das heißt der Spieler ist registriert und muss sich einloggen
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmelden", "Bitte melden Sie sich an:", "Ok", "Abbrechen");
- }
- return 1;
- }
- public OnUserRegister(playerid)
- {
- //Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
- PlayerInfo[playerid][p_id] = cache_insert_id();
- SendClientMessage(playerid, 0x00FF00FF, "[System] Registrierung erfolgreich.");
- return 1;
- }
- public OnUserLogin(playerid)
- {
- //Query wurde ausgeführt und das Ergebnis im Cache gespeichert
- if(cache_get_row_count() == 0)
- {
- //Der Spieler hat ein falsches Passwort eingegeben
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmelden", "Bitte melden Sie sich an:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
- }
- else
- {
- //Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
- //Wir lesen nun die erste Zeile des Caches aus (ID 0)
- PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
- PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", handle);
- PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0, "admin", handle);
- PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
- PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
- PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
- PlayerInfo[playerid][pLoggedIn] = true;
- SendClientMessage(playerid, 0x00FF00FF, "[System] Eingeloggt.");
- }
- return 1;
- }
- //STOCKS
- stock SaveUserStats(playerid)
- {
- //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
- if(!PlayerInfo[playerid][pLoggedIn]) return 1;
- //Ansonsten speichere sie
- new query[256];
- mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', admin = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
- PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
- //Das Query wird abgesendet
- mysql_pquery(handle, query);
- return 1;
- }
- stock MySQL_SetupConnection(ttl = 3)
- {
- print("[MySQL] Verbindungsaufbau...");
- //mysql_log(LOG_ALL); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
- handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DBSE, MYSQL_PASS);
- //Prüfen und gegebenenfalls wiederholen
- if(mysql_errno(handle) != 0)
- {
- //Fehler im Verbindungsaufbau, prüfe ob ein weiterer Versuch gestartet werden soll
- if(ttl > 1)
- {
- //Versuche erneut eine Verbindung aufzubauen
- print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
- printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
- return MySQL_SetupConnection(ttl-1);
- }
- else
- {
- //Abbrechen und Server schließen
- print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
- print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
- print("[MySQL] Der Server wird heruntergefahren.");
- return SendRconCommand("exit");
- }
- }
- printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", handle);
- return 1;
- }
- //FUNCTIONS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement