Warum sollte er von aussen erreichbar sein?!
ich dachte er wollte von aussen die DB erreichen. Wenn nicht sorry
Warum sollte er von aussen erreichbar sein?!
ich dachte er wollte von aussen die DB erreichen. Wenn nicht sorry
du musst dort einen User erstellen der von aussen erreichbar ist. im Host muss anstatt der IP oder Localhost ein % stehen.
MrMonat kannst du mit Ajax umgehen? hast du in der Richtung schon was gemacht?
Wie sieht es mit OOP aus?
wenn das Fahrzeug schaden bekommt speicherst du den ab, File oder DB,
bei 100% Schaden machst du einfach einen respawn auf die Coordiante wo das Fahrzeug gespeichert ist. Die Daten dafür stehen ja in der File/DB drinn.
Ich verwende diesen Delimiter, sollte also stimmen,wenn nicht,mit Komma,sollte aber gehen
Such mal nach sscanf 2 Tutorial
also ich hab nun alle nachfolgenden Varianten ausprobiert.
scheinbar klappts nicht oder der Fehler liegt wo anders
mysql_real_escape_string(GetName(playerid), EscapedName);
format(Query, sizeof(Query), "SELECT * FROM `user_info` WHERE `username` = '%s'", EscapedName);
mysql_query(Query);
mysql_store_result();
// if(mysql_num_rows() != 0) sscanf(Query, "p<|>e<is[45]iis[34]ffffffis[16]iiiiiiiiiiiiiiffff>",pUserData[playerid]);
// if(mysql_num_rows() != 0) sscanf(Query, "p<,>e<is[45]iis[34]ffffffis[16]iiiiiiiiiiiiiiffff>",pUserData[playerid]);
// if(mysql_num_rows() != 0) sscanf(Query, "p<;>e<is[45]iis[34]ffffffis[16]iiiiiiiiiiiiiiffff>",pUserData[playerid]);
// if(mysql_num_rows() != 0) sscanf(Query, "e<p<|>is[45]iis[34]ffffffis[16]iiiiiiiiiiiiiiffff>",pUserData[playerid]);
// if(mysql_num_rows() != 0) sscanf(Query, "e<p<,>is[45]iis[34]ffffffis[16]iiiiiiiiiiiiiiffff>",pUserData[playerid]);
// if(mysql_num_rows() != 0) sscanf(Query, "e<p<;>is[45]iis[34]ffffffis[16]iiiiiiiiiiiiiiffff>",pUserData[playerid]);
// sscanf(Query, "p<|>e<ds[45]dds[34]ffffffds[16]ddddddddddddddffff>",pUserData[playerid]);
// sscanf(Query, "e<p<|>ds[45]dds[34]ffffffds[16]ddddddddddddddffff>",pUserData[playerid]);
ok. ich habs mal weggelassen. nun sind schonmal die falschen Daten auch weg.
ist denn bei dem sscansf der Parameter vorne richtig? e<p<|>
Ich habe da keine Erfahrung was sscansf angeht und hab auch keinen zum fragen. nur hier halt.
das was ich habe habe ich durch lesen angenommen.
edit
Kevin, du meinst ich soll jedes Feld da einzelnd angeben? Das wollte ich gerade nicht. Ich dachte es würde auch als Array ankommen
ja PaddyBoy
ich nutze auch das MySQL. und das Select funktioniert ja auch. nur eben das die Daten nicht im Array landen. beim print zeigt er die daten auch an die aus der DB kommen.
stock getAccountData(playerid)
{
new EscapedName[MAX_PLAYER_NAME];
if(GetPVarInt(playerid, "Authentication") == 1)
{
mysql_real_escape_string(GetName(playerid), EscapedName);
format(Query, sizeof(Query), "SELECT * FROM `user_info` WHERE `username` = '%s'", EscapedName);
mysql_query(Query);
mysql_store_result();
mysql_fetch_row_format(Query, "|");
print(Query);
sscanf(Query, "e<p<|>ds[45]dds[34]ffffffds[16]ddd>",pUserData[playerid]);
}
else print("[MySQL ERROR] getAccountData() was called, but to a non-connected ID.");
mysql_free_result();
}
Alles anzeigen
so siehts immo aus. in der Konsole bekomme ich vom print() diese Ausgabe:
[10:01:44] Incoming connection: 127.0.0.1:63536
[10:01:44] [join] Testuser has joined the server (0:127.0.0.1)
[10:01:48] 1|Testuser|170|200|5aae391f8b738903e41c0c0a8cd3a028|-2121.839400|1199.909200|11.281400|273.644400|100.000000|100.000000|5|0|22|0|1
[10:01:48] userID: Testuser; Name: Testuser; Skin: ; Money: ; Pass: ;
[10:01:48] PosX: 903e41c0c0a8cd3a028; PosY: 03e41c0c0a8cd3a028; PosZ: 3e41c0c0a8cd3a028; PosA: e41c0c0a8cd3a028;
wie man sieht kommen Die Daten aus der Datenbank
wenn ich aber dann darunter die Testausgabe des Arrays mache, bzw Inhalte davon, kommen keine bzw falsche Daten dort an.
doch das ist sauber
im Prinzip brauchst du nur die ersten beiden Code Blöcke beachten. Der MySQL Select wird ja ausgeführt, ansonsten hätte ich ja nicht die Testausgabe in der Konsole.
Ich mach mal 6x f und dann schau ich mal ob tatsächlich daran liegt.
Hallo. Ich hab gedacht ich versuch mich mal an einem eigenen Script für SA. Aber so langsam bin ich am verzweifeln.
naja, ich hab ein enum erstellt welches ja die daten bekommen soll:
enum PlayerData
{
pUserID,
pName[MAX_PLAYER_NAME],
pSkin,
pMoney,
pPass[34],
Float: pPosX,
Float: pPosY,
Float: pPosZ,
Float: pPosA,
Float: pHealth,
Float: pArmour,
pLevel,
pIP[16],
pPlaytime,
pSpeedo,
pLastLogin
};
new pUserData[MAX_PLAYERS][PlayerData];
Alles anzeigen
in einem Stock hole ich die daten aus der Datenbank:
new EscapedName[MAX_PLAYER_NAME];
mysql_real_escape_string(GetName(playerid), EscapedName);
format(Query, sizeof(Query), "SELECT * FROM `user_info` WHERE `username` = '%s'", EscapedName);
mysql_query(Query);
mysql_store_result();
// Die Daten werden zwar mit print() in der Konsole ausgegeben, kommen aber nicht im Enum an
mysql_fetch_row_format(Query, "|");
print(Query);
sscanf(Query, "e<p<|>ds[45]dds[34]ffffddds[16]ddd>",pUserData[playerid]);
Alles anzeigen
der stock wird in OnDialogResponse aufgerufen, nachdem das Password überprüft wurde.
in der Konsole kann ich die Testausgabe aus dem Stock sehen.
dort kommt sowas an:
1|Testuser|170|200|5aae391f8b738903e41c0c0a8cd3a028|-2121.839400|1199.909200|11.281400|273.644400|100.000000|100.000000|5|0|22|1|0
das OnDialogResponse wird wieder über einen Stock aufgerufen
stock InitPlayerConnection(playerid)
{
format(Query, sizeof(Query), "SELECT * FROM `user_info` WHERE `userName` = '%s'", GetName(playerid));
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() >= 1) // hat der user einen ingame Acc dann hier weiter, PW abfragen
{
mysql_free_result();
new plrIP[16];
GetPlayerIp(playerid, plrIP, sizeof(plrIP));
format(Query, sizeof(Query), "SELECT userIP FROM `user_info` WHERE `userName` = '%s' AND `userIP` = '%s'", GetName(playerid),plrIP);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)// war der User schonmal hier mit dieser IP-Adresse
{
SetPVarInt(playerid, "JustLogged", 1); // Wenn wir mit der IP schonmal da waren
SendClientMessage(playerid, 0x009600AA, "Auto Logged in!");
}
else// ansonsten das Passwort abfragen
{
format(Query, sizeof(Query), "SELECT userPass FROM `user_info` WHERE `userName` = '%s'", GetName(playerid));
mysql_query(Query);
mysql_store_result();
mysql_free_result();
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Login / Authentication Process", "Hallo Spieler.\n\nBitte gibt dein Password hier ein.", "Login", "Abbrechen");
SendClientMessage(playerid, COLOR_WHITE, "Your account exists. Please enter your password to proceed.");
}
}
Alles anzeigen
dort wird im else z.b. ShowPlayerDialog augerufen und zwar den 1.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 1: // registrierte User Login Dialog
{
if(!response)
{
SendClientMessage(playerid, COLOR_BRIGHTRED, "Auf Wiedersehen!");
Kick(playerid);
}
else if(strlen(inputtext) == 0) // wenn kein PW eingegeben wird, 0 = kein Zeichen
{
SendClientMessage(playerid, COLOR_ORANGE, "Du hast kein Password eingegeben. Bitte gib das richtige ein!");
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Authentication", "Welcome!\n\nI need you to input the password for this account.", "Login", "Cancel");
}
else
{
//new string[700];
new pwstr[34];
new teststr1[800];
new teststr2[800];
GetFromAccount(GetName(playerid), "userPass", pwstr);
new str[34];
str = MD5_Hash(inputtext);
if(!strcmp(str,pwstr, true))
{
SetPVarInt(playerid, "Authentication", 1);
SetPVarInt(playerid, "JustLogged", 1);
getAccountData(playerid);
format(teststr1, sizeof(teststr1), "userID: %s; Name: %s; Skin: %s; Money: %s; Pass: %s;",
pUserData[playerid][pUserID],
pUserData[playerid][pName],
pUserData[playerid][pSkin],
pUserData[playerid][pMoney],
pUserData[playerid][pPass]);
print(teststr1);
format(teststr2, sizeof(teststr2), "PosX: %s; PosY: %s; PosZ: %s; PosA: %s;",
pUserData[playerid][pPosX],
pUserData[playerid][pPosY],
pUserData[playerid][pPosZ],
pUserData[playerid][pPosA]);
print(teststr2);
SetPlayerColor(playerid, COLOR_WHITE);
//TogglePlayerSpectating(playerid, 0);
SetSpawnInfo(playerid, 0, pUserData[playerid][pSkin], pUserData[playerid][pPosX], pUserData[playerid][pPosY], pUserData[playerid][pPosZ], pUserData[playerid][pPosA], 0, 0, 0, 0, 0, 0);
SetPlayerScore(playerid, pUserData[playerid][pPlaytime]); //Sets players score
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "test case 1 - Incorrect password. Please try again!");
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Authentication", "Welcome!\n\nI need you to input the password for this account.", "Login", "Cancel");
}
}
}
}
Alles anzeigen
bei diesen Testausgaben müssten doch die Daten aus dem enum drinn sein. Sind sie aber nicht.
Dadurch weiss das Script auch nicht wo ich spawnen soll, und ich bleibe in der Luft hängen.
public OnPlayerSpawn(playerid)
{
if(GetPVarInt(playerid, "JustLogged") == 1)
{
GivePlayerMoney(playerid, pUserData[playerid][pMoney]);
SetPlayerScore(playerid, pUserData[playerid][pPlaytime]);
SetPlayerSkin(playerid, pUserData[playerid][pSkin]);
SetPlayerPos(playerid, pUserData[playerid][pPosX], pUserData[playerid][pPosY], pUserData[playerid][pPosZ]+3);
SetPlayerFacingAngle(playerid, pUserData[playerid][pPosA]);
DeletePVar(playerid, "JustLogged");
}
Alles anzeigen
was mache ich denn falsch? Warum kommen die Daten im Enum nicht an? Ich hab da schon vieles Ausprobiert, nichts hat bisher zum Ziel geführt.
wurde der pawno als Administrator ausgeführt?