Beiträge von Kaliber

    alles valide EMail Adressen

    Lässt nur 1 von denen zu...


    Wobei man halt wirklich regex oder php für eine 100%ige Validation nutzen sollte...


    Hier mein Code nochmal bissl abgeändert...


    C
    stock IsValidMailAddr(const string[])
    {
        new l = strlen(string),p_s;
        if(l < 5 || strfind(string,",") != -1) return 0;
        p_s = strfind(string,"@");
        if(p_s == -1) return 0;
        if(strfind(string,"@",false,p_s+1) != -1) return 0;
        if(strfind(string,".",false,p_s) == -1 || string[p_s+1] == '.' || string[p_s-1] == '.') return 0;
        return (('A' <= string[l-1] <= 'Z' || 'a' <= string[l-1] <= 'z') && ('A' <= string[0] <= 'Z' || 'a' <= string[0] <= 'z'));
    }

    Hmmm anstatt das Plugin zu nutzen könnte man auch einen HTTP Request machen und mit PHP prüfen...


    Wenn man es zu 100% validiert haben will....


    Aber fürs erste sollte das reichen:


    stock IsValidMailAddr(const string[])
    {
    new l = strlen(string),p_s;
    if(l < 5 || strfind(string,",") != -1) return 0;
    p_s = strfind(string,"@");
    if(p_s == -1) return 0;
    if(strfind(string,"@",false,p_s+1) != -1) return 0;
    if(strfind(string,".",false,p_s) == -1 || string[p_s+1] == '.' || string[p_s-1] == '.') return 0;
    return (('A' <= string[l-1] <= 'Z' || 'a' <= string[l-1] <= 'z'));
    }

    Hier hab mal eine kleine Funktion geschrieben...sollte klappen :)



    Ja, aber das ist ja auch nicht richtig, da jeder Materialindex für etwas anderes steht.


    z.B. ist 8 die Mauer und 11 das Häuschen auf dem Objekt.


    Wenn du jetzt aber z.B. die 0 nimmst, ist das der Weg zwischen den beiden, der dann auch eine andere Textur bekommt, was aber nicht gewollt ist.


    Aus diesem Grund sollte er einfach das schritt für schritt machen. (Dies ist auch wesentlich performanter als eine Schleife) :)

    Schreib den Befehl mal so:



    ocmd:buysnack(playerid)
    {
    if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)return SendClientMessage(playerid,C_Error,"Du bist nicht zu Fuß!");
    if(!IsPlayerNearSnack(playerid))return SendClientMessage(playerid,C_Error,"Du bist nicht in der Nähe eines Snackautomats.");
    if(sInfo[playerid][canbuysnack] == 0) return SendClientMessage(playerid,COLOR_GRAY,"* Du kannst nur alle 10 Sekunden einen Snack kaufen!");
    new snackid = GetPlayerSnackID(playerid),Float:PlayerHealth;
    if(snackid == -1) return SendClientMessage(playerid,COLOR_GRAY,"Ungültige snackid!");
    GetPlayerHealth(playerid,PlayerHealth);
    if(getplayermoney(playerid)<=Food[snackid][fprice])return SendClientMessage(playerid,COLOR_GRAY,"Du hast nicht genug Geld dabei!");
    if(PlayerHealth >= 80) return SendClientMessage(playerid,COLOR_GRAY,"* Du hast keinen Hunger!");
    if(Food[snackid][fvalue] == 0) return SendClientMessage(playerid,COLOR_GRAY,"* Der Automat ist leer!");
    TogglePlayerControllable(playerid,false);
    TogglePlayerControllable(playerid,true);
    ApplyAnimation(playerid,"VENDING","VEND_Use",4.1,0,1,1,0,2000,1);
    Food[snackid][fvalue]--;
    UpdateSnackLabel(GetPlayerSnackID(playerid));
    SetTimerEx("ClearAnimations", 2000, false, "d", playerid);
    SetTimerEx("AllowSnackBuy", 10000, false, "d", playerid);
    sInfo[playerid][canbuysnack] = 0;
    SetPlayerHealth(playerid,PlayerHealth + 20);
    return 1;
    }

    ...so musst du es machen:


    new id=CreateObject(3975, 1469.2183, -1643.1805, 12.9006, 0.0000, 0.0000, 180.0000);
    SetObjectMaterial(id, 11, 8399, "vgs_shops", "vgsclubwall05_128", 0xFFFFFFFF);
    SetObjectMaterial(id, 8, 4010, "lanblokb2", "sl_lavicdtwall1", 0xFFFFFFFF);


    @German_ScripterHD
    Das ist Schwachsinn, da so 10 Objekte erstellt werden...und jedes mit einer anderen Textur..das ist so gar nicht das, was er will :D

    Der Fehler den du machst ist, du erstellst 2 Objekte...dabei musst du die ID von dem einen Objekt nur anpassen...


    Sprich du musst es so schreiben:


    new obj = CreateObject(8650, 1492.8816, -1597.7205, 12.1815, 0.0000, 0.0000, 90.0000);
    SetObjectMaterial(obj, 0, 9239, "stuff2_sfn", "hedge1", 0xFFFFFFFF);
    SetObjectMaterial(obj, 1, 9239, "stuff2_sfn", "hedge1", 0xFFFFFFFF);


    mfg. :thumbup:

    Nun, du brauchst kein define für sowas.


    Mach es einfach nur so:




    new FraktionsSpawn[][FSpawnInfo] =


    Und um zu wissen, wie viele FraktionSpawns du deklariert hast: sizeof(FraktionsSpawn)


    Bei dem anderen genauso:


    new FVehicleInfo[][FVehicleDATAInfo] =


    Andererseits, kannst du auch einfach dein define anpassen, da dies offenbar zu hoch ist bzw du nicht für jede Fraktion einen Spawn bzw die VehicleInfo deklariert hast ;)

    Was man vielleicht noch sagen sollte ist, dass die Verschlüsselung hier von md5 nichts bringt, da kein Salt verwendet wird.


    Durch Rainbowtables kann man hier ganz einfach das Passwort filten, welches verwendet wurde und dann sieht man das:


    098f6bcd4621d373cade4e832627b4f6 = test


    ist :D


    Also für alle die hashen wollen und nicht wollen, dass man direkt das Passwort hat, mal nach "Salt" googeln und halt einfach das Passwort mit Salt hashen lassen ;)


    mfg. :thumbup:

    Naja, mach es z.B. so: