Wenn du das Debugging nicht hinbekommst, dann lade den ganzen Code hoch und erkläre Schritt für Schritt was du machst, wenn du dem Server beitrittst und ganz genau was passiert. Dann schaue ich mir den Code an und kann es so vielleicht nachvollziehen, warum du bei einem falschen Login gespawnt wirst. Der Fehler kann eigentlich überall sein, je nach dem wie komplex dein Code schon ist.
Beiträge von Jeffry
-
-
Auf der Suche nach dem Problem habe ich das hier gefunden: Server Starten MySQL
Irgendwie lustig, dass es genau der gleiche Code ist.Was passiert eigentlich, wenn du den Code einfach so machst, ohne das ganze andere Zeug:
stock Connect_To_Database()
{
mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
}Hast du die Datenbank bei einem Host, oder liegt die bei dir auf dem Rechner? Falls der Server gehostet ist: Liegt die Datenbank auf dem selben Server? Hast du irgendwelche Zugangsdaten bekommen, von deinem Host?
-
Ich glaube, das liegt gar nicht an der Verbindung, sondern an einem Fehler in einem Code. Poste bitte den Code der dort aufgerufen wird, wenn das im Log kommt.
-
Wie sieht denn der Inhalt dieser Datei aus? Poste den mal, dann mache ich dir das kurz fertig.
EDIT:
Marcel789: Super! -
Ändere das auf jeden Fall mal zu:
if(dialogid==DIALOG_LOGIN)
{
if(response)
{
new name[MAX_PLAYER_NAME],query[128],passwort[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>0)
{
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password='%s'",name,passwort);
mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
}
else
{
SendClientMessage(playerid,ROT,"Gib bitte dein Passwort ein.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Willkommen auf Red-Game0v3r-Reallife,\n\n\n\n Bitte logge dich nun ein!\n\n\n","Login","Abbrechen");
}
}
return 1;
}Wenn es immer noch nicht geht solltest du den Code mal debuggen, das heißt mit prints zwischen den Zeilen bestücken, um den Verlauf des Codes zu wissen, dann findest du heraus, warum du deim Zivi Spawn raus kommst.
Wie du das machst steht hier: [ SCRIPTING ] Debugnachrichten -
Zeige bitte den Code mit dem du OnPasswordResponse aufrufst.
-
Wie sieht es aus wenn du es mit "localhost" machst?
#define SQL_HOST "localhost" -
Eigentlich sollte es klappen, aber es gab schonmal einen Fall, bei dem das auch nicht funktioniert hat.
Mach es mal so:
format(string, sizeof(string), "Test %s", "%"); -
Speicherst du das Passwort etwa in Klartext? Dann ist es auch hier der Fall, dass MySQL der Case egal ist.
Du musst es hashen, also codieren. -
Kommt darauf an. Wenn es über ein Filesystem geht, welches auf einem Linux Server ist, dann ist es Case sensitive. Auf einem Windows Server nicht.
MySQL ist allgemein nicht Case sensitive. Vielleicht gibt es eine Möglichkeit es so einzustellen, dass die Namen Case sensitive erkannt werden, da weiß ich aber nichts.Die allermeisten machen es deshalb nicht über den Name, sondern geben dem Spieler wenn er sich registriert eine eindeutige ID, und greifen über die ID auf die Stats zu, anstatt über den Namen.
Übrigens, SAMP ist auch nicht Case sensitive. Wenn du in einen Server als JEFFRY gehst, und ich komme als Jeffry, komme ich auch nicht rein.
-
Ja.
Das kannst du aber umgehen, indem du einfach immer alles in Kleinbuchstaben speichern lässt. (http://wiki.sa-mp.com/wiki/Tolower) -
Du musst es über ein #define definieren.
#define LOGIN 123
#define REGISTER 124 -
Du hast "string" global definiert. Gehe jeweils in die Zeilen mit der Warnung und entferne das
new string[ZAHLHIER];Dann klappt es.
-
Vergiss sscanf.
Ganz einfach mit strtok.CMD:waren(playerid,params[]){
if(!IsPlayerConnected(playerid)||gPlayerLogged[playerid] == 0)return SendClientMessage(playerid,COLOR_GREY,"Du bist nicht eingeloggt.");
if(PlayerInfo[playerid][pJob] != 14)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Pilot!");
if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 553)return SendClientMessage(playerid, COLOR_GREY, "Du kannst nur mit einer Nevada Waren transportieren!");
new aktion[20],string[128],string2[128],string3[128],menge,preis = menge*15,geld = Waren2Dabei[playerid] * 30+random(80),lohn = Waren3Verkauft[playerid] - 80, idx, tmp[20];
if(!strlen(params)){
SendClientMessage(playerid, COLOR_GOLD, "____________________________|Warenhilfe|____________________________");
SendClientMessage(playerid, COLOR_WHITE, "Benutzung: /waren [Aktion]");
SendClientMessage(playerid, COLOR_WHITE, "Verfügbare Funktionen: kaufen, tauschen, verkaufen, abrechnen");
SendClientMessage(playerid, COLOR_WHITE, "*Kaufen [SF], Tauschen [LS], Verkaufen [LV], Abrechnen [SF]");
SendClientMessage(playerid, COLOR_GOLD, "__________________________________________________________________");
return 1;
}
aktion = strtok(params, idx);
if(!strcmp(aktion,"kaufen",true))
{
print("Kaufen 1");
if(!IsPlayerInRangeOfPoint(playerid, 90.0, -1233.6982,-88.1554,14.9228))return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht am Hangar am San Fiero Airport!");
print("kaufen 2");
if(WarenDabei[playerid] >= 75)return SendClientMessage(playerid, COLOR_GREY, "Du hast schon 75 Waren dabei!");
print("kaufen 3");
tmp = strtok(params, idx);
if(!strlen(tmp))return SendClientMessage(playerid, COLOR_GREY, "Benutzung: /waren kaufen [Anzahl] | *Preis pro Ware: 15$, Maximale Waren: 75");
menge = strval(tmp);
print("kaufen 4");
if(menge < 5 || menge > 75)return SendClientMessage(playerid, COLOR_GREY, "Du musst mindestens 5 Waren und maximal 75 Waren kaufen!");
print("kaufen 5");
if(preis > GetPlayerMoney(playerid))return SendClientMessage(playerid, COLOR_GREY, "Kannst du dir nicht leisten!");
print("kaufen 6");
WarenDabei[playerid] += menge;
GivePlayerMoney(playerid, -preis);
format(string, sizeof(string), "*Du hast dir %d Waren im Wert von %d$ gekauft", menge, preis);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Fliege jetzt zum LS Airport (Roter Marker)");
SetPlayerCheckpoint(playerid, 1888.6704,-2638.9941,13.5469, 8.0);
return 1;
}
//Tauschen, Verkaufen, Abrechnen funktioniert alles, da kein weiterer Parameter benötigt wird.
return 1;
}strtok: http://forum.sa-mp.de/gta-mult…eschnipsel-57#post1965719
-
GivePlayerWeapon(playerid, fInfo[fID][f_waffe1]);
GivePlayerWeapon(playerid, fInfo[fID][f_ammo1]);
GivePlayerWeapon(playerid, fInfo[fID][f_waffe2]);
GivePlayerWeapon(playerid, fInfo[fID][f_ammo2]);zu:
GivePlayerWeapon(playerid, fInfo[fID][f_waffe1], fInfo[fID][f_ammo1]);
GivePlayerWeapon(playerid, fInfo[fID][f_waffe2], fInfo[fID][f_ammo2]); -
Ja, unter der Zeile "SetPlayerVirtualWorld" musst du die GivePlayerWeapon Zeilen einfügen.
Probiere es einfach mal aus, das bekommst du hin. -
Na du musst dem Spieler natürlich auch die Waffen mit GivePlayerWeapon geben.
Falls du das schon hast und es trotzdem nicht geht poste den Code. -
Ändere es zu:
enum fraktEnum
{
f_name[128],
Float:f_x,
Float:f_y,
Float:f_z,
Float:f_r,
f_inter,
f_world,
f_waffe1,
f_ammo1,
f_waffe2,
f_ammo2
}Dann kannst du die 4 Zahlen hinten anfügen.
-
Wie ist denn das enum "fraktEnum" definiert?
Und was genau hast du denn vor? -
Dann ist das der Grund. Du hast mehr Variablen in Gebrauch als dem Compiler lieb ist.
Füge unter die Includes das ein:
#pragma dynamic 100000Falls die Meldung nicht weg geht, erhöhe die Zahl etwas.
Dann sollte es klappen.
EDIT:
XHSD: Freut mich, dass ich helfen konnte.