Hallo
nun da ich endlich wieder einen Monat Zeit habe, wollte ich mich endlich an den Würfelmod setzen.
Statt alles selber zu machen, was mir auf Grund meiner geringen Erfahrung mit der phpbb Struktur und php code zu schwierig ist, will ich den Code von folgendem Mod modifizieren:
Dice BBCode by surfer 247
Prinzipiell macht die mod schon fast alles, was ich will (Liste steht oben).
Dennoch möchte ich folgende Modifikationen vornehmen:
-Abgespeicherte Würfelwürfe anstelle von Integern für das Gesamtergebnis als Array von Integern speichern, um auf die Einzelergebnisse zurückgreifen zu können
-Bilddateien in die Ergebnisausgabe einbinden
-Code für den Abruf der gespeicherten Ergebnisse ändern
Ich werde hier die nächsten Tage meine Modifikationen am Code posten und wäre dankbar, wenn da jemand drübergucken könnte.
Um den Anfang zu machen, zuerst die Codesektion die (anscheinend) für die Generierung der Zufallsergebnisse zuständig ist.
Urcode:
Code: Alles auswählen
/*
BEGIN DICE MOD
*/
function encodediceBBCode($dice_roll, $post_id)
{
global $db, $user;
//check to see if this is a new code or an existing one (if an existing one was changed to mimmick a new one, it would have already been caught)
$dice_info = array();
if(preg_match('/([0-9]+)d([0-9]+)/i' , $dice_roll, $dice_info))
{
//make sure there is nothing extraneous and if there is, just return the original string (checks that it begins with the code and ends with the code)
if(strpos($dice_roll, $dice_info[0])!=0 || strlen(substr($dice_roll,strlen($dice_info[0])))>0)
{
return '[dice]' . $dice_roll . '[/dice]';
}
//this is a valid dice roll, add it to the database and encode it (1 => numdie , 2 => diesides)
//generate the rolls
$totalroll = '';
for($i=0 ; $i<(int) $dice_info[1] ; $i++)
{
$totalroll .= rand(1,(int) $dice_info[2]) . ':';
}
//generate the random code
do
{
$rollcode = '';
for($i=0 ; $i<10 ; $i++)
{
$rollcode .= chr(97+rand(0,25));
}
//ensure that this code is not already taken
$sql = 'SELECT * FROM ' . DICE_TABLE . ' WHERE dice_code="' . $rollcode . '"';
$db->sql_query($sql);
}while($db->sql_fetchrow($result));
//insert into the database
$sql = 'INSERT INTO ' . DICE_TABLE . ' ' . $db->sql_build_array('INSERT', array(
'post_id' => $post_id,
'totalroll' => $totalroll,
'numdice' => (int) $dice_info[1],
'numsides' => (int) $dice_info[2],
'can_remove' => 0,
'dice_code' => $rollcode,
'username' => $user->data['username']));
$db->sql_query($sql);
//return the new code so that it may be processed by the BBCode parser
return '[dice]' . $rollcode . '[/dice]';
}
else
{
return '[dice]' . $dice_roll . '[/dice]';
}
}
/*
END DICE MOD
*/
ModCode:
Code: Alles auswählen
//this is a valid dice roll, add it to the database and encode it (1 => numdie , 2 => diesides)
//generate the rolls
$totalroll = array();
for($i=0 ; $i<(int) $dice_info[1] ; $i++)
{
$totalroll[] = rand(1,(int) $dice_info[2]) . ':';
}
Außerdem würde ich für folgenden Code gerne einen Ersatz finden, der Forum-, Topic- und Post-ID des Posts, in dem gepostet wird, statt einer Zufallsvariable verwendet, weiß aber nicht, wie ich auf die Post-ID zugreifen kann, d.h. habe ich ein bisschen Pseudocode geschrieben.
Code: Alles auswählen
//generate the random code
do
{
$rollcode = '';
for($i=0 ; $i<10 ; $i++)
{
$rollcode .= chr(97+rand(0,25));
}
//ensure that this code is not already taken
$sql = 'SELECT * FROM ' . DICE_TABLE . ' WHERE dice_code="' . $rollcode . '"';
$db->sql_query($sql);
}while($db->sql_fetchrow($result));
soll zu:
//generate the random code
$i=0;
do
{
$rollcode = {{(string)$post_id} . "nr" . {(string)$i}};
//ensure that this code is not already taken
$sql = 'SELECT * FROM ' . DICE_TABLE . ' WHERE dice_code="' . $rollcode . '"';
$db->sql_query($sql);
$i++;
}while($db->sql_fetchrow($result));
Ich bin mir nicht 100%ig sicher, ob einzelne Posts alleine durch ihre Post_ID, die man im Browser als Link lesen kann, identifizierbar sind.
Beispiel:
http://www.phpbb.de/community/viewtopic ... 5#p1068346
d.h. der Post wird eindeutig durch das p1068346 identifiziert und forums und topic id sind egal(?)
Ich freue mich auf Antworten, weil ich (glaube ich) wirklich ein bisschen Hilfe von Leuten, die sich auskennen, gebrauchen kann.
More to come =)