Problem mit OnPlayerText [SQLite]

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link

  • public OnPlayerText(playerid,text[])
    {
    if(Mute[playerid] == 1)
    {
    SendClientMessage(playerid, -1, "Du kannst derzeit nicht sprechen, da du gemuted bist!");
    return 0;
    }
    new mstr[128],kstr[128],str[128], DBResult:Result,name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid,name,sizeof(name));
    format(str,sizeof(str), "SELECT * FROM `BadWords`");
    format(kstr,sizeof(kstr), "%s wurde vom [SYSTEM] gekickt! - Grund: 3 Schimpfwort Verwarnungen!", name);
    Result = db_query(Badwords,str);
    if(db_num_rows(Result) > 0)
    {
    format(mstr,sizeof(mstr), "[Schimpfwortfilter]: %s wurde für 15 Minuten gemuted!", name);
    SendClientMessageToAll(-1,mstr);
    MT[playerid] = SetTimerEx("Muted",60000*15,false, "i",playerid);
    Mute[playerid] = 1;
    MuteVW[playerid] ++;
    if(MuteVW[playerid] == 3)return Kick(playerid), SendClientMessageToAll(-1, kstr);
    } else return 1;
    db_free_result(Result);
    return 0;
    }


    Versuche hier Wörter von meiner Datenbank auszulesen und dementsprechend zu muten, falls das Wort in der Datenbank existiert, aber werde bei jedem Buchstabe gekickt (?)


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Ich hab zwar mit SQLite nix am Hut aber, müsstest du nicht irgendwo text[] mit den Badwords vergleichen ? ?(

  • Richtige Abfrage:
    SPALTENNAME durch deine Spalte ersetzen und text durch den Text den du "durchsuchen" möchtest... ;)

    SQL
    format(str,sizeof(str), "SELECT * FROM `BadWords` WHERE SPALTENNAME like '%s'",text);
  • Naja ich dachte ungefähr so:


    "SELECT * FROM `BadWords` where 'Word'' = %s", text);


    Funktioniert aber leider nicht, werde immer noch gemutet, frage das Wort ja ab.


    //E: Geht jetzt soweit, allerdings kann ich jetzt nen Schimpfwort eingeben, ohne gemuted zu werden.


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • format(str, sizeof(str), "SELECT * FROM BadWords where Word = '%s' ", text);


    Die ganzen Anführungszeichen kannst du dir fast alle sparen.
    Falls es so noch immer nicht tut poste nochmal deinen momentanen Code.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • format(str, sizeof(str), "SELECT * FROM BadWords where Word = '%s' ", text);


    Die ganzen Anführungszeichen kannst du dir fast alle sparen.
    Falls es so noch immer nicht tut poste nochmal deinen momentanen Code.


    Naja, das mit den Anführungszeichen ist ne Angewohnheit, es geht ja jetzt soweit, allerdings werden mir keine Wörter bei /Badwords angezeigt (Listendialog, kein Wort erscheint)


    Und ich kann alles in den Chat eingeben, passiert nichts:



    public OnPlayerText(playerid,text[])
    {
    if(Mute[playerid] == 1)
    {
    SendClientMessage(playerid, -1, "Du kannst derzeit nicht sprechen, da du gemuted bist!");
    return 0;
    }
    new mstr[128],kstr[128],str[128], DBResult:Result,name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid,name,sizeof(name));
    format(str,sizeof(str), "SELECT * FROM `BadWords` WHERE Word = %s", text); //Text mit Datenbank vergleichen
    format(kstr,sizeof(kstr), "%s wurde vom [SYSTEM] gekickt! - Grund: 3 Schimpfwort Verwarnungen!", name);
    Result = db_query(Badwords,str);
    if(db_num_rows(Result) > 0)
    {
    format(mstr,sizeof(mstr), "[Schimpfwortfilter]: %s wurde für 15 Minuten gemuted!", name);
    SendClientMessageToAll(-1,mstr);
    MT[playerid] = SetTimerEx("Muted",60000*15,false, "i",playerid);
    Mute[playerid] = 1;
    MuteVW[playerid] ++;
    if(MuteVW[playerid] == 3)return Kick(playerid), SendClientMessageToAll(-1, kstr);
    } else return 1;
    db_free_result(Result);
    return 0;
    }

    Der OnPlayerText Abschnitt




    CMD:badwords(playerid,params[])
    {
    if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid, -1, "Du bist kein Admin");
    new DBResult:Result;
    Result = db_query(Badwords,"SELECT * FROM `BadWords`");
    new Rows = db_num_rows(Result);
    new str[500];
    print("test");
    for(new i = 0; i< Rows; i++)
    {
    format(str,sizeof(str),"%s\n",str);
    db_next_row(Result);
    printf("%s",str);
    }
    print("Test2");
    ShowPlayerDialog(playerid, Liste, DIALOG_STYLE_LIST,"Schimpfwörter", str, "OK", "");
    db_free_result(Result);
    return 1;
    }

    Hier der Befehl für die Wortliste


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Du liest ja auch nirgends die aus deinem Result aus. Und hier übergibst du immer nur einen leeren string.
    format(str,sizeof(str),"%s\n",str);
    Dort muss noch das Wort hin, das du aus der jeweiligen Zeile ausliest.


    Falls du nicht weißt wie das geht, sie uns bitte welches Plugin du benutzt.

  • Mit WHERE vergleichst du dann nur den ganzen Satz... ;)
    Zudem ist es sehr Ressourcenlastig bein OnPlayerText immer zu prüfen...