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.