Zeig mal GetFraktionsRang
Beiträge von Kasakow
-
-
Ja da bin ich ebenso 2 mal hängengeblieben, mit dem richtigen Format geht das aber.
-
Ich könnte was mit anfangen, würde zwar den Code umbauen aber ansonsten gut.
-
@Kaliber
Bis jetzt hat mein Quellcode den Server nicht gecrasht.
Es ist mir eben beim Prozess Killen mittels STRG + C aufgefallen und für mich ist es wie ein simulierte Servercrash. Aber ich füge dem Code echt mal eine Zwischenspeicherung hinzu. Das sollte es dann doch bringen. -
Es geht mir eher darum das wenn der Server Crasht, die letzten Daten nicht verloren gehen.
-
-
Moin.
Ich experimentiere sehr viel rum und mir ist etwas aufgefallen. Ich teste meinen Code auf einem Linux System und wenn ich den Prozess beende, dann reagiert der Server nicht schnell genug um OnPlayerDisconnect aufzurufen. Ich habe in der Wiki gelesen das es mit Ongamemodeexit nicht funktionieren wird beim Prozessende und/-oder Server Crash nicht aufgerufen. Merkt man eine 5-10 Minütige gesamt Speicherung in der Performance? Oder gibt es da eine andere Methode? -
Versuch mal dein Anti Virus auszuschalten, mir macht das diesbezüglich auch nur Probleme.
-
Das InfoBox Include kann ich auch empfehlen, ist nicht sonderlich penetrant und einfach zu bedienen.
-
Dann lass die Nachricht doch ganz weg und mach ein Textlabel zum Eingangspickup mit Stadthalle, dann weiß der jenige wo er rein geht.
-
Ich verspreche, wenn die Funktion kommt, dislike ich jeden Beitrag von den Befürwortern.
War mal aktiviert, es wird nicht mehr aktiviert. Da bin ich mir sicher.
-
Dagegen, wenn man einen Beitrag nicht mag, like't man ihn einfach nicht.
-
Bei mir funktioniert das auch nie, wird wohl echt ein Fehler sein.
-
Man sollte es dabei beruhen lassen und draus lernen, 50 Euro ist es nicht wert.
-
@LordDemacia
Auch wenn mein Code selber manchmal unordentlich ist, möchte dir diesbezüglich, mal ein paar Tipps geben.Verwende wie ich bereits gestern erwähnte Makros, es ist nicht sehr "gut", überall im Skript, jederzeit, den Spieler Namen erneut auszulesen, wenn es einmal auch reicht.
Wenn du eine Variable erstellst, erstelle sie alle auf einmal, und nicht einzeln.
Verwende doch Tab anstatt Leerzeichen um deine Zeilen einzurücken, das ist schrecklich, aber genau so, habe ich es in meiner Anfangszeit auch gemacht, ist aber so ziemlich hässlich, benutze Tab.
Ich weiß dass es bei einer bestimmten sscanf Version der Fall war, dass man die String Länge auch bei der Nutzung angeben musst, probiere es mal ohne, ich kann es auch problemlos ohne Angabe nutzen.
Frage am Besten gleich ab ob er Eingeloggt ist & nicht ob er nur Online ist.
Ban & Kick hintereinander? Das macht kein Skin, bei der Ban Funktion wird man ebenfalls gekickt.
Nutze Banfix oder einen eigenen Timer der die das mit dem Kickfix übernimmt, sprich, wenn du es so machst, wird dem Spieler selbst, die Nachricht nicht angezeigt, warum er gebannt/gekickt wurde.Soo
Wie gesagt, erstell dir mal in deiner Datenbank Struktur ein Feld was sich 'ban' nennt & richte es beim Speichern & Laden ein.
Habe dir mal den Code umgeschrieben & kleine Erklärungen unterkommentiert, hoffentlich kannst du was mit anfangen.
//Makro für das Spielernamen ausgeben, kann für jeden Spieler der Online ist, genutzt werden.
#define getName(%0) PlayerInfo[%0][pName]//Bei deinem Player Enum fügst du hinzu & pBan
pName[MAX_PLAYER_NAME+1],
pBan,//Einmalig bei OnPlayerConnect
GetPlayerName(playerid, getName(playerid), MAX_PLAYER_NAME+1);CMD:ban(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 1)return SendClientMessage(playerid, -1,"Du bist kein Admin. Du kannst den Befehl nicht nutzen!");
new PID, str[128];
if(sscanf(params, "us", PID, str)) return SendClientMessage(playerid, -1, "[Benutze] /ban [playerid] [Grund]");
if(!PlayerInfo[PID][pLoggedIn])return SendClientMessage(playerid, -1, "Spieler ist nicht eingeloggt!");
format(str, sizeof str, "'%s' wurde gebannt von [Admin] '%s'. [Grund:] %s", getName(PID), getName(playerid), str),
SendClientMessageToAll(-1, str),
pInfo[PID][pBan] = 1,
Kick(PID);
return 1;
}//EDIT Admin Abfrage abgeändert. Banfix ist ein Include, lad es dir mal runter.
Meine SSCANF Version, die ich nutze. <- Download
BanFix - Include | Download -
Ist zwar eine nette Geste, aber gibt es schon bestimmt paar mal zu finden im Internet.
-
Ah ne, Whice hat Recht.
Wenn du willst, dass dir der Skin angezeigt wird, setze ihn auch.Schreib es mal so:
//z.B unter die Includes
//Makros
#define getSkin(%0) pInfo[%0][pSkin] //%0 ist der erste Platzhalter
#define setSkin(%0,%1) pInfo[%0][pSkin]=%1,SetPlayerSkin(%0,%1) //%0 = playerid, %1 = integerwert z.B für den Skinpublic OnUserLogin(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
}
else
{
cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
cache_get_value_name_int(0, "skin", PlayerInfo[playerid][pskin]);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]),
setSkin(playerid, PlayerInfo[playerid][pSkin]);
}
return 1;
}Und speichern kannst es so lassen oder du nutzt, getSkin(playerid); .. Kommt auf das gleiche hinaus
-
Zeig mir mal OnUserRegister bitte.
Werden denn andere Daten gespeichert? Teste das mal.@Whice.
Er lässt den Skin aber mit der Variable speichern, von daher, passt das.
Ich rate eh zu Makros, die erleichtern einiges, vor allem, man muss nicht für den jeden Scheiss ein "stock" schreiben.//Makro Anwendung
#define getSkin(%0) PlayerInfo[%0][pSkin] //%0 ist der erste Platzhalter
#define setSkin(%0,%1) PlayerInfo[%0][pSkin]=%1,SetPlayerSkin(%0,%1) //%0 = playerid, %1 = integerwert z.B für den Skin -
Poste mal nur die Error.log
mysql_log(ALL); & dann mir mal nur den Inhalt der Error.log zeigen.Zeig mal wie du das Passwort prüfen lässt & die genaue Datenbank Struktur. Also ein komplett Screen.
Und auch mal bitte, wie du das Konto erstellen lässt.Kleiner Tipp am Rande. Nutze SHA1 oder SHA256, MD5 ist fürn Arsch.
-
Was hatten denn eigentlich das "GetPlayerSkin(playerid);" am Ende deiner Speicherfunktion für einen Sinn, meine.. du führst es ganz am Ende aus.
Mit angepasstem Laden sowie Query von der Speicherfunktion, funktioniert es immer noch nicht?
Lass dir mal deine Spielerstats nach dem Laden ausgeben und aktiviere mal die MySQL Log und sag uns bescheid was drinne steht an Errors usw.