[Filterscript]|><| If-Abfrage(?) funktioniert nicht! |><|

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
  • Hier geht's zum Pawn Code des Filterscripts.


    Schönen guten Abend liebe Leser/Innen,
    folgendes Problem beschäftigt mich schon seit 15 Uhr:


    Ich habe mir ein kleines Filterscript gebastelt, was auch geladen wird.
    Die Funktion dahinter ist, dass wenn ein Spieler mit den jeweiligen Namen auf den Server connectet,
    etwas bestimmtes 'ausgeführt' wird.


    Nur das oben beschriebende Filterscript funktioniert nicht, was für ein Wunder.
    Es lädt, es printet auch den Text aus, der unter OnFilterScriptInit zufinden ist.


    Nur wenn ich mich nun mit einem der jeweiligen Namen einlogge, passiert leider nix.
    Weder werde ich gebannt, noch printet er dort irgendetwas.


    Ich habe dann einmal das Jede-Zeile-Print-Verfahren gemacht, er hört ab Zeile 30 (Vor der Klammer) auf.


    Sollte ich jedoch, zuvor eine IP angeben, und GetPlayerIP auskommentieren, so bannt er die angegebende IP.


    Bisher habe ich mich an Hauke, dem Ersteller der Block Variante gewendet, sowie in ICQ an BloodyEric.
    Vielen Dank bisher für eure Hilfe.


    Der Compiler (Pawno) sagt mir keinerlei Errors oder Warnungen an.


    Ich hoffe, dass jemand einen Fehler erkennt, oder eine andere Lösung für mich hat.


    / Außerdem: \
    Ich habe außerdem versucht, ein neuen Callback zuerstellen, und diesen dann via. Timer aufzurufen.
    Gleiches Problem.



    mit freundlichen Grüßen
    ISAPnP
    (Ich hoffe, dass meine Problemschilderung gut ist.)


    /E: Link zum Pastebin hinzugefügt.

    Bin weg, Tschau! (Account kann gelöscht werden)

    Einmal editiert, zuletzt von ISAPnP ()

  • Sorry, nun habe ich mich bemüht alles richtig zumachen und vergesse den Pastebin Code, verdammt.
    Werde es kurz neu hochladen ..

    Bin weg, Tschau! (Account kann gelöscht werden)

  • Ausschnitt aus deinem Skript:
    for(new strs=0;strs!=16;strs++)
    if(pIP[strs]=='.'||!pIP[strs]) {
    strmid(blocks[step],pIP,strste,strs);
    strste=strs+1;
    step++;
    }
    Ich tippe mal grob darauf...


    Ansonsten den üblichen strcmp() == 0, anstatt !strcmp() mal ausprobieren

  • An dem Code kann es eigentlich nicht liegen, denn er ist von mir :D, und so funktioniert es bei mir wunderbar:

    new pIP[16],strste,step,blocks[4][4];
    GetPlayerIp(playerid,pIP,16);
    for(new strs=0;strs!=16;strs++)
    if(pIP[strs]=='.'||!pIP[strs]) {
    strmid(blocks[step],pIP,strste,strs);
    strste=strs+1;
    step++;
    }
    printf("banip %s.%s.***.***",blocks[0],blocks[1]);

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Befehle sowie Versuche einen Text zuprinten scheitern ab der Schließerung der If-Abfrage (pID).
    Trooper: Versucht, aber wie oben gesagt funktioniert es nicht.

    Bin weg, Tschau! (Account kann gelöscht werden)

  • Du kannst es ja auch nochmal so versuchen. Sollte normalerweise aber eigentlich keinen Unterschied bringen:

    new pIP[16],strste,step,blocks[4][4];
    GetPlayerIp(playerid,pIP,16);
    for(new strs=0;strs!=16;strs++) {
    if(pIP[strs]=='.'||!pIP[strs]) {
    strmid(blocks[step],pIP,strste,strs);
    strste=strs+1;
    step++;
    }
    }
    printf("banip %s.%s.***.***",blocks[0],blocks[1]);

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Frage:
    Wieso funktioniert das Skript überhaupt ? :D


    Bei der for-Schleife fehlt die Klammer auf,
    und das nach dem strs++ ist, wenn ichs richtig sehe,
    eine geschweifte Klammer zu, und keine runde...


    Sicher, dass der Compiler da nicht meckert ?


    //edit:

    Zitat

    An dem Code kann es eigentlich nicht liegen, denn er ist von mir


    Das lässt dich jetzt nicht gerade im guten Licht erscheinen ;)

  • Ihr versteht wohl keine Ironie, oder? Der Spruch war eher eine Art amysanter Witz.
    Der Code hat keine Fehler, weil die Klammern hinter den Zeilen stehen.
    Trooper: Kannst du mir denn sagen, wo der Sinn darin wäre, wenn hinter strs++; ein ")" wäre?


    Ich frage mich gerade, was an dem Code nicht zu verstehen ist. Die Schleife geht jede Zelle vom Array durch und guckt, ob ein Punkt vorhanden ist. Dann Splittet er den String einfach...

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Auf gutdeutsch: Dein Code ist kacke :whistling:


    Eine for-Schleife erhält ihre Schleifen-Informationen in runden Klammern (ich meine, du machst ja auch ne runde auf, aber mit ner geschwungenen zu...), woraufhin eine geschwungene Klammer die Schleifenaktionen ankündigt (bei einleinern gehts auch ohne Klammern ;) )

  • Ohh, jetzt weiß ich was du meintest. Ich habe gerade an diese Stelle "step++;" gedacht. Bei der Schleife ist es natürlich logisch, dass diese mit ) geschlossen wird. :D
    Die Schleife ist "im Originalzustand", wie du 2 Posts höher auch sehen kannst ohne "{,}" Klammern.
    Aber dennnoch ist der Code nicht kacke! Probiere ihn doch einfach mal aus, dafür brauchst du nichtmal auf irgendeinen Server gehen:

    new pIP[16],strste,step,blocks[4][4];
    //GetPlayerIp(playerid,pIP,16);
    format(pIP,16,"123.123.123.123");
    for(new strs=0;strs!=16;strs++)
    if(pIP[strs]=='.'||!pIP[strs]) {
    strmid(blocks[step],pIP,strste,strs);
    strste=strs+1;
    step++;
    }
    printf("banip %s.%s.***.***",blocks[0],blocks[1]);

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

    Einmal editiert, zuletzt von |-|auke ()

  • Die Funktion womit die IP in Blöcke geteilt wird, ist wirklich nicht gut.Nicht sehr übersichtlich und auch die Blöcke als Array zu speichern ist nicht gerade klever.Das könnte man als Integer pro Block besser speichern oder via Bitshift in nur einer Variable alle Werte.


    printf("banip %s.%s.*.*",blocks[0],blocks[1]);


    Hätte das auch viel eher mit sscanf gemacht.Wie auch immer,hab hier noch eine sehr alte Funktion die mir breadfish mal vor bestimmt über 3Jahren geschrieben hatte, als Ich gerade mit PAWN angefangen hatte:
    stock IP2RootIP(ip[16], blocks) { //breadfish
    new
    rootend,
    i,
    rootip[16];
    if (blocks >= 4) {
    rootip = ip;
    } else {
    for (i=1;i<=blocks;i++) {
    rootend = strfind(ip, ".", true, rootend) + 1;
    }
    strmid(rootip, ip, 0, rootend - 1);
    }


    for (i=1;i<=4-blocks;i++) {
    strcat(rootip, ".*");
    }
    return rootip;
    }


    So funktioniert es definitiv:
    http://pastebin.com/y7uwYcCi