Leider hat der Lottery Mod von zarath einen groooßen Fehler. Der Gewinner lässt sich vorausberechnen. Dazu kommt, das nicht ein Zufallslos für den Gewinn ermittelt wird, sondern aus den User IDS der Mitspieler. Damit ist es völlig egal ob einer 1 oder 100 Lose kauft.
Der entsprechende Code hierfür sieht so aus:
Code: Alles auswählen
//
// Select winner
//
list($usec, $sec) = explode(' ', microtime());
$seed = (float) $sec + ((float) $usec * 100000);
srand($seed);
$randnum = (rand(1, $sql_count)-1);
for ($i = 0; $i < $sql_count; $i++)
{
if (!( $row = $db->sql_fetchrow($result) ))
{
message_die(GENERAL_ERROR, sprintf($lang['lottery_error_selecting'], 'lottery'), '', __LINE__, __FILE__, $sql);
}
if ( $i == $randnum )
{
// Get winner's name and current items (incase items need to be added!)
$row2 = get_userdata($row['user_id']);
break;
}
}
Code: Alles auswählen
//----- Testbereich für die Ziehung der Lose -----
$sql = "SELECT min(id) FROM " . LOTTERY_TABLE . "
ORDER BY id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain id information', "", __LINE__, __FILE__, $sql);
}
$query = mysql_query($sql);
$array = mysql_fetch_array($query);
$min_id = $array[0];
$sql = "SELECT max(id) FROM " . LOTTERY_TABLE . "
ORDER BY id";
if( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain id information (max(id))', "", __LINE__, __FILE__, $sql);
}
$query = mysql_query($sql);
$array = mysql_fetch_array($query);
$max_id = $array[0];
$min_id = ($min_id - '250');
$max_id = ($max_id + '250');
$anzahl = $max_id - $min_id;
list($usec, $sec) = explode(' ', microtime());
$seed = (float) $sec + ((float) $usec * 100000);
srand($seed);
$randnum = rand($min_id, $max_id);
$sql = "SELECT l.id, l.user_id, u.username
FROM phpbb_lottery l
LEFT JOIN phpbb_users u ON (u.user_id = l.user_id)
WHERE l.id = $randnum";
if ( !$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not obtain user_id information', "", __LINE__, __FILE__, $sql);
}
$query = mysql_query($sql);
while ( $row = mysql_fetch_array($query))
{
$won_name = $row['username'];
$won_id = $row['user_id'];
}
if (empty ($won_id))
{
$won_name = 'Keiner';
$won_id = $row['user_id'];
}
echo "aktuelle Losnummern: <b>$min_id</b> --> <b>$max_id</b>, das sind <b>$anzahl</b> Lose. Gezogen wurde Los Nr.: <b>$randnum</b> / Gewonnen hätte: <b>$won_name</b> (Id: $won_id)";
// ----------------------------------------------------------------------------
oder eben so:aktuelle Losnummern: 2979 --> 3561, das sind 582 Lose. Gezogen wurde Los Nr.: 3308 / Gewonnen hätte: Gölle (Id: 11)
Mein eigentliches Problem ist aber, das sich mir nicht erschließen will, wie ich den neuen Code anstelle des alten einsetzen muss. Die Ziehung des Loses und dessen Besitzer zu ermitteln ist eine Sache...aktuelle Losnummern: 2979 --> 3561, das sind 582 Lose. Gezogen wurde Los Nr.: 3507 / Gewonnen hätte: Keiner (Id: )
Bye