- Achte auf meine Details: mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext); Ich übergebe hier den Inputtext an diese Funktion. Du musst den Callback entsprechend anpassen.
- Keine Ahnung, was dein ShowCaracter da noch macht?
- Die Frage mit dem Register verstehe ich nicht ganz. Denn so wie du es bis jetzt hast, wird er ja dann registriert...
Beiträge von Kaliber
-
-
Da drehst du das um. Du lädst zuerst aus der MySQL Datenbank und prüfst das dann gegen.
So zum Beispiel:
C
Alles anzeigencase DIALOG_LOGIN: { new query[256]; mysql_format(handle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name` = '%e' LIMIT 1", AccountInfo[playerid][account_Name]); mysql_pquery(handle, query, "AccountLogin", "ds", playerid,inputtext); } case DIALOG_PW_CHECK: { if(!response) return Kick(playerid); if(!inputtext[0]) return SPD(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen"); bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid); } //Bei AccountLogin public AccountLogin(playerid,inputtext[]) { //Halt account laden und AccountInfo[playerid][account_Password] den hash eben setzen //Ganz unten dann: bcrypt_check(inputtext, AccountInfo[playerid][account_Password], "OnPasswordChecked", "d", playerid); return 1; } public OnPasswordChecked(playerid) { new bool:match = bcrypt_is_equal(); if(!match) return SPD(playerid,DIALOG_PW_CHECK,DIALOG_STYLE_INPUT,"Falsches Passwort","Dein eingegebenes Passwort ist falsch!","Bestätigen","Abbrechen"); //Hier kannst den Spieler dann spawnen und einloggen :) return 1; } -
Fast, also den inputtext (das ist das Klartext Passwort) hast du ja jetzt schon zu einem Hash verwandelt, also diesen auch nur in die Datenbank speichern, ergo, so schreiben:
Cpublic OnPasswordHashed(playerid) { new hash[BCRYPT_HASH_LENGTH],query[256]; bcrypt_get_hash(hash); mysql_format(handle, query, sizeof(query), "INSERT INTO `users` (`name`, `password`) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], hash); mysql_pquery(handle, query, "OnUserRegister", "d", playerid); return 1; } -
Du packst das MySQL Insert Query einfach in den OnPasswordHashed Callback.
Dadurch hast du ja direkt Zugriff auf den Hash.
Einfach nur den Code umstrukturieren

-
Wo genau hapert es denn, das Tutorial ist doch ziemlich eindeutig (https://forum.sa-mp.com/showthread.php?t=453544)

Vielleicht zeigst du uns deinen bisherigen Code und markierst, wo genau du Schwierigkeiten hast beim Weitermachen.
-
Kannst du uns den Code vom TextDraw zufällig zeigen?

(Auch wenn du das im TextDraw Studio machst, kannst dir den ja exportieren lassen...)
-
Versuch mal die redistributable c++ ab 2012 oder so zu installieren

-
soll ein Enum gespeichert werden
Der Artikel ist ganz gut: https://www.heise.de/developer…r-JavaScript-4122440.html
bzw: https://stackoverflow.com/ques…ining-enums-in-javascript
-
Es ist sicher nicht ganz so schwer, wie ich es mir schon wieder mache.
Das mit diesem max-width ist verwirrend....du meinst doch bestimmt einfach nur width oder?
Dann einfach so:
-
Ohh, jetzt erst das breadfish.de Design von Atef A. und Edgar P. gesehen

Das sieht mega aus!

Nur die Front Page sieht etwas weiß aus, vllt die eine Box um die Top 5 Beitrage oder die Überschrift unterstreichen oder sowas xD
PS: Wieso eigentlich nur Top 5 und nicht Top 10?

-
eigentlich die Kamera vom wirklichen Spieler hinter dem PC
Achsoo, das müsste:
https://wiki.gtanet.work/index.php?title=GetGameplayCamPos
und
https://wiki.gtanet.work/index.php?title=GetGameplayCamRot
sein.
Oder es ist das hier: https://wiki.gtanet.work/index.php?title=GetGameplayCamDir
Sry, habe nie GTA V gespielt und kenne die Funktionen nicht

-
Ich finde es schade, dass die Grafiken hier nciht gehen^^
Doch, tuen sie

-
Ich weiß auch noch nicht so genau, was ich davon halte xD
Ich trauere ja immer noch diesem Design hinterher:

Das waren noch Zeiten

Finde die Bilder irgendwie etwas überskaliert? Die wirken so groß und verpixxelt (also die Avatare) würde die evtl etwas kleiner setzen

-
Habt ihr vielleicht auch eine Idee wie ich den Wert verändere in welche Richtung der Spieler schaut und wie ich diesen Wert herausfinde?
1:1 wie die Position, nur anstatt player.Position einfach player.Rotation verwenden.
Kannst du sowohl abfragen, als auch natürlich setzen.
Eine ausführliche Liste, was du alles mit dem Spieler machen kannst, findest du unter: https://wiki.gtanet.work/index.php?title=Client
Da steht dann auch, ob du diesen Wert setzen oder nur auslesen kannst

-
wie ich denn die Position des Players kriege
Wenn mich nicht alles täuscht, einfach player.Position abfragen.
Da ist ja n Vektor3 dahinter..und dann haste die x,y,z Achse

-
Also, so funktioniert das mit dem Anti-Cheat nicht. (Aus sehr vielen Gründen)
Schau dir nochmal ein paar Tutorials an.
- Um mal das Geheimnis zu lüften, wieso du gekickt wirst. Stell dir vor, du hast 500$ auf der Hand. Jetzt rufst du GivePlayerMoneyEx auf und gibst dir 50$. Jetzt hast du natürlich 550$ auf der Hand, aber er prüft, ob 550 > 50 ist...natürlich ist es das, ergo KICK
- NewMoney[playerid] = GetPlayerMoney(playerid); Das ist absoluter Käse, schon beim Login könnte er sich Geld gecheatet haben und das wäre damit nun legal.
- NIIIE GetPlayerMoney als Referenz für einen Wert verwenden (nur zur Abfrage, ob er Geld gecheatet hat). Ansonsten musst du eigene Variablen verwenden und diese aus der Datenbank laden. Darum geht es ja, das Geld serverseitig verwalten.
Hoffe das hilft dir etwas

Google mal Anti-Money cheat samp...da müssteste eigentlich viele Dinge finden

- Um mal das Geheimnis zu lüften, wieso du gekickt wirst. Stell dir vor, du hast 500$ auf der Hand. Jetzt rufst du GivePlayerMoneyEx auf und gibst dir 50$. Jetzt hast du natürlich 550$ auf der Hand, aber er prüft, ob 550 > 50 ist...natürlich ist es das, ergo KICK
-
Versuch mal:
C#if SQL_DATABASE == 0 MySqlConnection = mysql_connect(LOCAL_SQL_HOST,LOCAL_SQL_USER,LOCAL_SQL_PASS,LOCAL_SQL_DATA); #endif #if SQL_DATABASE == 1 MySqlConnection = mysql_connect(SQL_HOST,SQL_USER,SQL_PASS,SQL_DATA); printf("Host: %s,User: %s,Datanbank: %s,Passwort: %s",SQL_HOST,SQL_USER,SQL_DATA,SQL_PASS); #endif -
Und schau dir die Funktion [wiki]RemoveBuildingForPlayer[/wiki] nochmal genau an, da musst du die playerid angeben...ergoo unter [wiki]OnPlayerConnect[/wiki] verwenden

-
Nun, testest du das denn auf einer VM oder auf deinem Handy?
Wenn die Uhrzeit auf der VM oder dem Handy falsch eingestellt ist, nimmt er auch die falsche Uhrzeit.
Willst du sicher gehen, dass er den aktuellen Timestamp verwendet, musst du dir den über eine Website ziehen.
-
Was gibt denn:
String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date());
System.out.println(currentDateTimeString);aus?