Hiermit:
stock LowerCase(str[]) {
for(new i=0, j=strlen(str); i<j; i++) tolower(str[i]);
return str;
}
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",LowerCase(name));
Dann speichert es alle Namen kleingeschrieben ab.
Hiermit:
stock LowerCase(str[]) {
for(new i=0, j=strlen(str); i<j; i++) tolower(str[i]);
return str;
}
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",LowerCase(name));
Dann speichert es alle Namen kleingeschrieben ab.
Du könntest, mit OnPlayerUpdate abfragen, ob der Spieler in der Luft ist und in einem Fahrzeug (MapAndreas Plugin). Wenn das der Fall ist, dann setzt du eine Spieler Variable auf 1,und wenn sich dann innerhalb der nächsten 5 Sekunden sein Geld ändert (sagen wir bis maximal 100.000) dann gibst du dem Spieler die Differenz die er vor dem Update und nach dem Update hatte, via Server Geld.
Das wäre auch relativ sicher gegen Money Hacker.
Muss in einem Enum normal nicht der letzte Wert ohne Komma da stehen?
Nur wenn man kein Semikolon am Ende des enums hat.
if(mysql_errno() != 0) print("Keine Verbindung zur Datenbank.");
mysql_errno gibt 0 zurück, wenn alles OK ist. Wenn nicht, dann besteht keine Verbindung mehr.
SCMTAEx(-1,"[Server] %s %s hat die Zeit auf %d:00 Uhr gestellt.",AdminNamen[GetLevelIndex(pAdmin[playerid][pAdmin])],name,zeit);
stock GetLevelIndex(level)
{
switch(level)
{
case 0..5: return level;
case 1337: return 6;
case 1338: return 7;
case 1449: return 8;
case 1450: return 9;
}
return 10;
}
Um falsche Levels abzufangen und kein Array zu sprengen:
#define MAX_ADMINS 11
new AdminNamen[MAX_ADMINS][20]={
"Zivilist", //Admin Lvl 0
"Supporter", //Admin Lvl 1
"Admin(2)", //Admin Lvl 2
"Admin(3)", //Admin Lvl 3
"Admin(4)", //Admin Lvl 4
"Admin(5)", //Admin Lvl 5
"Head Admin", //Admin Lvl 1337
"Server Manager", //Admin Lvl 1338
"Scripter", //Admin Lvl 1449
"Server Leitung" //Admin Lvl 1450
"Invalid Level" //Fehler?
};
Nach
WIDx[id] = menge;
fehlt das:
WID[id] = playerid;
Du weist die ID des Spielers der Variable nirgends zu.
format(str, sizeof(str), "X: %0.3f, Y: %0.3f, Z: %0.3f Interior: %d, Virtual World: %d", xPos[0], xPos[1], xPos[2], xInterior, xVirtualWorld);
Könntest du mir da weiter helfen?
Müsste so passen:
Da du jetzt ein anderes Plugin hast, ist die connect Funktion etwas anders.
Die Reihenfolge der Parameter findest du hier:
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_connect
Wenn du die richtige Reihenfolge hast, kann er sich auch wieder zur Datenbank verbinden.
Hier die Erklärungen:
strfind = Sucht einen string in einem string. (z.B. In "Hallo Welt" wird "Welt" gesucht.) Es wird die Stelle des Texts zurückgegeben (in dem Fall 6).
strlen = Länge eines strings. (strlen("Hallo") ist 5, da Hallo 5 Buchstaben hat.)
strval = Wert eines strings. (strval("123") ist 123, als Integer, damit kannst du dann rechnen, mit "123" geht das nicht.)
strcmp = Vergleicht zwei strings mit einander. ("Hallo" und "Hallo" zum Beispiel) Sind beide strings gleich, wird 0 zurückgegeben.
strtok = Splittet einen string am Leerzeichen.
tmp & idx" = Gehört zu strtok. idx Speichert die letzte Position um Ressourcen zu schonen (irrelevant für dich, Hauptsache es ist da). tmp bekommt den Rückgabewert reingeschrieben.
string = "Hallo Welt";
tmp = strtok(string, idx); //Hier steht "Hallo" drin
tmp2 = strtok(string, idx); //Hier steht "Welt" drin
-----------------------------------
So, und zu deinem Befehl. Poste doch bitte mal den Code wie du ihn grade hast.
Füge aber noch als erste Zeile im Befehl ein "print("Test");" ein, und schau, ob das überhaupt geprintet wird, wenn du den Befehl eingibst.
Schau mal, das ist das Query aus dem ReadUser-Public:
format(q, 256, "SELECT * FROM user WHERE name = '%s'", mres);
mysql_query(q);
Laut crashdetect stürzt der Server zwei Zeilen weiter unten ab, also würde ich mal behaupten, dass dieses Query ausgeführt wird und somit geloggt werden muss, ist es aber nicht. Dort würden auch genaue Details zum Fehlergrund stehen.
Also entweder du hast nicht alles kopiert, oder es ist sonst irgendwas daneben gegangen. Kannst du es nochmal probieren, und gleich die Zeit vergleichen, ob der letzte Eintrag in dem MySQL Log mit dem des Absturzes übereinstimmt?
Ich hab grade noch mal die Wiki angeschaut, zu dem:mysql_fetch_row(buffer, "|");
ändere das mal zu:
mysql_fetch_row_format(buffer, "|");
oder zu:
mysql_fetch_row_format(buffer);
Kannste beides probieren.
Kannst vergessen, danke an IPrototypeI für den Hinweis, da hab ich gar nicht drauf geachtet. Die meisten hier verwenden das von BlueG, eigentlich alle.
Meep.
Update das Plugin erst mal.
Das ist aber nicht alles, oder?
Zumindest nicht das, was direkt vor dem Absturz geloggt wurde.
Die Log-Zeilen vor den Absturz müssten diese Abfrage beinhalten
SELECT * FROM user WHERE name = 'IRGENDWASHIER'
Die Zeilen, die genau vor dem Absturz geprintet werden sind wichtig, du hast, so wie das aussieht, die Dinge beim Server-Start gepostet.
Welches Plugin verwendest du denn?
Das von BlueG? Dann nutze das:
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_log
mysql_log mit LOG_ALL
Warum hast du die ersten 10 Zeilen der ReadUser Funktion nicht debuggt? In denen ist der Fehler, da der erste print nicht aufgerufen wird in der Funktion.
Mach das noch.
Schalte zudem noch den Debug des MySQL Plugins das du benutzt an, bzw. ändere den Log Modus des Plugins, so dass alles was das Plugin macht geprintet wird.
Dann poste nochmal Log und Funktion.
Debuggen = prints zwischen die Zeilen, wie vorhin auch.
Wir müssen ja wissen, vor welcher Zeile der Server abstürzt.
Mach das mal, poste dann den Code mit den Prints und das was im Server_log steht.
Debuggen der ReadUser Funktion.
In der Funktion ReadUser stimmt was bei mysql_fetch_row nicht. Poste mal die die Funktion ReadUser, bzw. debugge sie vorher erst mal.
Es liegt also nicht an OnPlayerConnect.
Jetzt haste erst nicht geschrieben wie du es haben willst, nur was du nicht weißt.
Jetzt ist es ja so, mit dem Code den ich dir gegeben habe, dass die Kamera grade nach hinten oben geht, wenn man die Türe anstarrt. Wie soll es deinem Wunsch nach sein, wie soll sich die Kamera bewegen, wenn das Ergebnis schonmal stimmt?
Wie willst du es denn? ![]()
format(string3,sizeof(string3),"Bargeld: %s%0.0f€",sMoney(floatround(sInfo[playerid][Money],floatround_floor)), (sInfo[playerid][Money]-Float:floatround(sInfo[playerid][Money],floatround_floor))*100.0 );
Versuch es mal so, das müsste dann die Cents anzeigen.
Hast du vielleicht Timer laufen, die das verursachen könnten?
Bevor wie lange raten, nimm mal das crashdetect Plugin und poste dann was im Log steht wenn der Server abstürzt.