Beiträge von M4rciii

    Dafür hab ich das extra in ein Callback gepackt, da du dann in deinem Command /l sowas machen kannst:
    if(CheckPlayerText(playerid,tmp) == 0) { return 1; }
    Wenn in tmp das nach /l kommt, wird eine IP darin geblockt, ändere es einfach auf deine string.

    Hallöchen!


    Da in vielen Server viel abgeworben wird (was nicht sein muss :pinch: ) habe ich ein Anti-IP-Script gebastelt.
    Ich habe mir schon länger vorgenommen das Script zu verbessern und mache das dann jetzt mal.


    FUNKTIONSWEISE
    Bei CheckPlayerText(playerid,string); wird bei jedem Zeichen überprüft, ob es sich um einen Punkt handelt und ob eine Zahl dahinter kommt. Wenn dies 3 Mal der Fall ist, schliesst sich daraus: Es ist eine IP!!!
    Zudem unterstützt es auch Leerzeichen zwischen den Punkten.
    Falls es sich fälschlicherweise nicht um eine IP handelt, weis der Admin bescheid, da die Nachricht geblockt und an einen Admin geschickt wird.



    BEISPIELE
    Sowas würde als IP erkannt werden:
    127.0.0.1
    127 , 0 , 0 , 1
    12 / 34 , 456 789
    98 76 543 210



    CHANGELOG
    v.2.0
    - Man kann beliebig viele Delimiter/Trennzeichen angeben, mit denen IPs erkannt werden sollen (IPDelimiters).
    - Man kann ebenso bestimmte IPs erlauben, beispielsweise die IP des Servers (AllowedIPs).
    v1.1
    - Der Bug bei Godfather wurde behoben (bitte Zeilen 3-5 beachten !!)
    - Bei beliebig vielen Warnungen wird man gebannt (MAX_IP_WARNS)



    DOWNLOAD
    RAR-Archiv
    PWN-Datei
    AMX-Datei





    Hoffe es wird euch helfen!
    MfG, M4rciii

    Verbesserte Version:
    new ClanNames[][] = {
    "[123]",
    "[FKK]",
    "[WTF]"
    // und so weiter
    };
    public OnPlayerConnect(playerid)
    {
    for(new clan=0; clan<sizeof(ClanNames); clan++)
    {
    new Playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Playername,sizeof(Playername));
    if(strfind(Playername,ClanNames[clan],true) == 0) // == 0 vergessen, sonst passierts Gegenteil -.-
    {
    Kick(playerid);
    }
    }
    return 1;
    }

    Hallo, lieber Scripter und (moment, gibts hier Scripterinnen???? egal..)!
    Da viele Scripter mit Dateien arbeiten "müssen" und sich meinstens dabei schwer tun, mache ich hier ein Tutorial zu DracoBlue's Dini.
    Es ist eigentlich nur eine Übersetzung von einem Tread im offiziellen Forum:


    Dini: http://forum.sa-mp.com/index.php?topic=981.0
    Dini englisches Tut: http://forum.sa-mp.com/index.php?topic=71935.0


    VORWEG:
    Falls du nicht weist, was mit einem "key" gemeint ist, schau mal das hier an:
    In der Datei "Maercell.ini" ist das hier geschrieben:

    Zitat

    level=1337

    Maercell.ini => filename
    level => key
    1337 => value (nur ein Beispiel, kommt eben drauf an, war gespeichert wird)




    Die Funktionen
    dini_Exists(filename[])
    Überprüft ob eine Datei mit dem Pfad filename existiert. Returnt true oder false
    if(dini_Exists("/folder/file.ini"))
    {
    // Die Datei "file.ini" ist im Ordner "folder" vorhanden
    }
    else
    {
    // Die Datei "file.ini" gibt es im Ordner "folder" nicht
    }


    dini_Isset(filename[], key[])
    Überprüft ob in einer Datei schon etwas unter key gespichert ist.
    dini_Set("/folder/file.ini", "key", "text");
    if(dini_Isset("/folder/file.ini", "key"))
    {
    // Unter "key" wurde "key" gespeichert, gibt true zurück
    }
    dini_Unset("/folder/file.ini", "key");
    if(dini_Isset("/folder/file.ini", "key"))
    {
    // Unter "key" wurde nichts gespeichert, gibt false zurück
    }


    dini_Unset(filename[], key[])
    Löscht Float/Integer/Bool/String in einer Datei
    dini_Set("/folder/file.ini", "check", "true");
    string = dini_Get("/folder/file.ini", "check");
    print(string); // gibt true zurück


    dini_Unset("/folder/file.ini", "check");
    string = dini_Get("/folder/file.ini", "check");
    print(string); // gibt nichts zurück


    dini_Create(filename[])
    Erstellt eine neue Datei
    // dini_Exists würde false zurückgeben, existiert ja nicht :o
    dini_Create("/folder/file.ini");
    // dini_Exists würde true zurückgeben, existiert nun danke dini_Create



    dini_Remove(filename[])
    Löscht eine Datei
    // dini_Exists würde true zurückgeben, weil die Datei noch existiert
    dini_Remove("/folder/file.ini");
    // dini_Exists würde false zurückgeben, weil die Datei soeben gelöscht wurde


    Jetzt gehts an Speichern und Laden!!!


    dini_Set(filename[], key[], value[])
    Speichert eine String unter key in eine Datei
    dini_Set("/folder/file.ini", "samp", "forums");
    // In "file.ini" im Ordner "folder" stände jetzt:
    // "samp=forums"


    dini_Get(filename[], key[])
    Lädt eine Strint unter key in einer Datei
    string = dini_Get("/folder/file.ini", "samp");
    if(strcmp(string, "forums", false) == 0)
    {
    // Die IF-Abfrage wird ausgeführt, da in file.ini unter "samp" "forums" gespeichert wurde, sieht dini_Set
    }


    Das geht aus mit Integern!!!


    dini_IntSet(filename[], key[], value)
    Speichert ein Integer unter key in einer Datei
    dini_IntSet("/folder/file.ini", "sampforums", 1);
    // Das Ergebnis in "file.ini" im Ordner "folder" ist:
    // "sampforums=1"
    dini_Int(filename[], key[])
    Lädt ein Integer unter key in einer Datei
    new number = dini_Int("/folder/file.ini", "sampforums");
    if(number == 1)
    {
    // sampforums entspricht 1, wie bei dini_IntSet gespeichert
    }



    Und Positionen? Floats!

    dini_FloatSet(filename[], key[], Float:value)
    Speichert eine Float unter key in einer Datei
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    dini_FloatSet("/folder/file.ini", "F_X", X);
    dini_FloatSet("/folder/file.ini", "F_Y", Y);
    dini_FloatSet("/folder/file.ini", "F_Z", Z);


    // Das ergebnis in "file.ini" im Ordner "folder"
    // F_X = 0.000000
    // F_Y = 0.000000
    // F_Z = 0.000000
    // Das wären die koordinaten von playerid


    dini_Float(filename[], key[])
    Lädt eine Float unter key in einer Datei
    // Lädt die Koordinaten "F_X", "F_Y" und "F_Z" in die Floats X, Y, Z und teleportiert playerid
    new Float:X, Float:Y, FloatZ;
    X = dini_Float("/folder/file.ini", "F_X");
    Y = dini_Float("/folder/file.ini", "F_Y");
    Z = dini_Float("/folder/file.ini", "F_Z");
    SetPlayerPos(playerid, X, Y, Z);


    Nur true und false? Da reicht ein Bool-Wert!

    dini_BoolSet(filename[], key[], value)
    Speichert ein Bool-Wert unter key in einer Datei
    dini_BoolSet("/folder/file.ini", "random_bool", true);
    // Das Ergebnis in "file.ini" im Ordner "folder" ist:
    // "random_bool=true"


    dini_Bool(filename[], key[])
    Lädt einen Bool-Wert unter key aus einer Datei
    new bool:random_bool = dini_Bool("/folder/file.ini", "random_bool");
    if(random_bool == true)
    {
    // random_bool ist true wie bei dini_BoolSet gespeichert
    }



    Und das wars! Du hast soeben gelernt mit dini Dateien zu erstellen, zu löschen und darin Bools, Floats, Strings und Integer zu speichern, so einfach gehts!


    Ich danke hiermit DracoBlue für diese wunderbar einfache Art eines Dateiensystems.


    MfG Maercell


    //Goldkiller: Sticky


    if(strcmp(cmd,"/setpweather") == 0)
    {
    tmp = strtok(cmdtext,idx);
    giveplayerid = ReturnUser(tmp);
    tmp = strtok(cmdtext,idx);
    new weather = strval(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    SetPlayerWeather(giveplayerid,weather);
    }
    return 1;
    }
    Das ist jetzt die einfachste Form, du kannst das natürlich auch alles mit text, und "[FEHLER] /setpweather" etc.

    Mach bei OnGameModeInit sowas hier:
    dmkills = TextDrawCreate(150, 100, " ");
    Und außerdem:
    GivePlayerWeapon(playerid,25,100) && GivePlayerWeapon(playerid,31,250); // das ist falsch
    GivePlayerWeapon(playerid, 25, 100); // richtig
    GivePlayerWeapon(playerid, 31, 250); // richtig

    Dieses Codeschnitzel ist recht simpel und sorgt nur dafür, dass man nicht etwas wie "7LOGIN mEINpw" macht, oder sonstiges mit einer 7 als erstes zeichen.
    Man baut es einfach als erstes in OnPlayerText ein und es funktioniert.

    if(text[0] == '7')
    {
    new string[128];
    format(string,sizeof(string),"/%s",text[1]);
    OnPlayerCommandText(playerid,string);
    return 0;
    }


    Wegen schlechter Einrückung noch Pastebin: Hier


    MfG Maercell

    Hallo, liebe Scripter und Forum-User ;)


    Ich suche gerade nach einer Methode, die einen Zufälligen Spieler auswählt, der Connected ist und auch andere Kriterien erfüllt( zB Checked[playerid] == true ).
    Ich habe mir schon überlegt, ob das einem Label und "goto" geht:
    randomplayer:
    {
    new randpl = random(MAX_PLAYERS);
    if(IsPlayerConnected(randpl) && Checked[randpl] == true) Player = randpl;
    else goto randomplayer;
    }


    Würde das so funktionieren? Habe noch nie mit goto und Labels gearbeitet. PS: LINK


    Danke im Vorraus

    Hallo! :)


    Also, leider ist vor ein paar Tagen ist meine Clan-Seite innen Arsch gegangen. Wir suchen noch ein neues Design und Layout für die Seite. Der Clan hat gut 30 Member und er braucht eine gute Page; Domain etc. ist vorhanden.
    Ich würde mich sehr freuen, wenn hier einige nette Forum-User ihre Vorschläge posten könnten oder vielleicht sogar etwas beim Einbau helfen. :)


    MfG Maercell