Ich habe mal grade disen Oddy hier gesucht und ein passenden beitrag von ihm gefunden:
Somit ist der Handel auf Breadfish zu stande gekommen
Ich habe mal grade disen Oddy hier gesucht und ein passenden beitrag von ihm gefunden:
Somit ist der Handel auf Breadfish zu stande gekommen
Dann melde dich bei deiner Daimler Firma für ein Lehrgang in Programmieren an und mach über deine Firma ein Ausbildung dazu.
Daimler Finanziert dir so was weil die immer solche leute brauchen.
@Dayzer7632 Geh damit wirklich zu Mercedes Benz Firma da brauchst du dir keine Sorgen machen das es nicht klappt. Mercedes Benz gibt dir dann sogar Garantie drauf was du bei Privaten Personen nicht hast.
Das Registrieren/Einloggen geht jetzt.
Nur frage ich mich warum er jetzt folgendes ausspuckt
[22:48:02] [plugins/mysql] error #1054 while executing query "UPDATE accounts SET adminlevel = '0', money = '0', Franktion = '0', Frank = '0' WHERE id = '1'": Unknown column 'Franktion' in 'field list'
[22:48:26] [plugins/mysql] cache_get_value_name_int: value 'NULL' is not a number
[22:48:26] [plugins/mysql] cache_get_value_name_int: value 'NULL' is not a number
[22:48:26] [plugins/mysql] cache_get_value_name_int: value 'NULL' is not a number
[22:48:26] [plugins/mysql] cache_get_value_name_int: value 'NULL' is not a number
[22:49:24] [plugins/mysql] error #1054 while executing query "UPDATE accounts SET adminlevel = '0', money = '0', Franktion = '0', Frank = '0' WHERE id = '1'": Unknown column 'Franktion' in 'field list'
Hier aus der Console die Infromation:
----------
Loaded log file: "server_log.txt".
----------
SA-MP Dedicated Server
----------------------
v0.3.7-R2, (C)2005-2015 SA-MP Team
[22:47:31] filterscripts = "" (string)
[22:47:31]
[22:47:31] Server Plugins
[22:47:31] --------------
[22:47:31] Loading plugin: mysql
[22:47:31] >> plugin.mysql: R41-4 successfully loaded.
[22:47:31] Loaded.
[22:47:31] Loaded 1 plugins.
[22:47:32]
[22:47:32] Filterscripts
[22:47:32] ---------------
[22:47:32] Loaded 0 filterscripts.
[22:47:32] [MySQL] Verbindungsaufbau...
[22:47:32] [MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: 1
[22:47:32]
----------------------------------
[22:47:32] MeinScript
[22:47:32] ----------------------------------
[22:47:32] Number of vehicle models: 0
[22:47:53] [connection] 127.0.0.1:60131 requests connection cookie.
[22:47:54] [connection] incoming connection: 127.0.0.1:60131 id: 0
[22:47:54] [join] teso has joined the server (0:127.0.0.1)
[22:48:02] [part] teso has left the server (0:1)
[22:48:23] [connection] 127.0.0.1:60143 requests connection cookie.
[22:48:24] [connection] incoming connection: 127.0.0.1:60143 id: 0
[22:48:24] [join] teso has joined the server (0:127.0.0.1)
[22:49:24] [part] teso has left the server (0:1)
Alles anzeigen
Hier ein Bild von meiner Einstellung der Datenbank
Folgender Neuer Fehler:
[22:04:29] [plugins/mysql] error #1364 while executing query "INSERT INTO accounts (name, password) VALUES ('teso', MD5('test'))": Field 'id' doesn't have a default value
Script compailt ohne fehler:
Hier der Code:
#include <a_samp>
#include <a_mysql>
//Datenbankinformation
#define MYSQL_HOST "127.0.0.1" //IP Adresse des MYSQL Server
#define MYSQL_USER "root" //Benutzername dder angemelet wird
#define MYSQL_PASS "Gr489zp4gl7Loc7thuu4Klom19pom" //password des benutzers
#define MYSQL_DBSE "samp" //Name der Dantenbank
new MySQL:handle; //Die Connection-Handlem über die wir später auf die Tabellen der Datenbank zugreiffen
//FORWARD:
forward OnUserCheck(playerid);
forward OnUserRegister(playerid);
forward OnUserLogin(playerid);
//DIALOGE:
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
//ENUM:
enum pDataEnum
{
p_id,
bool:pLoggedIn,
pName[MAX_PLAYER_NAME],
pAdminlevel,
pMoney,
pFraktion,
pFrank
}
new PlayerInfo[MAX_PLAYERS][pDataEnum];
main()
{
print("\n----------------------------------");
print(" MeinScript");
print("----------------------------------\n");
}
public OnGameModeInit()
{
SetGameModeText("MeinScript");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
MySQL_SetupConnection();
mysql_log();
return 1;
}
public OnGameModeExit()
{
mysql_close(handle);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
if(!PlayerInfo[playerid][pLoggedIn])
{
new query[127];
mysql_format(handle,query,sizeof(query), "SELECT id From accounts WHERE name = '%e'",PlayerInfo[playerid][pName]);
mysql_pquery(handle,query, "OnUserCheck","d",playerid);
}
return 1;
}
public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][p_id] =0;
PlayerInfo[playerid][pLoggedIn] = false;
PlayerInfo[playerid][pAdminlevel] = 0;
PlayerInfo[playerid][pMoney] = 0;
PlayerInfo[playerid][pFraktion] =0;
PlayerInfo[playerid][pFrank] = 0;
GetPlayerName(playerid, PlayerInfo[playerid][pName],MAX_PLAYER_NAME);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//Speichere den Spieler wenn er der Server verlässt
SaveUserStats(playerid);
return 1;
}
public OnUserCheck(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registraiton", "Bitte registriere dich:","Ok","Abbrechen");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung","Bitte Logge dich ein:", "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();
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
return 1;
}
public OnUserLogin(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
//Der Spieler hat ein falsches Passwort eingegeben
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\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)
cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
cache_get_value_name_int(0, "adminlevel", PlayerInfo[playerid][pAdminlevel]);
cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
cache_get_value_name_int(0, "Fraktion", PlayerInfo[playerid][pFraktion]);
cache_get_value_name_int(0, "Frank", PlayerInfo[playerid][pFrank]);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
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("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
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, "Registration", "Bitte registriere Dich:\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 accounts (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
//Das Query wird abgesendet und die playerid an OnUserRegister übergeben
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
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, "Anmeldung", "Bitte logge Dich ein:\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 accounts 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);
return 1;
}
return 0;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
stock MySQL_SetupConnection(ttl = 3)
{
print("[MySQL] Verbindungsaufbau...");
//mysql_log(); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
//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;
}
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 accounts SET adminlevel = '%d', money = '%d', Franktion = '%d', Frank = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pAdminlevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pFraktion], PlayerInfo[playerid][pFrank], PlayerInfo[playerid][p_id]);
//Das Query wird abgesendet
mysql_pquery(handle, query);
return 1;
}
Alles anzeigen
Habe mich ans Register/login System gesetzt so wie im Tutorial von Jeffry.
jetzt will der die daten nicht in die db packen.
Mysql_Log:
[21:14:13] [plugins/mysql] error #1064 while executing query "SELECT id From accounts WHRE name = 'teso'": You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'name = 'teso'' at line 1
Mein Code sieht so aus:
#include <a_samp>
#include <a_mysql>
//Datenbankinformation
#define MYSQL_HOST "127.0.0.1" //IP Adresse des MYSQL Server
#define MYSQL_USER "root" //Benutzername dder angemelet wird
#define MYSQL_PASS "" //password des benutzers
#define MYSQL_DBSE "samp" //Name der Dantenbank
new MySQL:handle; //Die Connection-Handlem über die wir später auf die Tabellen der Datenbank zugreiffen
//FORWARD:
forward OnUserCheck(playerid);
forward OnUserRegister(playerid);
forward OnUserLogin(playerid);
//DIALOGE:
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
//ENUM:
enum pDataEnum
{
p_id,
bool:pLoggedIn,
pName[MAX_PLAYER_NAME],
pAdminlevel,
pMoney,
pFraktion,
pFrank
}
new PlayerInfo[MAX_PLAYERS][pDataEnum];
public OnGameModeInit()
{
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
MySQL_SetupConnection();
mysql_log();
return 1;
}
public OnGameModeExit()
{
mysql_close(handle);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
if(!PlayerInfo[playerid][pLoggedIn])
{
new query[127];
mysql_format(handle,query,sizeof(query), "SELECT id From accounts WHRE name = '%e'",PlayerInfo[playerid][pName]);
mysql_pquery(handle,query, "OnUserCheck","d",playerid);
}
return 1;
}
public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][p_id] =0;
PlayerInfo[playerid][pLoggedIn] = false;
PlayerInfo[playerid][pAdminlevel] = 0;
PlayerInfo[playerid][pMoney] = 0;
PlayerInfo[playerid][pFraktion] =0;
PlayerInfo[playerid][pFrank] = 0;
GetPlayerName(playerid, PlayerInfo[playerid][pName],MAX_PLAYER_NAME);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//Speichere den Spieler wenn er der Server verlässt
SaveUserStats(playerid);
return 1;
}
public OnUserCheck(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registraiton", "Bitte registriere dich:","Ok","Abbrechen");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung","Bitte Logge dich ein:", "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();
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
return 1;
}
public OnUserLogin(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
//Der Spieler hat ein falsches Passwort eingegeben
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\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)
cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
cache_get_value_name_int(0, "Adminlevel", PlayerInfo[playerid][pAdminlevel]);
cache_get_value_name_int(0, "Money", PlayerInfo[playerid][pMoney]);
cache_get_value_name_int(0, "Fraktion", PlayerInfo[playerid][pFraktion]);
cache_get_value_name_int(0, "Frank", PlayerInfo[playerid][pFrank]);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
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("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
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, "Registration", "Bitte registriere Dich:\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) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
//Das Query wird abgesendet und die playerid an OnUserRegister übergeben
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
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, "Anmeldung", "Bitte logge Dich ein:\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);
return 1;
}
return 0;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
stock MySQL_SetupConnection(ttl = 3)
{
print("[MySQL] Verbindungsaufbau...");
//mysql_log(); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
//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;
}
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', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pAdminlevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pFraktion], PlayerInfo[playerid][pFrank], PlayerInfo[playerid][p_id]);
//Das Query wird abgesendet
mysql_pquery(handle, query);
return 1;
}
Alles anzeigen
Habe mich ans Register/login System gesetzt so wie im Tutorial von Jeffry.
Es geht alles ohne probleme nur kommt in der Server-Console:
[20:09:26] Script[gamemodes/meinscript.amx]: Run time error 20: "Invalid index parameter (bad entry point)"
Ich weiß nicht warum runtime 20 kommt ![]()
Mein Code sieht so aus:
#include <a_samp>
#include <a_mysql>
//Datenbankinformation
#define MYSQL_HOST "127.0.0.1" //IP Adresse des MYSQL Server
#define MYSQL_USER "root" //Benutzername dder angemelet wird
#define MYSQL_PASS "" //password des benutzers
#define MYSQL_DBSE "samp" //Name der Dantenbank
new MySQL:handle; //Die Connection-Handlem über die wir später auf die Tabellen der Datenbank zugreiffen
//FORWARD:
forward OnUserCheck(playerid);
forward OnUserRegister(playerid);
forward OnUserLogin(playerid);
//DIALOGE:
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
//ENUM:
enum pDataEnum
{
p_id,
bool:pLoggedIn,
pName[MAX_PLAYER_NAME],
pAdminlevel,
pMoney,
pFraktion,
pFrank
}
new PlayerInfo[MAX_PLAYERS][pDataEnum];
public OnGameModeInit()
{
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
MySQL_SetupConnection();
mysql_log();
return 1;
}
public OnGameModeExit()
{
mysql_close(handle);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
if(!PlayerInfo[playerid][pLoggedIn])
{
new query[127];
mysql_format(handle,query,sizeof(query), "SELECT id From accounts WHRE name = '%e'",PlayerInfo[playerid][pName]);
mysql_pquery(handle,query, "OnUserCheck","d",playerid);
}
return 1;
}
public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][p_id] =0;
PlayerInfo[playerid][pLoggedIn] = false;
PlayerInfo[playerid][pAdminlevel] = 0;
PlayerInfo[playerid][pMoney] = 0;
PlayerInfo[playerid][pFraktion] =0;
PlayerInfo[playerid][pFrank] = 0;
GetPlayerName(playerid, PlayerInfo[playerid][pName],MAX_PLAYER_NAME);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
//Speichere den Spieler wenn er der Server verlässt
SaveUserStats(playerid);
return 1;
}
public OnUserCheck(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registraiton", "Bitte registriere dich:","Ok","Abbrechen");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung","Bitte Logge dich ein:", "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();
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
return 1;
}
public OnUserLogin(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
//Der Spieler hat ein falsches Passwort eingegeben
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\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)
cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
cache_get_value_name_int(0, "Adminlevel", PlayerInfo[playerid][pAdminlevel]);
cache_get_value_name_int(0, "Money", PlayerInfo[playerid][pMoney]);
cache_get_value_name_int(0, "Fraktion", PlayerInfo[playerid][pFraktion]);
cache_get_value_name_int(0, "Frank", PlayerInfo[playerid][pFrank]);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
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("/mycommand", cmdtext, true, 10) == 0)
{
// Do something here
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, "Registration", "Bitte registriere Dich:\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) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
//Das Query wird abgesendet und die playerid an OnUserRegister übergeben
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
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, "Anmeldung", "Bitte logge Dich ein:\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);
return 1;
}
return 0;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
stock MySQL_SetupConnection(ttl = 3)
{
print("[MySQL] Verbindungsaufbau...");
//mysql_log(); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
//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;
}
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', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pAdminlevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pFraktion], PlayerInfo[playerid][pFrank], PlayerInfo[playerid][p_id]);
//Das Query wird abgesendet
mysql_pquery(handle, query);
return 1;
}
Alles anzeigen
mein Tipp nutze lieber das Tutorial für MYSQL von:
Sehr ausführlich beschrieben und ist 50% sicherer als Dini
Wenn ich auf die seite von denn gehe sieht es bei mir so aus:
Bild: https://i.imgur.com/IHetuWf.png
Ich weiß nicht warum oder was das ist aber ich finde es schade das die mit ein Forum werben und dann noch extra geld verlangen für werbung entfernen
Dann poste doch mal bitte das Tutorial um zu sehen wie der jenige es gemacht hat.
Ich gehe mal davon aus das @Rocky Balboa schon gute erfahrung in Samp-Scripting gesammelt hat um ihm da mal zu vertrauen.
@Smok3r ich denke es ist ein englisch server
Warum soll man euch direkt geldspenden nur um die werbung wegzubekommen?
Ich verstehe einfach nicht warum ihr Werbung nicht direkt ausmacht für alle anstatt nur für leute die Spenden.
Wäre die Grafikkarte kaputt würde er überhaupt kein Bild erhalten.
Hiermit biete ich meine WoltLab Burning Board 4.1 Account an.
Ich verkaufe den ganzen Account mit der Lienz. Da ich keine Verwendung dafür habe verkaufe ich die hier im Forum.
Der Account hat keine Plugins ist noch nicht negative aufgefallen auf WBB und somit auch keine verwarnungen/bann vorhanden.
Der Preis für den Account liegt bei 35€ Festpreis.
Zahlungsmethode: Paypal
Mittelsmann: Forummod oder @riconeo
Bild zum Account:
https://www.pic-upload.de/view-35215840/wbbaccount.png.html
Hättest so was lieber für GTA 5 machen sollen denn Samp geht mit den Spieler zahlen sehr stark zurück
Sieht sehr cool aus. Jetzt habe ich voll bock auf euer game.
Ich hoffe man kann bald eine Alpha-Beta testen das wäre so awesome