Beiträge von Jeffry

    Ok, kein Problem.
    Ich habe es dir hier in den Kommentaren jeweils kurz erklärt.
    Versuche es dann so:
    CMD:takegift(playerid)
    {
    //Variablen:
    new pname[MAX_PLAYER_NAME], path[64];

    //Spielername abfragen:
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);

    //Pfad einlesen: (Ordner heißt GiftsGenommen)
    format(path, sizeof(path), "/GiftsGenommen/%s.ini", pname);

    //Prüfen ob Datei existiert, wenn nicht, erstellen.
    if(!fexist(path)) dini_Create(path);

    //Abfrage direkt aus der Datei:
    if(dini_Int(path, "canPickAgain") > gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du kannst nur alle 60 Sekunden ein Geschenk aufnehmen.");
    for(new i = 0; i < MaxGifts; i++)
    {
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
    if(GiftBox[i][e_oID] == -1) continue;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]))
    {
    RandomGift(playerid);
    DestroyDynamicObject(GiftBox[i][e_oID]);
    DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
    PlayerPlaySound(playerid,4202, 0.0, 0.0, 0.0);
    SetTimerEx("CreateGiftAgain", 30000, false, "d", i);
    GiftBox[i][e_oID] = -1;

    //Neuen Wert direkt in die Datei schreiben.
    dini_IntSet(path, "canPickAgain", gettime() + 60); //60 Sekunden zu warten
    return 1;
    }
    }
    return 1;
    }

    Die Zeile ist zu lang.
    Mache es so:
    new Banstring[512];
    format(Banstring, sizeof(Banstring), "Ihr Spieler-Account wurde gesperrt!\n\nAufgrund eines Regelverstoßes wurde ihr Spieleraccount gesperrt!\nSollte dies ein Fehlban sein,");
    format(Banstring, sizeof(Banstring), "%s schreiben Sie ein Entbannantrag im Forum "FORUMNAME"\nDie Daten des Bannes\nDauer: Immer\nGrund: %s\nVon: %s",Banstring,pBanGrund,pBanAdmin);
    ShowPlayerDialog(playerid,DIALOG_BANG,DIALOG_STYLE_MSGBOX,"Sie wurden Gesperrt",Banstring,"EXIT","");

    Das musst du dann so machen:
    ocmd:spielerinfo(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
    {
    if(!strlen(params)) return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
    new str[145], query[128];
    mysql_real_escape_string(params, str);
    format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' LIMIT 1",str);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() == 0)
    {
    format(str, sizeof(str), "Spieler %s ist bei uns nicht registriert.", str);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
    else if(mysql_fetch_int() == 1)
    {
    format(str, sizeof(str), "Spieler %s ist gebannt.", str);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
    else
    {
    format(str, sizeof(str), "Spieler %s ist nicht gebannt.", str);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
    mysql_free_result();
    }
    return 1;
    }


    Zwecks der Nachricht: Die sollte nur kommen, wenn du keinen Namen eingibst.

    Super! :)


    Direkt als Boden kenne ich da keines mehr, ich denke auch nicht, dass es da noch welche gibt, denn die Böden sind ja eher größere Flächen.
    Du kannst mal die 3095 probieren, und gegebenenfalls texturieren.
    Ansonsten vielleicht ein Garagentor oder sowas, und das entsprechend texturieren.

    Der Compiler meckert dabei nicht rum? Das ist ja interessant, PAWN erscheint mir jedes mal kurioser

    Nö, das stört ihn nicht. Man kann auch 5 Klammern auf machen, wenn man sie entsprechend wieder zu macht, das stört ihn gar nicht. Ob das dann noch lesbar ist ist natürlich eine andere Sache. Aber vor allem bei sscanf sehe ich es oft, dass die Leute das so schreiben, weil sie das Prinzip dann einfacher verstehen.


    Zwecks dem SCM: Das sollte er eigentlich definiert haben, in seinem anderen Befehl hat er es ja auch drin und dort klappt es. Habe es ja nur von dort kopiert.

    dann kommt eine Error meldung das der Befelh nicht existiert

    Welche der beiden Meldungen kommt? Oder kommen beide Meldungen?
    Versuche es mal so:
    ocmd:spielerinfo(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
    {
    if(!strlen(params)) return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
    new str[145], query[128];
    mysql_real_escape_string(params, str);
    format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' AND Baned = '1'",str);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() > 0)
    {
    format(str, sizeof(str), "Spieler %s ist gebannt.", str);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
    else
    {
    format(str, sizeof(str), "Spieler %s ist nicht gebannt.", str);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
    mysql_free_result();
    }
    return 1;
    }


    Die geschweifte Klammer von Zeile 4 (und zugehörige schließende Klammer) sind zu viel, da dass if etwas returned braucht die Klausel keine Klammern.

    Viele schreiben das aus Gewohnheit so, man braucht es nicht, aber es schadet auch nicht. ;)
    Ich habe es einfach so übernommen, wie er es in seinem anderen Befehl hat, damit er sich nicht umgewöhnen muss.

    Das weiß ich nicht, aber selbst wenn es einen gibt, dann kann ich dir nicht sagen ob der funktioniert.
    Von meinem kann ich sagen, dass der auf jeden Fall funktioniert, da ich ihn selbst über Jahre auf meinem eigenen Server benutzt habe.


    http://pastebin.com/qz56UCRe
    Das wäre der Filterscript aus oben verlinktem Thread. Den kannst du nutzen.

    Ja, dann so:
    ocmd:spielerinfo(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
    {
    if(!strlen(params))return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
    new str[145], query[128];
    mysql_real_escape_string(params, params);
    format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' AND Baned = '1'",params);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() > 0)
    {
    format(str, sizeof(str), "Spieler %s ist gebannt.", params);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
    else
    {
    format(str, sizeof(str), "Spieler %s ist nicht gebannt.", params);
    SendClientMessage(playerid, 0xFFFFFFFF, str);
    }
    mysql_free_result();
    }
    return 1;
    }

    Bei den kleinen Abfragen spielt es so gut wie keine Rolle, sofern du bei den Textdateien für jeden Spieler eine eigene Datei erstellst.
    Eine SQLite Datenbank wäre etwas übersichtlicher im Ordner (nur eine Datei), aber dafür komplizierter zu verwenden im Code, als zum Beispiel dini.


    Für Dateien musst du erst ein Verzeichnis erstellen, genau.
    Dann kannst du ja mal versuchen, ob du selbst mit dini klar kommst, falls du das nutzt. Alle entsprechenden Änderungen müssten dort nur in dem Befehl gemacht werden.
    Wenn du nicht weiter kommst, dann poste was du bis dahin hast.

    Den Befehl musst du so schreiben, sonst geht es nicht:
    ocmd:ban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
    {
    new pID, reason[128],string[128], query[144];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/Ban [ID] [Grund]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_RED,"Diese Spieler ist nicht online");
    if(IsPlayerNPC(pID))return SendClientMessage(playerid,COLOR_RED,"Du kannst keinen Bot Bannen !");
    format(string,sizeof(string),"[BANNED]: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(0x9B0000FF,string);
    format(string,sizeof(string),"~r~Du wurdest gebannt !~n~Grund: %s",reason);
    GameTextForPlayer(pID, string, 30000, 4);
    TogglePlayerControllable(pID,0);
    GetPlayerName(pID, string, MAX_PLAYER_NAME); //Hinzugefügt
    format(query,sizeof(query),"UPDATE accounts SET Baned=1 WHERE Name='%s'",string);
    mysql_query(query);
    }
    return 1;
    }


    Dann kann die Abfrage so ein:
    ocmd:spielerinfo(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
    {
    if(!strlen(params))return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
    mysql_real_escape_string(params, params);
    format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' AND Baned = '1'",params);
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() > 0)
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Spieler ist gebannt.");
    }
    else
    {
    SendClientMessage(playerid, 0xFFFFFFFF, "Spieler ist nicht gebannt.");
    }
    mysql_free_result();
    }
    return 1;
    }


    EDIT:
    @xXBastianXx
    Bitte aktualisiere den spielerinfo Befehl, falls du ihn schon abgeschrieben hast, ich hatte im Query die Banned Abfrage vergessen.

    CMD:takegift(playerid)
    {
    if(SpielerInfo[playerid][canPickAgain] > gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du kannst nur alle 60 Sekunden ein Geschenk aufnehmen.");
    for(new i = 0; i < MaxGifts; i++)
    {
    if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
    if(GiftBox[i][e_oID] == -1) continue;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]))
    {
    RandomGift(playerid);
    DestroyDynamicObject(GiftBox[i][e_oID]);
    DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
    PlayerPlaySound(playerid,4202, 0.0, 0.0, 0.0);
    SetTimerEx("CreateGiftAgain", 30000, false, "d", i);
    GiftBox[i][e_oID] = -1;
    SpielerInfo[playerid][canPickAgain] = gettime() + 60; //60 Sekunden zu warten
    return 1;
    }
    }
    return 1;
    }


    Das SpielerInfo[playerid][canPickAgain] musst du so umbenennen wie das Stats-System bei dir heißt, und canPickAgain muss ins enum eingefügt werden.
    Dann kannst du das SpielerInfo[playerid][canPickAgain] zum Laden und Speichern der Spieler-Statistiken (wie Geld oder so) hinzufügen.