Kommt drauf an was das System alles können soll. Erkläre mal, was du dir vorstellst.
Beiträge von Jeffry
-
-
Ich danke dir nochmal recht herzlich war ein bisschen dumm von mir. Aber es gibt ja keine dummen Fragen. Kann jedem mal passieren.
Kein Problem, sowas kann man schnell mal übersehen. Kenne ich nur zu gut.
Liegt das vielleicht an den result's?
WP_Hash(hashpass,sizeof(hashpass),result);
Zu
WP_Hash(hashpass,sizeof(hashpass),pass);Sonst wird der WP_Hash aus der Datenbank noch einmal gehasht.
-
Ich denke du meinst hoffentlich den Code hier?
Ja.
Ändere das zu:
stock CreateAccount(playerid)
{
new hashpass[129];
WP_Hash(hashpass,sizeof(hashpass),Spieler[playerid][pPassword]);
new query[256];
format(query,sizeof(query),"INSERT INTO accounts (`Name`,`Passwort`,`Email`,`Geschlecht`) VALUES ('%s','%s','%s','%i')",SpielerName(playerid),hashpass,Spieler[playerid][pEmail],Spieler[playerid][pSex]);
mysql_function_query(MySQL_R31,query,false,"","");
return 1;
}Klappt es dann?
-
Es kommt kein mysql log... ich glaube ich habe einen fehler bei saveplayer
Den Log findest du unter "<server>/logs/plugins/mysql.txt"
Oder bei älteren Versionen unter "<server>/mysql_log.txt"Sollte dort nichts sein, schalte den Log mittels mysql_log(ALL); in OnGameModeInit ein.
-
Der Code gibt zwar keine Fehler raus, allerdings sobald ich in die MySQL - Datenbank gucke steht das Passwort unverschlüsselt da, wie ich es beim Register-System angegeben habe. Hat jemand eine Idee wieso?
Wie sieht der Code dazu aus? Das Speichern beim Registrieren.
-
new mauer[10];
mauer[0] = CreateDynamicObject(19355, 271.65720, -156.67000, -5.60100, 0.00000, 0.00000, 0.00000);
//...
for(new i = 0; i < sizeof(mauer); i++) SetDynamicObjectMaterial(mauer[i], 0, 5134, "wasteland_las2", "newall4-1", 0xFFFFFFFF); -
Was sagt der MySQL Log beim Speichern des Spielers?
-
if(sscanf(params,"is",pID,grund)) return SendClientMessage(playerid,Orange,"INFO: /ban [id] [grund]");
zu:
if(sscanf(params,"is[64]",pID,grund)) return SendClientMessage(playerid,Orange,"INFO: /ban [id] [grund]");Ist die ID des Spielers den du bannst in der Datenbank die 9?
Stimmt das Query? Das musst du selbst prüfen.Gibt der MySQL Log etwas aus?
-
aber hier wird ja auch ALL angegeben. umbenannt habe ich es nicht und wenn ich LOG_ALL einsetzte kommt "undefined symbol"
Stimmt, das hat sich in der R40 auch geändert, habe ich nicht dran gedacht. Da du die R41 nutzt erklärt sich das. "ALL" passt also.
Er sagt nur, dass das plugin geladen wurde und eine Verbindung hergestellt wurde
Du müsstest im Ordner "logs" -> "plugins" eine Datei "mysql.txt" haben, die den Log enthält.
-
format(string,sizeof(string), "%s sagt: %s",
getPlayerName(playerid), text);
zu:
GetPlayerName(playerid, string, MAX_PLAYER_NAME);
format(string,sizeof(string), "%s sagt: %s", string, text); -
Stimmt doch so unter OnGameModeInit, oder?
Anstatt ALL müsste es LOG_ALL heißen, außer du hast das umbenannt.
Welche MySQL Version nutzt du?Sagt der Server Log irgendwas, wenn das MySQL Plugin startet?
-
Ja sie ist exestiert noch nicht. Der Primary key wird jedoch nicht eingetragen ebenfalls wird AUTO INCREMENT nicht eingetragen.
Das sollte dann klappen.
Sicher, dass du vor dem Starten des Servers die Tabelle wieder gelöscht hast (DROP TABLE)?meine Accounts werden nicht gespeichert. Kann mir da jemand helfen?
Was sagt der MySQL Log?
Moin wollte ein Bild in SAMP einfügen mit diesem Code:
In welchem Callback (public) steht der Code?
-
Existiert die Tabelle schon? Wenn ja, dann musst du sie vorher löschen, sonst wird sie mit diesem Befehl nicht neu erstellt.
-
Ich sehe grade noch, dass hier die pID hin muss:
format(query,sizeof(query),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[playerid][id]);
Zu
format(query,sizeof(query),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[pID][id]);Sollte das auch nicht klappen, lass dir das Query per Print ausgeben und poste es dann bitte mal.
-
Ich verstehe nicht warum hier so ein Zirkus darum gemacht wird und dann nicht weiter geholfen wird.
Es könnte so einfach sein.Sorry aber jetzt peil ich das irgendwie gar nicht mehr...
So sollte es aussehen:
Einfach die Variable sich selbst wieder zuweisen (grund in grund schreiben), dann gibt es keine Probleme.
mysql_escape_string(grund, grund);
format(query,sizeof(query),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[playerid][id]);
mysql_function_query(dbhandle,query,false,"","");Den Grund zusätzlich ins Spieler-Array zu schreiben ist nicht notwendig, da der Spieler im selben Moment den Server verlässt, somit ist das nicht mehr notwendig.
ocmd:ban(playerid,params[])
{
if(!isAdmin(playerid,3))return SendClientMessage(playerid,Kaminrot,"ERROR: Du besitzt nicht die benötigten Rechte!");
new pID,grund[64],string[145];
if(sscanf(params,"is",pID,grund)) return SendClientMessage(playerid,Orange,"INFO: /ban [id] [grund]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,Kaminrot,"ERROR: Die Spieler-ID existiert nicht.");
//if(sInfo[pID][alevel] >= sInfo[playerid][alevel])return SendClientMessage(playerid,Kaminrot,"ERROR: Du kannst keinen höheren bzw. gleichrangigen Admin kicken!");
format(string,sizeof(string),"Du wurdest von %s permanent vom Server gebannt.\nGrund: %s\nEntbannanträge an: {FF0000}asd",getPlayerName(playerid),grund);
ShowPlayerDialog(pID,DIALOG_KICKED,DIALOG_STYLE_MSGBOX,">> BANNED",string,"OK","");
format(string,sizeof(string),"%s hat den Server verlassen.(Banned)",getPlayerName(pID));
SendClientMessageToAll(Grau,string);
format(string,sizeof(string),"[BANNED] %s wurde von %s permanent vom Server gebannt. Grund: %s - Typ: Accountban",getPlayerName(pID),getPlayerName(playerid),grund);
SendClientMessageToAll(Blutrot,string);
TogglePlayerControllable(pID,false);
sInfo[pID][banned]=1;
mysql_escape_string(grund, grund);
format(string,sizeof(string),"UPDATE user SET bangrund='%s' WHERE id='%i'",grund,sInfo[playerid][id]);
mysql_function_query(dbhandle,string,false,"","");
savePlayer(pID);
Kick(pID);
return 1;
} -
Was ist an der Abfrage falsch?
Das Problem ist, dass SendClientMessage 1 zurück gibt, wenn die Nachricht gesendet wurde.
Siehe hier: http://wiki.sa-mp.com/wroot/in…unction:SendClientMessageReturn Values:
- 1: The function executed successfully. Success is reported when the string is over 144 characters, but the message won't be sent.
- 0: The function failed to execute. The player is not connected.
Daher gibt deine IsAdmin Funktion beides mal 1 zurück.Da du dir das return im Befehl sparen willst - nehme ich an - kannst du es so schreiben:
stock IsAdmin(playerid, ar)
{
if(sI[playerid][pAdmin] >= ar) return 1;
SendClientMessage(playerid, COLOR_FEHLER, SERVER_KEINADMIN);
return 0;
}Dann im Befehl:
if(IsAdmin(playerid, 3))
{
//Hier darf er den Befehl ausführen
}Die Nachricht wird dann automatisch gesendet, wenn der Spieler nicht zugelassen ist.
-
Problem: keiner kann sich nun anschiessen, egal, ob ich die 2. if-Abfrage habe oder nicht.
Prinzipiell reicht es, wenn du es so machst (OnPlayerGiveDamage):
if(Spieler[damagedid][Eingeloggt] == true)
{
if(GetPlayerTeam(playerid) == GetPlayerTeam(damagedid))
{
GameTextForPlayer(playerid, "~r~Greife deine Kollegen nicht an", 3000, 3);
}
}Jetzt musst du nur allen Cops das Team 1 zuweisen (beim Login, wenn Team 1 ist, SetPlayerTeam zu 1 machen).
Für Zivis muss im Login SetPlayerTeam zu NO_TEAM gesetzt werden, damit sind diese in keinem Team mehr und können alle anderen Spieler verletzen. -
Das wäre die verkürzte Möglichkeit:
Man könnte das sogar noch weiter auf die Spitze treiben, indem man den Zähler "count" weg lässt, und prüft, ob etwas im String steht.
Da dann in der Schleife mit dem if praktisch nur noch eine Anweisung (format) steht, liest es sich auch in einer Zeile problemlos.
ocmd:admins(playerid, params[]) {
new d_info[512];
for(new i; i < MAX_PLAYERS; i++) if(sI[i][pAdmin] > 0) format(d_info, sizeof(d_info), "%s%s%s ( %s )\n", d_info, (sI[i][pAdminDuty] == true ? (HTML_ROT) : (HTML_WEIS)), sI[i][pName], GetAdminRangName(sI[i][pAdmin]));
if(!strlen(d_info)) format(d_info, sizeof d_info, "Keine Administratoren online");
return ShowPlayerDialog(playerid, D_USER_ADMINLIST, DIALOG_STYLE_MSGBOX, ""SERVER_HTML""SERVER_TAG""HTML_WEIS": Adminliste", d_info, "Schliesen", "");
} -
http://wiki.sa-mp.com/wiki/Setproperty
Dort und in den verlinkten dazugehörigen Funktionen findest du alles dazu. -
1. Wozu benutzt man Pvars?
Der Hauptnutzen ist zum einfachen Austausch von Werten auf Spielerebene zwischen Gamemodes und Filterscripts, sprich zum Beispiel Spieler-Statistiken.
Ich empfehle hierzu diesen Thread: http://forum.sa-mp.com/showthread.php?t=571043=> Damit sind auch die Fragen 2 und 3 mit Ja beantwortet.
CallRemoteFunction("HoleDBHandle","d", dbHandle);
Das musst du so schreiben:
new MySQL:handle;handle = MySQL:CallRemoteFunction("HoleDBHandle","");Und im Gamemode:
forward HoleDBHandle();
public HoleDBHandle() return _:handle;Sonst klappt das mit dem Tag nicht und du bekommst einen Tag Mismatch.
=> Frage 5 ist damit beantwortet.