Ich versuche grad ein random zahlen zu erstellen eine Blz
Bankleizahl 8 stellig wie mache ich das er mir eine 8stellige Bamkleizahl aber es duerfen btw nicht 2mal das gleiche dh wenn es existierz schon dann andere kommen
Ich versuche grad ein random zahlen zu erstellen eine Blz
Bankleizahl 8 stellig wie mache ich das er mir eine 8stellige Bamkleizahl aber es duerfen btw nicht 2mal das gleiche dh wenn es existierz schon dann andere kommen
new rand = random(89999999) + 10000000;
dann abfragen ob es die schon gibt, wenn ja
=> Code nochmal ausführen
Muesste ich dann nicht dann iwie ne andere zahl also es soll in etwa so stehen 46347768
Und nicht 12345678
Muesste ich dann nicht dann iwie ne andere zahl also es soll in etwa so stehen 46347768
Und nicht 12345678
random(X)
gibt einen Zufallswert zwischen 0-[X-1] aus
das heißt deine Zahl ist möglich
Muesste ich dann nicht dann iwie ne andere zahl also es soll in etwa so stehen 46347768
Und nicht 12345678
Er gibt dir in dem Fall eine Zahl definitiv über 1000000 aus, dadurch das du + 1000000 angibst.
Daher kommen so zahlen wie 2323253 raus ja
99999999 hat aber auch 8 Stellen, würde aber in Beiden Fällen ( 1. & 2. ) nicht zugelassen werden.
http://wiki.sa-mp.com/wiki/Random
ZitatReturns A random number ranging from 0 to max-1.
ZitatMuesste ich dann nicht dann iwie ne andere zahl also es soll in etwa so stehen 46347768
Und nicht 12345678
Eine Zahl zwischen "10000000 <= X <= 99999999" wird dir ausgegeben. Doppelte können natürlich eintreten.
Die Funktion random(max) errechnet einen Pseudo-Zufallswert zwischen 0 und max.
Wenn du aber die Formel "rand = random(max-min)+min" verwendest, wird eine Zahl zwischen min und max generiert.
Das ist eigentlich ganz logisch
Am besten eine Funktion:
stock CreateNumber()
{
new wert = random(89999999) + 1000000;
if(wert == exist)//Musst du abfragen ob sie schon existiert
{
CreateNumber(); //Neu ausführen, bis eine mal kommt, die es nicht gibt
}
return 1;
}
Er gibt dir in dem Fall eine Zahl definitiv über 1000000 aus, dadurch das du + 1000000 angibst.
Daher kommen so zahlen wie 2323253 raus ja
Und wie frag ich ab ob es schon existiett
Also welche speicherungsart nutzt du ?
Dini und pvar
Speicherst du den Wert per Dini oder PVar ?
Per pvar SetPVarInt(playerid,"BLZ",wert)
Per pvar SetPVarInt(playerid,"BLZ",wert)
Das ist schlecht, da der PVar beim disconnecten gelöscht wird.. soweit ich weiß.
Müssteste du mit DINI Arbeiten.
OFT:
2000. Beitrag *FREU*
Nene beim disconnecten lasse ich den pvar ins dini bzw datei speichern.
Okay. Dann musst du nur die bestehen Spielerdateien durchgehen & überprüfen ob es den Wert schon gibt.
Soweit ich weiß geht das mit Dini_Get
Ja aber die zahl wird erst erstellt wenn er sich ein konto einrichtet genauso wie der pin der aber 4stellig ist...
Bzw geht das nicht mit dini_exists.....
Ja aber die zahl wird erst erstellt wenn er sich ein konto einrichtet genauso wie der pin der aber 4stellig ist...
Bzw geht das nicht mit dini_exists.....
Du könntest es so machen die Nummer im Ordner speichern so:
new st[128];
format(st,128,"/Numbers/%i.nb",randomwert);
if(!dini_Exists(st)) CreateNumber()
else //renew
Checkst du? sry muss los
((mySQL wäre da viel besser))
Mit Dini ist das so eine Sache.
Du müsstest vielleicht alle Zahlen in eine Datei speichern. (Bsp. zahlen.txt, mit erstmal einem key (max))
Wenn jemand connectet dann und noch nicht registriert ist:
new max = dini_GetInt("zahlen.txt", "max");
dini_SetInt("zahlen.txt", "max", max+1);
for(new i; i < max; i++)
{
format(sTest, sizeof(sTest), "%i", max);
if(dini_GetInt("zahlen.txt", sTest) != 0)
{
dini_IntSet("zahlen.txt", max, 1); // 1 = Benutzer existiert, hat aber kein Bank Account.
dini_IntSet(DeineSpielerDatei, "zahl", max); // Das ist dann die Zahl in der Zahlen Datei. Sprich: 1 entspricht der Zahl 1 in der Zahlen datei.
}
}
Wenn er dann eine Zahl bekommt:
new zahl[10], max, found, key;
max = dini_GetInt("zahlen.txt", "max");
format(zahl, sizeof(zahl), "%i", dini_GetInt(SpielerDatei, "zahl"));
new wert = random(89999999) + 1000000;
loop_start:
for(new i; i < max; i++)
{
if(dini_GetInt("zahlen.txt", i) == wert) // Wenn die Zahl existiert.
{
key = i; // der Key für unten
found++;
}
}
if(found == 0) {
dini_IntSet("zahlen.txt", key, wert);
}
else
{
goto loop_start;
}
# Ungetestet, aus dem Gedächnis und auf die schnelle geschrieben. Aber so würde ich das ganze lösen. Ist zwar extrem umständlich, aber anders bekommst du es mit dini nicht hin. Da empfiehlt sich MySQL.
Die Lösung von @NicoWiss ist natürlich vieeeel einfacher.
Übrigens haben die Bankleihzahl viele Personen auf einmal, jede die bei dieser Bank ist. Die Kontonummer ist einmalig.