Kannst du das nächstes Mal bitte nicht alles in eine Zeile schreiben, so erkennt man gar nichts.
Aber gut, es wird also so übergeben, dann liegt es nicht an der Datenbank.
Wie hast du denn
[sEmail]
in deinem enum definiert? Poste mal das enum.
Kannst du das nächstes Mal bitte nicht alles in eine Zeile schreiben, so erkennt man gar nichts.
Aber gut, es wird also so übergeben, dann liegt es nicht an der Datenbank.
Wie hast du denn
[sEmail]
in deinem enum definiert? Poste mal das enum.
Gut.
Ja du musst den Spieler auch mindestens einmal speichern, sodass das Query an die Datenbank geschickt wird, sonst wird die natürlich nichts angezeigt.
Möglicherweise steht es auch in einer extra Log Datei, mysql_log oder so, so ist es bei mir. Kommt auf das Plugin an.
Dann haste es nicht richtig gemacht.
Zeig mal wie du es gemacht hast.
Hast du auch SavePlayer ausgeführt? Sonst steht da natürlich nichts.
#define SPAM (6)
Musst wohl das ändern. Ich benutze JunkBuster nicht, daher kann ich es dir nicht genau sagen, aber was ich dir sagen kann, und was auch Double-O-Seven empfiehlt: Lies die Readme! Dort steht alles drin.
#define USE_DATABASE
zu:
//#define USE_DATABASE
Wie schon gesagt.
Auf Anfrage in PN:
Schalte doch mal den MySQL Debug an (mysql_log oder mysql_debug, je nach Plugin) und setze es auch LOG_ALL bzw. 1, je nach Plugin. Dann poste bitte was im Server Log geprintet wird wenn du das Query ausführst.
#define USE_DATABASE
Hast du diese Zeile kommentiert? Wenn nein, mach das.
Lass dir nach
strmid(tmpp, MD5_Hash(pass), 0, 24, 25);
Folgendes ausgeben:
printf("tmpp: %s", tmpp);
printf("result: %s", result);
Stimmen die beiden Werte überein? Was wird geprintet?
Suche nach
#error
Und kommentiere die Zeilen aus oder entferne sie.
Das sind benutzerdefinierte Error Meldungen die in Junkbuster eingebaut wurden, damit man das Readme auch wirklich liest. Also du hast es sicher nicht genau genug gelesen.
Wird denn LoadAccount ausgeführt, oder bricht es vorher ab? Wenn es ausgeführt wird, dann poste die Funktion bitte.
Es kann sein (das kommt vor), dass das zurückgegebene Paket schneller war als das, was gesendet wurde, daher bekommst du noch die alte Zahl bei GetPlayerSkin.
Mach es so:
format(query, sizeof(query), "UPDATE `accounts` SET `Skin`='101' WHERE `Name`='%s'", SpielerInfo[playerid][pName]);
Dann sollte es gehen.
Sieht gut aus.
Achte darauf, dass dein query groß genug ist, 228 sieht knapp aus.
Falls es nicht klappt, poste bitte was im server_log steht wenn du den MySQL Debug Modus (oder Log Modus) an machst.
Hier eine Funktion um einem Spieler eine Waffe komplett oder nur teilweise abzunehmen:
stock RemovePlayerWeapon(playerid, weaponid, ammo = 0) //©Jeffry
{
new w = GetPlayerWeapon(playerid), plyWeapons[13], plyAmmo[13];
for(new slot = 0; slot <= 12; slot++)
{
GetPlayerWeaponData(playerid, slot, plyWeapons[slot], plyAmmo[slot]);
if(plyWeapons[slot] == weaponid)
{
if(ammo == 0 || plyAmmo[slot] <= ammo)
{
if(w == plyWeapons[slot]) w = 0;
plyAmmo[slot] = 0;
plyWeapons[slot] = 0;
}
else
{
plyAmmo[slot]-=ammo;
}
}
}
ResetPlayerWeapons(playerid);
for(new slot = 0; slot <= 12; slot++)
{
GivePlayerWeapon(playerid, plyWeapons[slot], plyAmmo[slot]);
}
SetPlayerArmedWeapon(playerid, w);
return 1;
}
Benutzung:
Keywords: EntferneWaffe, EntferneAmmo, SpielerWaffeWeg, EntferneSpielerWaffe, EntferneSpielerAmmo, RemovePlayerAmmo, RemoveWeaponFromPlayer, WaffeAbnehmen, RemoveWeapon.
format(query, sizeof(query), "UPDATE accounts SET Adresse = %i, Email = '%s', Adminlevel = %d WHERE Spielername = '%s'",
Strings brauchen diese ' ' Gänsefüßchen.
Außerdem solltest du aus Sicherheitsgründen Strings immer escapen (mysql_real_escape_string).
Du hast doch bei der erfolgreichen Registration das hier:
SpawnPlayer(playerid);
Wirst du nicht gespawnt, wanderst du direkt in die Class-Selektion?
Falls ja, dann musst du abfragen, ob der Spieler sich eben registriert hat, und wenn ja, dann wird er direkt nochmal gespawnt wenn er in die Class-Selektion kommt.
(Spieler-Variable auf 1 bei Registration => Abfragen ob 1 bei OnPlayerRequestClass => Zu 0 setzen => SetSpawnInfo & SpawnPlayer).
Wieso? Man kann doch scrollen
In einem Server in dem zwei Spieler sind die sich untereinander nicht unterhalten (Chat) und auch sonst keine Nachrichten gesendet werden mag das egal sein. Wenn der Server aber mal 100 Spieler online hat, dann hast du die Zeit dazu gar nicht, weil die 10 Zeilen (oder 20 wenn auf max.) in ein zwei Sekunden schon wieder nach oben geschossen sind, da hauste nur noch auf die Bild (hoch) Taste oder drehst am Rad (im wahrsten Sinne des Wortes!).
Ich spreche aus Erfahrung, genau deshalb habe ich vor langer langer Zeit meinen /admins Befehl (damals auch im Chat, da es noch keine Dialoge gab) sofort auf Dialog umgeschrieben, da hat man das Problem nicht, dass es abhaut.
Also warum dann den Chat spammen wenn es auch wesentlich komfortabler geht.
Außerdem hat man in Dialogen die wesentlich besseren Darstellungsmöglichkeiten.
Ich gehe davon aus, dass du gekickt wirst wenn du dich in der Class-Selektion registrierst, oder? Nicht vom Code, sondern von SA-MP.
Nutze dazu:
http://wiki.sa-mp.com/wiki/SetSpawnInfo
vor SpawnPlayer.
SendClientMessage ein ausgaben limit von 168 oder mehr zeichen hat.
Das Limit liegt bei 144 Zeichen.
Im Chat das auszugeben ist nicht so sinnvoll, vor allem wenn es zum Beispiel 10 Admins sind.
COMMAND:admins(playerid)
{
new string[1024]; //Admins ändern sich doch dynamisch, da muss man ja jedes mal den Code neu kompilieren...einfach 1024 oder so nehmen, dann passt das.
for(new i,l=GetMaxPlayers();i<l;i++) {
if(!IsPlayerConnected(i) || !User[i][Admin]) continue;
format(string,sizeof(string),"%s%s: %s\n",string,Adminrang[User[i][Admin]],PlayerName(i));
}
if(!strlen(string)) return SendClientMessage(playerid,GRAU,"Es sind keine Admins Online!");
format(string, sizeof(string), "Admins online:\n\n%s", string);
ShowPlayerDialog(playerid, 1337, DIALOG_STYLE_MSGBOX, "Admins", string, "Close", "");
return 1;
}
Benutzt du einen Streamer? Wenn nein, dann hast du wohl das Limit überschritten, und solltest eine Streamer benutzen.