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?

    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);

    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);

    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?

    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.


    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:SendClientMessage


    Return 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", "");
    }

    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.