Random Handynummer

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Danke für eure Hilfe, aber jetzt habe ich noch ein Problem:


    stock Nummer()
    {
    new Query[128], count = 1, nr = -1;
    while (count != 0)
    {
    nr = 10000 + random(89999);
    format(Query, sizeof(Query), "SELECT Nummer FROM `User` WHERE `Nummer` = '%d'", nr);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    }
    return nr;
    }


    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();


    Mir ist gerade aufgefallen das es diese Funktionen ja nicht in dem Mysql Plugin Version R39 vorkommen.
    Wie kann ich das dann umschreiben?


    Mfg :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • Mal dran gedacht das via MySQL zu lösen? Dann sparst du dir die zig Querys, und lässt MySQL alleine die Arbeit machen.


    SQL
    SELECT FLOOR(10000 + RAND() * 89999) AS random_number
    FROM User
    WHERE "random_number" NOT IN (SELECT Nummer FROM User)
    LIMIT 1

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Das war was ich meinte, man müsste es komplett anders machen. Das wäre eine Möglichkeit, allerdings ist auch hier das Limit eben drin, von 90.000 Nummern.
    Ich würde das ganze insofern vereinfachen, dass man die DB_ID nimmt, die der Spieler hat, und damit eine Nummer erstellt, das würde auf jegliches Query verzichten.


    stock Nummer(playerid)
    {
    new tmp[11];
    format(tmp, sizeof(tmp), "%d%d", random(1100)+1000, SpielerInfo[playerid][db_id]);
    return strval(tmp);
    }


    Dann kommt für den Spieler mit der db_id 2401 zum Beispiel diese Telefonnummer raus:
    14032401


    Man wäre dann nur dahingehend beschränkt, wenn man das 32-Bit Limit erreicht, sprich ab User ID 1 Mio.


    Oder, wenn man wieder die 100.000 haben will, geht es auch so:
    stock Nummer(playerid)
    {
    new tmp[11];
    format(tmp, sizeof(tmp), "%d%d", random(9000)+1000, SpielerInfo[playerid][db_id]);
    return strval(tmp);
    }
    Man muss eben bedenken, dass bei 2^31-1 Schluss ist.


    Ansonsten müsste man die Telefonnummer in einem String speichern, dann sähe es einfach so aus:
    stock Nummer(playerid)
    {
    new tmp[32];
    format(tmp, sizeof(tmp), "%d%d", random(90000)+10000, SpielerInfo[playerid][db_id]);
    return tmp;
    }
    Das hat dann so gut wie keine Grenze (eine die unter normalen Umständen nicht erreicht werden kann).


    Sowas ähnliches haben wir auch hier schonmal gehabt: Spawn funktioniert nicht?
    Durch die User-ID an sich ist es eben schon unmöglich, dass zwei Leute die gleiche Nummer bekommen, da ja jeder eine andere User ID hat, Plus eine X-Beliebige Zufallszahl, mit einer festen Anzahl an Stellen.
    Wobei dort noch eine zusätzliche Prüfung eingebaut ist (die wie beschrieben aber nie wahr sein kann, aber sicher ist sicher).