mysql_format(mysql_connection, querry, sizeof(querry), "SELECT * FROM 'users' WHERE 'username' = '%s'", player_name);
zu:
mysql_format(mysql_connection, querry, sizeof(querry), "SELECT * FROM users WHERE `username` = '%s'", player_name);
Beiträge von Jeffry
-
-
Was steht im Server Log, wenn du es so schreibst?
updateHouse(id)
{
new string[128];
printf("id: %d", id);
printf("Lösche Pickup: %d", HouseInfo[id][hPickup]);
if(HouseInfo[id][hPickup] != -1)
{
DestroyPickup(HouseInfo[id][hPickup]);
}
printf("Lösche Label: %d", _:HouseInfo[id][hText]);
if(HouseInfo[id][hText] != Text3D:-1)
{
Delete3DTextLabel(HouseInfo[id][hText]);
}
if(!strlen(HouseInfo[id][hBesitzer]))
{
HouseInfo[id][hPickup] = CreatePickup(1273,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
format(string,sizeof(string),"Zum Verkauf\nPreis: %i$\nKauflevel: %i\n/buyhouse",HouseInfo[id][hPreis],HouseInfo[id][hKauflevel]);
HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
}
else
{
HouseInfo[id][hPickup] = CreatePickup(1272,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
format(string,sizeof(string),"Besitzer: %s\nWert: %i$\nKauflevel: %i\n/enter",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis],HouseInfo[id][hKauflevel]);
HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
}
printf("Pickup erstellt: %d", HouseInfo[id][hPickup]);
printf("Label erstellt: %d", _:HouseInfo[id][hText]);
return 1;
} -
Poste bitte was in deinem MySQL Log steht, wenn du diesen Code ausführst.
-
Alles klar, super!
Zwecks dem Code:
Daher der Link. Du musst den Reiter Quellcode über der Schriftart nutzen, nicht den Editor.
-
Dann mach das. Setze es über das Query.
-
Poste bitte mal einen Screenshot deiner Tabellenstruktur aus der Datenbank.
-
Hast du das hier in die erste Zeile von OnGameModeInit eingefügt?
for(new i=0; i<sizeof(HouseInfo); i++)
{
HouseInfo[i][hPickup] = -1;
HouseInfo[i][hText] = Text3D:-1;
} -
Uh, tatsächlich.
Hast du im Compiler eine mehrzeilige Meldung mit vielen Zahlen stehen?
-
Mach bitte dieses Zitat weg, das stört nur.
Dann poste bitte nochmal den update-Stock und dein OnGameModeInit.
-
Kannst du den Code von den beiden Prints posten?
-
format(string,sizeof(string),"+ Gehalt: %i$ \n+ Zinsen %i$ (%f Prozent) \n- Steuern: %i$ (%f Prozent)",GetRangLohn(playerid),Rechnung*Server[Zinsen],Server[Zinsen],Rechnung*Server[Steuern],Server[Steuern]);
-
Kannst du zeigen, an was du das erkennst? Hast du einen print gesetzt? Wenn ja, kannst du das mal im Code zeigen, und das was ausgegeben wird?
-
Wie hast du Server und das enum dazu deklariert?
-
Welche ist die Zeile 186?
-
Erst http://wiki.sa-mp.com/wiki/SetSpawnInfo -> Setzen
Dann http://wiki.sa-mp.com/wiki/TogglePlayerSpectating -> Auf 0 setzen
Dann SetPlayerPos. -
if(HouseInfo[id][hPickup])
{
DestroyPickup(HouseInfo[id][hPickup]);
}
if(HouseInfo[id][hText])
{
Delete3DTextLabel(HouseInfo[id][hText]);
}zu:
if(HouseInfo[id][hPickup] != -1)
{
DestroyPickup(HouseInfo[id][hPickup]);
}
if(HouseInfo[id][hText] != Text3D:-1)
{
Delete3DTextLabel(HouseInfo[id][hText]);
}Und ganz oben bei OnGameModeInit:
for(new i=0; i<sizeof(HouseInfo); i++)
{
HouseInfo[i][hPickup] = -1;
HouseInfo[i][hText] = Text3D:-1;
} -
Ohh, jetzt seh ich's.
if(rows==0)
zu:
if(rows!=0)Was aber bedeutet, dass dein Cache leer ist, sprich du hast ein falsches Passwort eingegeben. Aber mach die Änderung auf jeden Fall mal.
-
Da haben wir doch den Fehler schon.
Nimm den root Benutzer ohne Passwort:
#define db_host "127.0.0.1"
#define db_user "root"
#define db_pass ""
#define db_db "DATENBANKNAME"Das ist in 99% aller Fälle standardmäßig so eingestellt.
Dein user "samp" wird nicht die richtigen Berechtigungen haben, das ist auf localhost (dein Rechner) so eingestellt, standardmäßig zumindest.
Deshalb benutze, den root - User ohne Passwort, der hat ALLE Berechtigungen. Dem kannst du später auch, je nach Client, ein Passwort geben. -
Debugge es so:
public OnHousesLoad()
{
printf("OnHousesLoad aufgerufen.");
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
printf("num_rows: %d", num_rows);
if(!num_rows)return 1;
for(new i=0; i<num_rows; i++)
{
printf("i: %d", i);
new id = getFreeHouseID();
printf("id: %d", id);
HouseInfo[id][h_x] = cache_get_field_content_float(i,"h_x",dbhandle);
HouseInfo[id][h_y] = cache_get_field_content_float(i,"h_y",dbhandle);
HouseInfo[id][h_z] = cache_get_field_content_float(i,"h_z",dbhandle);
HouseInfo[id][ih_x] = cache_get_field_content_float(i,"ih_x",dbhandle);
HouseInfo[id][ih_y] = cache_get_field_content_float(i,"ih_y",dbhandle);
HouseInfo[id][ih_z] = cache_get_field_content_float(i,"ih_z",dbhandle);
HouseInfo[id][hInterior] = cache_get_field_content_int(i,"h_interior",dbhandle);
printf("Koordinaten: %f/%f/%f", HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z]);
new tmp_name[MAX_PLAYER_NAME];
cache_get_field_content(i,"besitzer",tmp_name,dbhandle);
strmid(HouseInfo[id][hBesitzer],tmp_name,0,sizeof(tmp_name),sizeof(tmp_name));
HouseInfo[id][hID] = cache_get_field_content_int(i,"id",dbhandle);
new string[128];
printf("Besitzer: %s", HouseInfo[id][hBesitzer]);
if(!strlen(HouseInfo[id][hBesitzer]))
{
HouseInfo[id][hPickup] = CreatePickup(1273,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
format(string,sizeof(string),"Zum Verkauf\nPreis: %i$\n/buyhouse",HouseInfo[id][hPreis]);
HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
}
else
{
HouseInfo[id][hPickup] = CreatePickup(1239,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
format(string,sizeof(string),"Besitzer: %s\nWert: %i$\n/enter",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis]);
HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
}
printf("string: %s", string);
}
printf("Fertig.");
return 1;
}Dann poste was im Server Log steht, wenn du die Häuser laden lässt.
Gegebenenfalls auch gleich das, was im MySQL Log steht. -
Nein, das ist nicht egal. Wenn das Array nur eine Größe von 24 Zeichen hat (wovon eines das EOS Zeichen ist), dann kannst du nur 23 Zeichen dort rein packen (mehr geht nicht).
Du kannst zwar mehr eingeben, es wird aber nicht mehr in der Variable drin stehen.Daher kann strlen davon auch nicht größer als 23 werden, somit ist >= 24 nie wahr.
Ändere das Rangname[24] zu Rangname[25], und in sscanf das [24] zu [25], dann sollte es klappen.
EDIT: (Post unten)
Equ: Gerne