Zu 1:Das würde ich nicht empfehlen, da der Server so lange steht (=Lag) bis das Query ausgeführt wurde. Daher ein neuer Thread, dann hast du das Problem nicht.
Der Server sollte trotzdem weiter laufen oder nicht?
Zu 1:Das würde ich nicht empfehlen, da der Server so lange steht (=Lag) bis das Query ausgeführt wurde. Daher ein neuer Thread, dann hast du das Problem nicht.
Der Server sollte trotzdem weiter laufen oder nicht?
Wieso versteckst du denn deinen Namen?
Definitiv Nametag. Allein das man sie Spieler auf der Distanz so auf diesem Server nicht sehen kann.
Eine wirklich gute IDE doch leider mit vielen Bugs beim Compilen etc.
John:
Stimmt schon, das Tutorial sollte aber generell um das Salten von Passwörtern gehen.
Natürlich sollte es jedem normalen Scripter bewusst sein, das man sichere Passwörter für solch Sachen verwendet.
Aber man kann es ja dann noch später ausbauen, viele verstehen den Sinn hinter "Sicherheit" dann nicht.
Alles anzeigenDarf ich dir 2 gute Tipps geben ?
1. strlen(inputtext) > 6 kann man auch easy optimieren inputtext[0] != EOS
2. Wenn ich sowas sehe bekomme ich das kotzen VORSICHT Memoryleak, leider kennt das MySQL Plugin sowas wie ein garbagecollector nicht.
Codemysql_format(Handle, strQuery, 256, "SELECT * FROM users WHERE username='%e' LIMIT 1", Playername(playerid)); mysql_query(Handle, strQuery); //Wir holen uns die Spalten des Users in der Datenbank cache_get_field_content(0, "password", Password, Handle, 128); //Lesen das Gesaltete Passwort aus cache_get_field_content(0, "salt", Salt, Handle, 64); //Lesen unseren Salt aus
zu
Codemysql_format(Handle, strQuery, 256, "SELECT * FROM users WHERE username='%e' LIMIT 1", Playername(playerid)); new Cache:result = mysql_query(Handle, strQuery); //Wir holen uns die Spalten des Users in der Datenbank cache_get_field_content(0, "password", Password, Handle, 128); //Lesen das Gesaltete Passwort aus cache_get_field_content(0, "salt", Salt, Handle, 64); //Lesen unseren Salt aus+ cache_delete(result);
siehe auch
Daran hatte ich ja garnicht gedacht. Dachte das ist mit neuen Pluginupdates selbstverständlich geworden. Aber, gut zu wissen.
Jony:
Du meinst also das es nichts bringt? Möchtest du also bei einem Dump komplette Userdaten an die Öffentlichtkeit geben?
Alles anzeigenNein, völliger Schwachsinn.Ich lese aus MTA .map dateien Objects aus, da brauche ich kein MySQL.
Ausßerem kann man es in diesem Fall so machen.
enum eRandomSpawns{Float:random_spawn_x,Float:random_spawn_y,Float:random_spawn_z,Float:random_spawn_angle};#define MAX_RANDOMSPAWNS 50new aRandomSpawns[MAX_RANDOMSPAWNS][eRandomSpawns];
Dann einfach die daten die sccanf lädt an einen Stock weiter geben.
Bsps:
stock static CreateObjectForGamemode(Modelidc, Float:X, Float:Y, Float:Z, Float:rZ) {
In diesem dann die werte verstauen und jeweils höher counten damit man sie alle als random nutzen kann. Bsp:
aRandomSpawns[countrandom1][random_spawn_angle] = rZ;countrandom1++;
Jetzt kannst du ganz normal die größe des Arrays auslesen.
lg
Dann gib nächstes mal genauere Informationen. Dann kommt dabei auch kein Schwachsinn raus.
Wenn du Daten von Usern speichern möchtest die eventuell schon Disconnected sind. Würde ich "mysql_query" verwenden weil ich neuer Thread eigentlich unnötig dafür ist.
Über GetPlayerMoney würde ich auch das Geld nicht abfragen, User können sich das Geld mit s0beit Cheaten und dann abspeichern lassen.
Und du erstellt nur den Query aber rufst ihn nirgends ab. (mysql_query(Handle, Query);)
Schau mal auf http://www.fiverr.com vorbei. Da kriegst du sowas für 50€.
Beispiel:
https://www.fiverr.com/qfnetwo…d8fca79721f&autoplay=true
Hey Breadfish Community,
Ich habe seit einigen Tagen ein Problem mit dem Minimieren von SAMP! Nämlich ständig wenn ich alt+tab drücke um das Fenster zu minimieren, bekomme ich ein Blackscreen, und beim erneuten versuch maximiert sich SAMP wieder.
Mein GTA SA beinhaltet keine Mods, oder sonstige extra Features.
Kennt da jemand eine Lösung zu diesem Problem?
Danke schon mal im voraus
Welches System hast du? Eventuell nicht die aktuellesten Grafiktreiber / DirectX.
Nicht an den Server gebunden sein, sprich dann zu spielen, wenn ich Lust habe und nicht weil mein Leader sagt wir haben Morgen um 18.00 Uhr Gangfight.
Das Liegt nicht an den Serverbetreiber, das liegt an den Leader'n der einzelnen Gangs. Du kannst ja bevor du in eine Gang gehst nachfragen
Ich fände es cool, wenn sich viele Server bisschen an Altis Life orientieren. Weniger Fraktionen, dafür aber Gruppen die man selber erstellen kann.
Ich glaube wenn es so ein Server geben würde, wäre ich auch mal wieder soweit un sa:mp rauszuholen.
Obacht, sowas steht bevor.
BlackAce hat das ganze eigentlich komplett und gut zusammengefasst.
Fast "alle" Projekte die groß angekündigt wurden und mit ihren "Features" angegeben haben, wurden nach 1. Monat dicht gemacht.
Es fehlten einfach die User die das ganze richtig verwenden konnten, oder einfach keine Lust darauf hatten.
Ich finde, wenn man zuviel vom Server verrät dann ist es wie wenn ein neues Spiel erscheint und alles Gespoilert wird.
Man muss den Leuten einfach ein paar Reize bieten... und ihnen auch Bewusst machen das wenn sie lang spielen etwas erreicht haben.
Würdest du glücklich sein in 2 Tagen ein Millionär zu sein mit dem wissen das es jeder so schnell werden kann?
Ich denke, du würdest glücklicher sein, wenn du weißt das du hart gearbeitet hat und keiner dir so schnell das Wasser reichen kann.
Natürlich sollte man auch das Gefühl haben das man mit am Server arbeiten kann, das Ideen umgesetzt werden.
Viele Server sagen einfach "Nein", zu wirklich guten Features, die User möchten.
Was bringen einen die besten Systeme wenn der Rest und die Community totaler Bullshit sind?
Ich würde für solche Sachen die möglichst "dynamisch" sein sollen MySQL verwendet.
Ansonsten benötigst du deine "for"-Schleife mit der du alle Inhalte der "Datei" ausließt und per sscanf durch gehst.
Jeden einzelnen Spawn speicherst du dann in ein erstellen "Array".
new Array[32][8]; //32 ist die größe des arrays und 8 die größe der 2. dimension
...
for(new i = 0; i < sizeof(Array); i++)
{
sscanf(...)
}
Die Überschrift sagt das meiste aus, habe einen normalen 0.3.7 Client und jedesmal wenn ich auf einen R2 Server Joinen möchte
Crasht das Spiel nach dem LogIn-
Eigene Dokumente die "gta_sa.set"-Datei löschen und im San Andreas Ordner die Kompatibilität von GTA_SA.exe auf Windows 98 / ME.
Willkommen zu einem kleinen Tutorial von mir!
Ich werde euch in diesem Tutorial das Hashen / Salten von Passwörtern in Datenbanken per Pawn näherbringen.
Das Salten von Passwörtern sorgt heutzutage für mehr Sicherheit bei Datenbankzugriff von fremden Personen.
Beim Salten von Passwörtern wird ein zufällig erstellter Datensatz zum Verschlüsseln der Passwörter verwendet.
Somit wird ein nahezu einzigartiger Hash erstellt, der von Crack Datenbanken nicht aufzufinden werden ist. (Beispiel Cracker)
Nun, man könnte seine Passwörter genau so in SHA Encoden oder andere Encodings verwenden, meiner Meinung nach bringt das Salten aber die meiste Sicherheit.
Auch für SHA gibt es Datenbanken, die für das Cracken von Strings da sind, um eventuelle Passwörter zu finden.
Was benötigt ihr?
Nun fangen wir doch eigentlich mit dem an was wir benötigen, im sinne von MySQL.
Ihr solltet eine Tabelle mit mindestens 2 Spalten haben für "Password" und "Salt".
Wir überlegen nun, wie können wir denn eigentlich das Passwort mit dem Salt in Verbindung bringen.
Als erstes sollten wir den Salt generieren und allgemein einen Account erstellen lassen.
Das ist der Schritt in dem wir den Salt in der Datenbank speichern und das Passwort sozusagen mit dem Salt verschlüsseln.
Dadurch das wir das eigentliche Passwort garnicht in der Datenbank abspeichern, ist es sozusagen unmöglich das Resultat auszulesen.
Also was benötigen wir für unser Salt? Für mich persönlich reicht es aus einen zufälligen Integer zu verwenden.
Und kommt dabei das Stichwort "random" in den Kopf, eine Pawnfunktion die uns eine zufällige Ganzzahl zurück gibt.
Wir lassen uns also mit einem Dialog ein Fenster anzeigen in dem wir unser "Passwort" angeben und verarbeiten.
if(dialogid == DIALOG_REGISTER){ if(response) { if(strlen(inputtext) > 6) { new Query[256], Salt[64], Password[128]; format(Salt, "%i", random(999999)); //Generieren vom Salt format(Salt, "%s", MD5_Hash(Salt)); //Umwandeln des Salt's in MD5 format(Password, "%s", MD5_Hash(inputtext)); //Passwort in MD5 Hashen format(Password, "%s%s", Salt, Password); //Gehashter Salt und Passwort zusammenfügen format(Password, "%s", MD5_Hash(Password)); //Ingesammt nochmal Hashen mysql_format(Handle, Query, 256, "INSERT INTO users (username, password, salt) VALUES ('%e', '%e', '%e')", Playername(playerid), Password, Salt); mysql_query(Handle, Query, "", ""); //Den Query von oben ausführen } else { SendClientMessage(playerid, -1, "Passwort muss mindestens 6. Zeichen lang sein!"); } } else { Kick(playerid); }}
Wie im Script mit Kommentaren (//) beschrieben, seht ihr was der Code macht. Wir erstellen unseren Salt mit der Funktion "random".
Wir fügen den Salt mit dem Passwort zusammen (MD5(Salt) + MD5(Passwort)) und generieren daraus dann noch einmal den Hash. (MD5(MD5(Salt) + MD5(Passwort))
Das Passwort welches wir mit dem Salt verschlüsselt haben Speichern wir mit dem Salt in die Datenbank.
Wieso Speichern wir den Salt in die Datenbank? Nun, wir müssen ja auch irgendwie wieder den gleichen Salt zur Authentifizierung bekommen.
if(dialogid == DIALOG_LOGIN){ if(response) { if(strlen(inputtext) > 6) { new Query[256], Salt[64], Password[128], Final[128]; mysql_format(Handle, strQuery, 256, "SELECT * FROM users WHERE username='%e' LIMIT 1", Playername(playerid)); mysql_query(Handle, strQuery); //Wir holen uns die Spalten des Users in der Datenbank cache_get_field_content(0, "password", Password, Handle, 128); //Lesen das Gesaltete Passwort aus cache_get_field_content(0, "salt", Salt, Handle, 64); //Lesen unseren Salt aus format(Final, 128, "%s%s", Salt, MD5_Hash(inputtext)); //Fügen unser Salt aus der Datenbank mit dem Passwort vom inputtext zusammen format(Final, 128, "%s", MD5_Hash(Final)); //Hashen es ingesammt if(!strcmp(Password, Final)) { /* Wir haben unser Inputtext mit dem Salt aus der Datenbank zusammen gefügt und Gehasht. Nun sollten wir eigentlich den gleichen Hash bekommen der als "Passwort" in der Datenbank steht. Unser Passwort wird sozusagen garnicht erst abgespeichert sondern komplett gehasht. */ } } else { SendClientMessage(playerid, -1, "Passwort muss mindestens 6. Zeichen lang sein!"); } } else { Kick(playerid); }}
Wir erstellen in dieser Funktion mit unserem Salt aus der Datenbank und unser Inputtext unser Hash der schon in der Datenbank als "Passwort" steht.
Dadurch das der Salt abgespeichert wurde, können wir diesen Verwenden um das gleiche Endprodukt zu bekommen, welches wir bei der Registration hatten. (Das Passwort)
Mit diesem Hash machen wir nun den abgleich ob der selbe auch genau in der Datenbank steht. Tut er es, können wir uns erfolgreich einloggen.
Ich hoffe euch hat das kurze Tutorial gefallen, man sollte es mit etwas Wissen auch ohne Probleme verstehen.
Bitte lass mir doch ein Feedback da, was ich besser machen kann, und wenn ihr Fragen habt, stellt sie einfach.
liebe grüße Grab
Würde mich als Scripter anbieten, kann gerne mal aufs Teamspeak kommen.
Kennen müsste man mich eigentlich. Meine Vorstellung würde ich dann im Teamspeak mit euch machen, da gibt es viel mehr zu Zeigen was andere nicht zu Interessieren hat.
Schön und gut das du Teammitglieder suchst, aber um das Rechtliche zu klären solltest du mindestens 18. sein.
Und persönlich würde ich mal wissen wie sehr begabt du in Sachen "Computertechnik" bist.
Man muss sagen das es eines der ersten Tutorials ist die man auf SA-MP.de sieht das großzügig beschrieben ist.
Ich persönlich habe es zwar nicht benötigt, fand aber mal die Materie interessant und wie du die Tutorials schreibst.
Weiter mit der guten Arbeit, mir würden die ganzen Leute im Forum schon den Kopf zerbrechen, aber du bleibst dran!
Benutze einfach Pawno als Standarteditor oder Notepad++ mit den Extensions von Pawn. (Egal was ist, Pawno hat mich noch nie im Stich gelassen)
//Edit:
Entschuldigung, falsch gelesen. Du solltest die Farben selber im Script anpassen, dazu gibt es Online eine ganze Tabelle.
Wie Lionel schon gesagt hat, stell einmal die Kompatibilität auf Windows 98 / ME und lösche aus deinen eigenen Dokumenten bei "Grand Theft Auto San Andreas" einmal die "USERSET" oder wie die Datei heißt. (Hab gerade kein GTA Installier)