Ezt még egyszer PHP-ban csináltam, amikor ki kellett írni néhány random számot, melyek nem lehettek ugyanazok. Átírtam pawn nyelvre, na meg a te kérésedhez illõre, remélem mûködni fog, és hasznát veszed a dolgoknak. Ha átírás közben elírtam valamit, ez van, sajnálom, de a lényegét érteni fogod a kódnak, és sikerül majd megoldanod a problémádat.
new Szam = // Itt csináld meg a random 4 jegyû számot!
format(mysql_string, sizeof(mysql_string), \"SELECT Teloszam FROM Tabla\"); // Lekérdezés formázása
mysql_query(mysql_string); // Lekérdezés
mysql_store_result();
while(mysql_fetch_row(mysql_line)) // Megnézzük az összes találatot
{
if(Szam == strval(mysql_line)) // Ha a szám nem egyezik meg vele, nem történik semmi, azonban ha igen...
{
new i, Joszam;
for(i = 0; Joszam != 1; i++) // ...elindul ez a for ciklus. Addig ismétlõdik, ameddig a Joszam értéke 1 nem lesz
{
Szam = // Ide írd le megint azt, amivel megcsinálod a random 4 jegyû számot! Ezzel egy új számot kérve
if(Szam != strval(mysql_line)) // Amennyiben nem egyezik meg a Szam, és a találat értéke, a Joszam értéke 1 lesz, így nem folytatódik tovább a ciklus a végtelenségig, ismét új számot kérve
{
Joszam = 1;
}
}
}
}
mysql_free_result(); // Felszabadítod az erõforrást
// Itt már a Szam értékbe biztosan nem fog megegyezni más telefonszámok értékével. Ha egyszerre több játékos használja a dolgot, érdemes rá tenni egy playerid-s tömböt.
// Frissíted az adatbázist, vagy amit akarsz csinálni, például:
format(mysql_string, sizeof(mysql_string), \"UPDATE Tabla SET Teloszam = \'%d\' WHERE Nev = \'%s\'\", Szam, Nev(playerid));
mysql_query(mysql_string);
Ha esetleg elrontottam volna itt, pawn nyelvben, vagy nem értenéd a kód lényegét, mûködését, itt a PHP kód átirata egy darab teszt PHP fájlba, melyben a változók nevét átírtam a teszt fájlhoz, melyet rengetegszer újratöltöttem, és sosem kaptam ugyanazt a 2 számot. De ettõl függetlenül magának az elvnek mûködnie KELL, legyen szó bármely nyelvrõl, bármilyen értékadási módszerrõl, akár MySQL-os lekérdezésrõl, habár szerintem a pawn nyelves átiratom sincs elrontva.
$Szam1 = rand(1, 4);
$Szam2 = rand(1, 4);
if($Szam1 == $Szam2)
{
for($i= 0; $Joszam != 1; $i++)
{
$Szam2 = rand(1, 4);
if($Szam2 != $Szam1)
{
$Joszam = 1;
}
}
$Joszam = 0;
echo \'Amennyiben ezt az üznetet látod, eleinte ugyanaz a két szám lett legenerálva.<br>
Ezek után persze nem lenne szabad a szöveg alatt ugyanazt a két számot látnod.<br><br>\';
}
echo $Szam1;
echo \'<br>\';
echo $Szam2;