Hast du mal beim Callback geprintent?
Oben im Code-Tag steht in der Zeile 69 printf, der String wird nicht geprintet bzw. ist „leer“.
Hast du mal beim Callback geprintent?
Oben im Code-Tag steht in der Zeile 69 printf, der String wird nicht geprintet bzw. ist „leer“.
Kaliber hat dir den richtigen Weg genannt. In der Webentwicklung ist es genauso wie in SAMP, wobei bei SAMP auch die Tabellen oder Spalten den Wert bspw. der Unicode-codierung haben muss.
Es liegt ein Fehler meinerseits vor, was den Charakternamen betrifft, muss es ja, der Charaktername kann aus unerklärlichen Gründen irgendwie nicht in die String Variable cInfo[playerid][c_Name] gespeichert werden. Ich hab Mal eine ältere Version des Gamemodes verwendet was ich immer als sogenannter Backup mache, da wird der Charaktername korrekt ausgegeben, wobei ich beim aktuellen Gamemode nichts an der Auslesung verändert habe.
Hier Mal der Callback wo der Charaktername aus der Datenbank geladen wird:
public SpawnCharakter(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows)
{
if(!sCheckMade[playerid]) SetTimerEx("SobeitCheck", 500, false, "i", playerid);
cache_get_value_name_int(0, "id", cInfo[playerid][c_DBID]);
cache_get_value_name(0, "Name", cInfo[playerid][c_Name], 21);
cache_get_value_name_int(0, "Slot", cInfo[playerid][c_Slot]);
cache_get_value_name_int(0, "Fraktion", cInfo[playerid][c_Fraktion]);
cache_get_value_name_int(0, "Rang", cInfo[playerid][c_Rang]);
cache_get_value_name_int(0, "Skin", cInfo[playerid][c_Skin]);
cache_get_value_name_int(0, "DienstSkin", cInfo[playerid][c_DienstSkin]);
cache_get_value_name_int(0, "Hausschluessel", cInfo[playerid][c_houseKey]);
cache_get_value_name_float(0, "PosX", cInfo[playerid][c_PosX]);
cache_get_value_name_float(0, "PosY", cInfo[playerid][c_PosY]);
cache_get_value_name_float(0, "PosZ", cInfo[playerid][c_PosZ]);
cache_get_value_name_float(0, "PosR", cInfo[playerid][c_PosR]);
cache_get_value_name_float(0, "Leben", cInfo[playerid][c_Leben]);
cache_get_value_name_float(0, "Weste", cInfo[playerid][c_Weste]);
cache_get_value_name_int(0, "Hunger", cInfo[playerid][c_Hunger]);
cache_get_value_name_int(0, "Durst", cInfo[playerid][c_Durst]);
cache_get_value_name_int(0, "Hygiene", cInfo[playerid][c_Hygiene]);
cache_get_value_name_int(0, "Energie", cInfo[playerid][c_Energie]);
cache_get_value_name_int(0, "Morde", cInfo[playerid][c_Morde]);
cache_get_value_name_int(0, "Tode", cInfo[playerid][c_Tode]);
cache_get_value_name_int(0, "Interior", cInfo[playerid][c_Int]);
cache_get_value_name_int(0, "Level", cInfo[playerid][c_Level]);
cache_get_value_name_int(0, "Respektpunkte", cInfo[playerid][c_Respektpunkte]);
cache_get_value_name_int(0, "Zeit_PayDay", cInfo[playerid][c_Zeit_PayDay]);
cache_get_value_name_int(0, "Geld", cInfo[playerid][c_Geld]);
cache_get_value_name_int(0, "VirtualWorld", cInfo[playerid][c_VWorld]);
SetPlayerSkin(playerid, cInfo[playerid][c_Skin]);
SetPlayerPos(playerid, cInfo[playerid][c_PosX], cInfo[playerid][c_PosY], cInfo[playerid][c_PosZ]);
SetPlayerFacingAngle(playerid, cInfo[playerid][c_PosR]);
SetPlayerInterior(playerid, cInfo[playerid][c_Int]);
SetPlayerVirtualWorld(playerid, cInfo[playerid][c_VWorld]);
cInfo[playerid][c_Logged] = true;
cInfo[playerid][c_FrakEinladung] = false;
cInfo[playerid][c_FrakEinladungID] = -1;
SetCameraBehindPlayer(playerid);
UnfreezePlayer(playerid);
for(new i = 0; i < sizeof(SRP_Startmenu_Home[]); i++) { PlayerTextDrawHide(playerid, SRP_Startmenu_Home[playerid][i]); }
for(new i = 0; i < sizeof(SRP_Startmenu_Headline[]); i++) { PlayerTextDrawHide(playerid, SRP_Startmenu_Headline[playerid][i]); }
for(new i = 0; i < sizeof(SRP_Startmenu_LogReg[]); i++) { PlayerTextDrawHide(playerid, SRP_Startmenu_LogReg[playerid][i]); }
for(new i = 0; i < sizeof(SRP_Startmenu_SelChar[]); i++) { PlayerTextDrawHide(playerid, SRP_Startmenu_SelChar[playerid][i]); }
for(new i = 0; i < sizeof(SRP_Startmenu_AddChar[]); i++) { PlayerTextDrawHide(playerid, SRP_Startmenu_AddChar[playerid][i]); }
for(new i = 0; i < sizeof(SRP_Startmenu_AboutUs[]); i++) { PlayerTextDrawHide(playerid, SRP_Startmenu_AboutUs[playerid][i]); }
for(new i = 0; i < sizeof(SRP_Startmenu[]); i++) { PlayerTextDrawHide(playerid, SRP_Startmenu[playerid][i]); }
CancelSelectTextDraw(playerid);
ShowSpielerHUD(playerid);
ShowPlayerProgressBar(playerid, ProgressBarLeben);
ShowPlayerProgressBar(playerid, ProgressBarWeste);
ShowPlayerProgressBar(playerid, ProgressBarHunger);
ShowPlayerProgressBar(playerid, ProgressBarDurst);
ShowPlayerProgressBar(playerid, ProgressBarHygiene);
ShowPlayerProgressBar(playerid, ProgressBarEnergie);
SetCharakterFood(playerid, cInfo[playerid][c_Hunger]);
SetCharakterWater(playerid, cInfo[playerid][c_Durst]);
SetCharakterHygiene(playerid, cInfo[playerid][c_Hygiene]);
SetCharakterEnergy(playerid, cInfo[playerid][c_Energie]);
SetCharacterHealth(playerid, cInfo[playerid][c_Leben]);
SetCharacterArmour(playerid, cInfo[playerid][c_Weste]);
SetPlayerMoneyEx(playerid, cInfo[playerid][c_Geld]);
SetPlayerScore(playerid, cInfo[playerid][c_Level]);
printf("Charaktername: %s", cInfo[playerid][c_Name]);
Spielerlabel[playerid] = Create3DTextLabel(cInfo[playerid][c_Name], COLOR_WHITE, cInfo[playerid][c_PosX], cInfo[playerid][c_PosY], cInfo[playerid][c_PosZ], 40.0, false);
Attach3DTextLabelToPlayer(Spielerlabel[playerid], playerid, 0.0, 0.0, 0.4);
t_1S[playerid] = SetTimerEx("Timer1S", 1000, true, "i", playerid);
}
return 1;
}
Alles anzeigen
Wie man sehen kann, sollte der Charaktername korrekt aus der Datenbank gelesen werden, was der ja allerdings nicht tut, bei der alten Version ist es 1:1 derselbe Callback, nichts verändert, aber allerdings möchte es nicht in die Variable speichern lassen.
Um Fehler bei Umlauten zu beseitigen, muss es auf utf8 eingestellt sein. Zwecks der Charsetsetzung in deinen Script, schaue dir die Dokumentation deiner MySQL Version mal an.
Die Kollation ist in der Datenbank als auch im Gamemode mithilfe der Charset-Setzung bereits auf utf8mb4_general_ci eingestellt, hab nämlich Mal ein Befehl erstellt wodurch die Rubrik Behörden in die Tabelle erstellt wird, der Umlaut Ö wird durch ein ? ersetzt. Ich denke Mal das es auf der Kollation utf8_general_ci sein muss, korrigiert mich wenn ich falsch liege.
Hast du die Funktion nach mysql_connect verwenden, bzw, dann, wenn du schon mit der Datenbank verbunden bist?
Ich hab es unter mysql_connect geschrieben, währenddessen er sich mit der Datenbank verbindet. Ich füge es mal unter printf, da wo der Server mit der Datenbank dann verbunden ist.
Nur zur Klarstellung, hattest du dann neue Daten gespeichert und das damit getestet?
Denn dass die alten immer noch nicht funzen ist klar, es sei denn du änderst die manuell über phpmyadmin oder so.
Ich hab tatsächlicher Weise es mit den alten Datensätze/Einträge getestet, werde eben die Einträge manuell per PHPMyAdmin temporär eine andere Bezeichnung geben und es dann wieder zur die originalen Bezeichnung ändern.
//edit
Es hat sich nichts geändert, Charaktername wird immer noch nicht ausgegeben und im Dialog werden die Umlaute immer noch nicht richtig dargestellt, heißt in dem Sinne, dass beide Probleme weiterhin bestehen.
Ändere das Charset zurück und pass das Charset für die MySQL Querys an (wie oben gezeigt mit der Funktion).
Sobald ich die Funktion mysql_set_charset("utf8mb4_general_ci", handle); einfüge, kann der sich nicht mehr zur Datenbank bzw. zum MySQL-Server verbinden und gibt mir aus, dass keine Verbindung aufgebaut werden kann.
[11.10.2020 - 18:59:30] [MySQL] Verbindungsaufbau...
[11.10.2020 - 18:59:30] [MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.
[11.10.2020 - 18:59:30] [MySQL] Starte neuen Verbindungsversuch (TTL: 2).
[11.10.2020 - 18:59:30] [MySQL] Verbindungsaufbau...
[11.10.2020 - 18:59:30] [MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.
[11.10.2020 - 18:59:30] [MySQL] Starte neuen Verbindungsversuch (TTL: 1).
[11.10.2020 - 18:59:30] [MySQL] Verbindungsaufbau...
[11.10.2020 - 18:59:30] [MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.
[11.10.2020 - 18:59:30] [MySQL] Bitte prüfen Sie die Verbindungsdaten.
[11.10.2020 - 18:59:30] [MySQL] Der Server wird heruntergefahren.
Ändere das mal darauf und dann erstell mal ein neues, und schau, ob es funzt
Ich hab die komplette Datenbank Kollation auf latin1_swedish_ci geändert, dazu die Optionen das alle Tabellen sowie Spalten auf latin1_swedish_ci geändert werden, aber ohne Erfolg, dass Problem besteht weiterhin mit dem Charaktername und das die Umlaute im Navi Dialog nicht richtig dargestellt werden.
Hilfreich wäre hier die Struktur deiner Tabelle, in welcher Kodierung du die Spalten hast.
Die Datenbank Kodierung (Tabellen sowie Spalten) ist auf utf8mb4_general_ci, also auf der Standard Kodierung.
mach where Anweisung vor Order by
Mit dem Statement SELECT * FROM navipoint WHERE GenId = '1' ORDER BY `NID` DESC funktioniert das ganze, Problem mit Listdialog das alle Navipunkte die in der Db sind in allen Rubriken angezeigt wird, hab ich mit einer IF-Bedingung unterbunden, jz besteht nur noch das Probem mit den Charakternamen! Zum Thema Navi nochmal, irgendwie wird im Spiel die Umlaute im Dialog nicht richtig dargestellt, es lädt die aus der Db raus, der Screen ist im Anhang sowie unter dem Satz, damit ihr euch ein besseres Bild davon machen könnt!
Bei /stats sehe ich nicht, das c_name mitgeladen wird oder wird es beim Login geladen?
Die Variable wird bei dem Callback SpawnCharakter(playerid) aus der Datenbank gelesen und in die Variable gespeichert, aber anscheinend speichert er die nicht richtig in die Variable.
Sprich: die Datensätze werden nicht gefunden? Dann gib die Syntax mal bei phpmyadmin bei SQL ein schaue, was dir angezeigt wird.
Ich hab es mal in PHPMyAdmin eingetragen sowie ausführen lassen, sehe das es an "ORDER BY" liegt und gibt mir den Fehler "Unerwartete Datensatzanforderung. (near "ORDER BY" at position 24)" aus.
Zum anderen wenn ich es richtig sehe, wird bei der foreachschleife (Z. 41) mehrmals die String Variable beschrieben, je nach dem wie viele Datensätze vorhanden sind, in diesen Fall solltest du innerhalb der schleife 2 Variablen verwenden Bspw. mainstring und String wo du mit strcat den String bei Mainstring anfängst. Sonst wird string immer überschrieben und immer nur einmal angezeigt.
Ganz genau, eben nicht, da ich einen Listen-Umbruch mittels "\n" am Ende des strings drin stehen habe und beim Anfang des strings dann der derzeitige mit den anderen kombiniert/zusammengeführt wird, somit füllt sich der string und überschreibt nicht den derzeitigen wo was drinsteht.
Zwecks der Charakternamen, printe mal die MySQL Anweisung. Vllt liegt da der Fehler.
Bei Charaktername steht dann dieses Zeichen "[?]".
Guten Mitternacht liebe Breadfish Gemeinschaft,
bin gerade dabei ein dynamisches Navigationssystem zur entwickeln, darunter darf man sich
vorstellen, dass man Kategorien erstellen, bearbeiten und löschen kann, nicht nur das sondern
auch Routen erstellen, bearbeiten und löschen kann, allerdings hab ich das Problem, dass sich
die Datensätze von der Navigationspunkte Tabelle mit der dazugehörige Kategorie die in der Db
als Datensatz gespeichert ist nicht im Spiel angezeigt wird, natürlich braucht man auch die
Navigationskategorie Tabelle, aber da liegt kein Fehler vor, da alles perfekt ausgegeben wird.
Mein Vorhaben wäre, wenn ich z.b. die Kategorie "Behörden" auswähle, dann in einem neuen Dialog
alle Navigationspunkte angezeigt werden die der Kategorie "Behörden" entsprechen. Ein Anliegen
wäre da noch und zwar wird auf mysteriöse Art und Weise den Namen des jeweiligen Charakters
nicht ausgegeben, was seltsam ist.
Der Code vom Navigationssystem:
ocmd:navi(playerid, params[])
{
mysql_query(handle, "SELECT * FROM "NG_Table" ORDER BY `NGID` DESC");
if(!cache_num_rows())return print("- Es wurden keine Navigationskategorien gefunden!"), ShowPlayerDialog(playerid, D_ERR_MSG, DIALOG_STYLE_MSGBOX, "{FFFFFF}["Servertag"] Navigationssystem", "{FF0000}Es sind keine Navigationskategorien in der Datenbank vorhanden.", "", "Schließen");
new id, string[1024];
format(string, sizeof(string), "{FFFFFF}Kategorie:\t{FFFFFF}Beschreibung:\n");
for(new i; i < cache_num_rows(); i++) {
cache_get_value_name_int(i, "NGID", id);
cache_get_value_name(i, "Genname", nG_Info[id][nG_Name], 24);
cache_get_value_name(i, "Gendescr", nG_Info[id][nG_Descr], 24);
Iter_Add(navGenres, id);
}
foreach(new i : navGenres)
format(string, sizeof(string), "%s\n%s\t%s\n", string, nG_Info[i][nG_Name], nG_Info[i][nG_Descr]);
ShowPlayerDialog(playerid, D_NAVI, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}["Servertag"] Navigationssystem", string, "Weiter", "Abbruch");
return 1;
}
// OnDialogResponse
case D_NAVI:
{
if(!response)return ListClickID[playerid] = -1;
ListClickID[playerid] = listitem+1;
new query[128];
mysql_format(handle, query, sizeof(query), "SELECT * FROM "NP_Table" ORDER BY `NID` DESC WHERE GenId = '%d'", ListClickID[playerid]);
mysql_query(handle, query);
if(!cache_num_rows())return print("- Es wurden keine Navigationspunkte gefunden!")/*, SendErrorMessage(playerid, "")*/;
new id, headstr[48];
format(headstr, sizeof(headstr), "{FFFFFF}"Servertag" Navigationssystem -> %s", nG_Info[ListClickID[playerid]][nG_Name]);
format(string, 64, "{FFFFFF}Ortsname:\n");
for(new i; i < cache_num_rows(); i++) {
cache_get_value_name_int(i, "NID", id);
cache_get_value_name(i, "Naviname", nP_Info[id][nP_Name], 24);
cache_get_value_name_float(i, "PosX", nP_Info[id][nP_PosX]);
cache_get_value_name_float(i, "PosY", nP_Info[id][nP_PosY]);
cache_get_value_name_float(i, "PosZ", nP_Info[id][nP_PosZ]);
cache_get_value_name_int(i, "mIcon", nP_Info[id][nP_mIcon]);
Iter_Add(navPoints, id);
}
foreach(new i : navGenres)
format(string, sizeof(string), "%s\n%s\n", string, nP_Info[i][nP_Name]);
if(!id) ShowPlayerDialog(playerid, D_ERR_MSG, DIALOG_STYLE_MSGBOX, "{FFFFFF}["Servertag"] Navigationssystem", "{FF0000}Es sind keine Navigationspunkte in der Datenbank vorhanden.", "", "Schließen");
ShowPlayerDialog(playerid, D_NAVI_SELECTED, DIALOG_STYLE_TABLIST_HEADERS, headstr, string, "Navigieren", "Zurück");
return 1;
}
case D_NAVI_SELECTED:
{
if(!response)return ListClickID[playerid] = -1, ocmd_navi(playerid, "");
SetPlayerCheckpoint(playerid, nP_Info[ListClickID[playerid]][nP_PosX], nP_Info[ListClickID[playerid]][nP_PosY], nP_Info[ListClickID[playerid]][nP_PosZ], 3.0);
format(string, sizeof(string), "Navi:{FFFFFF} Ihre gewünschte Route wird berechnet.. "HEX_RED"Ziel:"HEX_WHITE" %s", nP_Info[ListClickID[playerid]][nP_Name]);
SCM(playerid, COLOR_RED, string);
ListClickID[playerid] = -1;
return 1;
}
Alles anzeigen
Die Funktion der Charakternamen Ausgabe & der Befehl dazu:
ocmd:stats(playerid)
{
new string[512];
mysql_format(handle, string, sizeof(string), "SELECT Betrag FROM `kontos` WHERE `Besitzer_ID` = '%d'", cInfo[playerid][c_DBID]);
mysql_query(handle, string);
new tempVar, k_Bilanz, Bargeld;
cache_get_value_name_int(0, "Betrag", tempVar);
k_Bilanz = tempVar;
Bargeld = cInfo[playerid][c_Geld];
if(!cInfo[playerid][c_Logged])return SendErrorMessage(playerid, "Du musst dafür eingeloggt sein!");
format(string, sizeof(string), "{FF0000}[Allgemein]{FFFFFF}\n\nName: %s\nTeam-Status: %s\nLevel: %d\nRespektpunkte: %d/%d\nZeit bis PayDay: %d Minuten\nMorde: %d\nTode: %d\n\n{FF0000}[Vermögen/Besitztum]{FFFFFF}\n\nBargeld: %d\nKonto Bilanz: %d\nHausschlüssel: %d\n\n{FF0000}[Beruf/Fraktion]{FFFFFF}\n\nFraktion: %s\nRang: %s (%d)",
cInfo[playerid][c_Name], GetAdminRang(playerid), cInfo[playerid][c_Level], cInfo[playerid][c_Respektpunkte], cInfo[playerid][c_Level] * 4, cInfo[playerid][c_Zeit_PayDay], cInfo[playerid][c_Morde], cInfo[playerid][c_Tode], Bargeld, k_Bilanz, cInfo[playerid][c_houseKey], fInfo[cInfo[playerid][c_Fraktion]][f_Name], GetFraktionsRang(playerid), cInfo[playerid][c_Rang]);
ShowPlayerDialog(playerid, _D_STATS, DIALOG_STYLE_MSGBOX, "{FFFFFF}Statistiken", string, "{FFFFFF}Schließen", "");
return 1;
}
stock CharakterName(playerid)
{
new Name[32];
format(Name, sizeof(Name), "%s", cInfo[playerid][c_Name]);
return Name;
}
Alles anzeigen
Ps: Falls die Codeabschnitte nicht ausreichen sollten, um den Fehler zur finden, dann schreibt drunter.
Ich hab bisher noch nie mit ner doppelten Auslesung und das mergen gearbeitet, deshalb in dieser Sache unerfahren.
Mit freundlichem Gruß,
Szertockz
[20:11:42] [ERROR] CMySQLQuery::Execute[OnPasswordResponse] - (error #1054) Unknown column 'user' in 'field list'
Einmal im Pawno die Suche öffnen und folgendes suchen:
Dann ersetzen durch:
Mfg, Szertockz
Servus liebe Breadfish-Gemeinschaft
Ich hab folgendes Problem und zwar bekomme ich jedesmal sobald Ich auf mein lokalen Gameserver verbinden möchte eine „Keine Rückmeldung“ Meldung oben im Header-Bereich beim Titel (wo die Version des Launcher‘s) im SA:MP Launcher. Vor einigen (2 - 3) Tagen hat noch alles super funktioniert, aber als ich das eine mal aufn lokalen Gameserver verbunden war, hat sich mysteriöser Weise mein SA:MP geschlossen, der Launcher ebenfalls, als ich in der Suche „samp“ eingetragen hab
und dann draufgeklickt hab stand da irgendwas mit Verknüpfungsfehler, bin dann zum Verzeichnis gesprungen worin sich mein SA:MP befinden sollte und hininstalliert hab, aber die „samp.exe“ war spurlos verschwunden, was ich mir nicht erklären konnte. Ich würde mich freuen, wenn jmd mir bei dem Problem helfen könntet, hab schon diverse Lösungswege getestet z.b. GTA SA neuinstalliert (Cracked = No CD / No Steam) und SA:MP Version 0.3.7 R3 ebenfalls erneut auf‘n neuen Verzeichnis installiert, aber ohne Erfolg, hätte nämlich sehr gern das „Santos Roleplay“-Skript weiterentwickelt, in der Zeit wo ich kein Internet hab.
Ps: Es kann sein, dass dieses Thema schon zählige Male durchgekaut wurde, aber kann jz auch kaum im Internet suchen, da ich sehr oft kein Netz hab.
//edit
Hinweis: Mein Internet läuft wieder einwandfrei und ich benutze als Betriebssystem Windows 10 Home.
Mit freundlichen Grüßen
Euer Szertockz
An sich gar keine schlechte Map, allerdings find's ich es viel zu modern für die Umgebung, siehe die Gebäuden an :/, aber dennoch eine wirklich tolle Map, hast trotzdem sehr schön gemacht. Props gehen raus. ((:
MfG
Szertockz
Dieses Thema wurde schon sehr oft hier im Forum durchgeschaut, kannst gern die SuFu verwenden, um dir ein kostenloses oder ein kostenpflichtiges zur beschaffen. Wenn du wirklich Webentwicklung erlernen möchtest, solltest du dich mit frotend und backend befassen.
MfG Szertockz