Beiträge von Tom Sunder

    ich hab es nun so weiß aber das es net stimmen kann aber sonst kommen error.
    Ich will machen dass alle datein nacheinander geöffnet werden und dann durchgeschaut werden, ob da ds gesuchte Wort vorkommt. Da ich wenn ich dir_list mach das aufgelistete auch öffnen muss, hab ich mal versucht die zwei Sachen die da vorkommen (hab alles ausprobiert) bei file_read reinzupacken. Aber da bekomme ich immer Errors.
    dcmd_benutzerdurchsuchen(playerid,params[])
    {
    new Suchbegriff[MAX_PLAYER_NAME], dir:Benutzer= dir_open("Accounts/"), type[128], item[40], string[64];
    if(sscanf(params,"s", Suchbegriff)) { return SendClientMessage(playerid,COLOR_RED,"Benutze: /benutzerdurchsuchen [Suchbegriff (bitte nur ein Wort!)]"); }
    while(dir_list(Benutzer, item))
    {
    new File:file = fopen(type, io_read);
    if(file)
    {
    file_read(type, item, sizeof(item));
    if(strfind(item, Suchbegriff, true) != -1)
    {
    SendClientMessage(playerid, COLOR_GREEN, "Es wurde etweas gefunden!");
    format(string, sizeof(string), "%s enthält das Wort oder die Zahl %s", item, Suchbegriff);
    SendClientMessage(playerid, COLOR_GREEN, string);
    }
    return SendClientMessage(playerid, COLOR_RED, "Es wurde leider nichts gefunden!");
    }
    }
    return SendClientMessage(playerid, COLOR_RED, "Es wurde leider nichts gefunden!");
    }
    Was muss ich jetzt amchen, damit die Datein die ich bei dir_list auflisten lassen hab nacheinander geöffnet werden und dann durchgeschaut werden ob das gesuchte Wort oder Zahl drinnen ist (das mit ob es drinnen ist hab ich ich brauch nurnoch dass mit dem auflisten von dem Zeug das ich geöffnet hab)
    PS: Das von mirr kann net Stimmen da ja das aufgelistete net bei dir_read verwendet wird!
    (Der code schaut zimlich anders aus wie davor da es mein bruder (der es auch net wusste obwohl er schon lang scriptet) auch ausprobiert hat

    Deine Fehlerbeschreibung ist legendär am besten holst du dir ein Strick und erhängst dich.


    Ich hoffe dir ist bewusst das dir die Meldung in der Serverlog ausgegeben wird und wenn du die Hauptpunkte nicht beachtest


    kann man dir auch nicht helfen


    oh ich erklär es besser (hab grad was neues in der konsole entdeckt ;)) Wenn ich den befehl eingeb (mit dem Suchwort Hallo) passiert nix auser, dass in der Konsole kommt Es wurde nix gefunden. Ich hab gerade als Test in nen Account von jemmand anderem Hallo geschreiben und es kommt immernoch in der Konsole Es wurde nix gefunden sonst passiert nix (ich kann die nachricht Es wurde nix gefunden nur in der Konsole sehen)


    hab es nun so
    dcmd_benutzerdurchsuchen(playerid,params[])
    {
    new Suchbegriff[MAX_PLAYER_NAME];
    if(sscanf(params,"s", Suchbegriff)) return SendClientMessage(playerid,COLOR_RED,"Benutze: /benutzerdurchsuchen [Suchbegriff (bitte nur ein Wort!)]");
    find(Suchbegriff);
    return 1;
    }


    stock find(Suchbegriff[])
    {
    new dir:Benutzer= dir_open("Accounts/"), type, item[64];
    while(dir_list(Benutzer, item, type))
    {
    if(type == FM_FILE)
    {
    if(strfind(item, Suchbegriff, true) != -1)
    {
    return printf("%s enthält das Wort oder die Zahl %s", item, Suchbegriff);
    }
    }


    }
    return print("Es wurde leider nix gefunden.");
    }


    geht aber net
    IPrototypeI
    hast du nochz eine idee?


    Und sry wenn du dich bissel beleidigt gefühlt hast weil ich das mit den Sachen die du laut mir falsch gemacht hast gepostet hab owbohl deins richtig war ;). Ich kann net alle Begriffe von pawn da ich mir das scripten halbert selbst beigebracht hab...

    Zitat

    2. Suchbegriff muss ein string sein kein integer
    3. Platzhalter gibt es bei strfind nicht


    1. das mit if(sscanf(params,"s[24]", Suchbegriff)) war falsch das muss if(sscanf(params,"s", Suchbegriff)) sein ich habs ausprobiert und mit dem kommt man net weiter als das dauernd "Benutze:..." kommt
    2. ich hab das nun so gemacht if(strfind(item, Suchbegriff, true) != -1) darum wie du es gesagt hast aber es kommt trozdem keine nachricht
    3. du hast das return an die Falsche stelle nun kommt die Nachricht das nichts gefunden worden ist immer auch wenn etwas gefunden wurde ich hab es an die richtige stelle getan aber es kommt netmal die nachricht (ich hab es nach der geschlossenen Klammer von if(strfind(item, Suchbegriff, true) != -1)
    { hingetan...)


    Hat noch wer ne Idee??


    PS Es kann sein das das oben bei mir anders ist aus irgendwelchen gründen, wie z.B. das ich etl iein include hab das dann macht das man das anders machen muss...

    Hey,
    versuche es mal so:


    Und noch eine Frage, welche Speichermethode benutzt du?


    jetzt kommt nimmer unkown command aber es kommt keine Nachricht weder SendClientMessage(playerid,-1,"Okay!"); noch format(string, sizeof(string), "%s enthält das Wort oder die Zahl %s", item, Suchbegriff);
    SendClientMessage(playerid, COLOR_GREEN, string);
    (wegen deiner Frage meinste mit speichermethode z.B. dini? Wenn ja dann dini ;))


    hat wer ne idee warum das net angezeigt wird??

    @[NGD]Manne
    funkt net aktueller code:
    dcmd_benutzerdurchsuchen(playerid,params[])
    {
    new Suchbegriff, dir:Benutzer= dir_open("Accounts/"), type, item[40], string[256];
    if(sscanf(params,"s[64]", Suchbegriff)) { return SendClientMessage(playerid,COLOR_RED,"Benutze: /benutzerdurchsuchen[Suchbegriff (bitte nur ein Wort!)]"); }
    {
    while(dir_list(Benutzer, item, type))
    {
    if(type == FM_FILE)
    {
    if(strfind(item, "%s", true, Suchbegriff))
    {
    format(string, sizeof(string), "%s enthält das Wort oder die Zahl %s", item, Suchbegriff);
    SendClientMessage(playerid, COLOR_GREEN, string);
    }
    }

    }
    }
    return 1;
    }

    Soweit ich den Debug code verstanden habe, liegt der fehler im public OnPlayerCommandText,
    Schreib mal was bei dir dort "lose" drinsteckt oder vermutlich was damit zu tun hat.


    Das hat eher was mit dem dcmd code (darum das das net im onplayercommandtext ist) zu tun, da es auch wenn es net in onplayercommandtext ist heißt dass dort ein Fehler ist, weil es ja dort "eingesetzt" wird (durch das dcmd(benutzerdurchsuchen, 19, cmdtext);) und wenn was lose drin ist würde fast kein command gehen es gehen aber alle außer der eine
    Hat noch wer ne Idee?
    Edit: Wenn ich das rausnehm if(sscanf(params,"s", Suchbegriff)) { return SendClientMessage(playerid,COLOR_RED,"Benutze: /benutzerdurchsuchen[Suchbegriff (bitte nur ein Wort!)]"); }
    { kommt kein unkown command aber das unkown command kommt BER ERST WENN ICH DEN sUCHBEGRIFF EINGEB (WENN DAS DRINNEN IST)
    dARUM SCHÄTZE ICH DAS ES DARAN LIEGT FINDE ABER KIENEN FEHLER || Misst großschreibtaste war drinnen egal ||

    OnPlayerSpawn benutz ich nur für das Krankenhaus...

    Seh ich gerade auch. Mach mal da, wo er sich erfolgreich eingelogt hat ein SpawnPlayer(playerid); hin (da ich keinen Fehler im Quode finde sag ich dir ein paar Sachen di du ausprobieren kannst ein paar Zeilen drüber die erste ^^)


    Zeig mal die public OnPlayerSpawn (war früher bei mir auch bei mir hats daran gelegen)

    Es gibt einen ANTWORTEN-Button, also nutzt diesen bitte auch und penetriert nicht permanent die arme Zitier-Funktion!


    Für was ist die denn da wenn man net andere Zitieren darf? Ich will die Leute die was geschreiben haben auf das Thema aufmerksam machen, bzw dass etwas neues geschreiben wurde...


    Zurück zum Thema
    ich hab den command nun so aber es kommt unkown command
    dcmd_benutzerdurchsuchen(playerid,params[])
    {
    new Suchbegriff, dir:Benutzer= dir_open("Accounts/"), type, item[40], string[256];
    if(sscanf(params,"s", Suchbegriff)) { return SendClientMessage(playerid,COLOR_RED,"Benutze: /benutzerdurchsuchen[Suchbegriff (bitte nur ein Wort!)]"); }
    {
    while(dir_list(Benutzer, item, type))
    {
    if(type == FM_FILE)
    {
    if(strfind(item, "%s", true, Suchbegriff))
    {
    format(string, sizeof(string), "%s enthält das Wort oder die Zahl %s", item, Suchbegriff);
    SendClientMessage(playerid, COLOR_GREEN, string);
    }
    }

    }
    }
    return 1;
    }
    Woran liegt das? Ich hab noch das was in der Konsole kommt:

    Code
    [17:07:05] [debug] Run time error 6: "Invalid instruction"[17:07:05] [debug]  Unknown opcode 0x0 at address 0x00000074[17:07:05] [debug] AMX backtrace:[17:07:05] [debug] #0 ???????? in public OnPlayerCommandText () from script.amx


    Ich versteh von so einem Code nix (ich meine den Konsolenquode) :whistling:


    Ok. Danke. Ich mach jetzt das suchen mit Dini...


    ok soweit ich das seh muss dann unter if(type == FM_FILE) printf("%s is a file", item); // "type" enthält den Typ des Objekts (Datei oder Verzeichnis). kommen was passieren soll, wenn in einerDatei das wort net vorkommt (oder ist das dafür wenn es nirgendswo (im ganzen ordner net) vorkommt?)
    und unter else if(type == FM_DIR) printf("%s is a directory", item); // "item" enthält den Namen des Objekts. gehört das was passieren soll wenn der Namen in der Datei ist (oder kommt dadrunter was passieren soll wenn es irgendwo vorkommt?)
    was ist richtig das das net in den klammern steht oder das das in den klammern steht?

    Mit der Fehlerbeschreibung "verträgt sich nicht" lässt sich nichts anfangen, tut mir leid. :rolleyes:


    manchmal kommen errors manchmal will der server nimmer angehen usw
    Edit: ich versuch es jetzt einfach mit filemanager. Bracuhe nun aber schon hilfe: bei native dir_list(dir:handle, storage[], &type, length = sizeof(storage)); für was ist die erste lücke für was die zweite für was die dritte usw?? Bzw ein Beispiel. Ich schätze beim ersten muss man das sagen auf welchem wort das gespeichert wird weiter weiß ich net

    Wenn du nicht aus den Daten der verbundenen Spieler die Dateinamen bilden kannst, dann verwende das von Mr.Reese genannte Plugin. Im vorgegebenen Link gibt es auch ein Beispiel, wie man Namen von Dateien in einem bestimmten Verzeichnis auflistet.


    aber da gibt es ein Problem: aus irgendeinen grund verträgt sich kein plugin mit filemanager. gibt es das native dir_list(dir:handle, storage[], &type, length = sizeof(storage)); nicht auch bei dini?


    Dann solltest du mit den von mir genannten Fread() und strfind() wunderbar zurecht kommen. Das Ganze ist aber total unperformant und keineswegs zu empfehlen. Steige lieber auf ein ordentliches DBMS um und sende einen organisierten Query ab, um dein Ziel zu erreichen.


    Hab es nun verstanden aber ich hab noch zwei fragen:
    (wie) kann ich alle Datein auslesen lassen und das alles dann auf eine durch new definiertes wort setzen?? (dann soll das alles auf einmal durchgeschaut werden dann muss ich net jede Datei extra)

    Da mir dein Vorhaben nicht ganz schlüssig ist, da es sehr schlecht beschrieben ist, kann ich nur auf Fread() und strfind() verweisen. Mit Fread() kannst du die Dateien Zeile für Zeile auslesen und mit strfind() die Zweien herausfiltern. Wenn die Zweien an einem ganz bestimmten Ort in den Dateien sich befinden, dann solltest du Plugins/Includes herbeiziehen, welche .ini-Dateien handhaben. Falls die Dateien nicht im "scriptfiles" Ordner liegen, dann musst du die Dateien zuvor mit dem von Mr.Reese genannten Plugin öffnen und auslesen.


    Achtung: Mit vielen Dateien kann dies sehr unperformant sein (Lag könnte eine der Folgen sein). Aus diesen Gründen verwendet man Datenbanken.


    Ich will machen, dass wenn man online irgendeinen Befehl und ne Zahl oder ein Wort (z.B. /random 2) dann soll geschaut werden in welcher Datei bei den Accounts die Zahl oder das Wort am öffterstens vorkommt. Dann soll der bei dem es am öfftersten vorkommt geld bekommen und bei dem dem es am zweit öfftersten vorkommt soll ein bisschen weniger geld bekommen dann das mit dem dritt öfftersten auch usw..
    Verstehst du es nun?


    @Mr.Reese
    ich versteh das net wie man mit den 3 Sachen zusammen das machen kann was ich machen will