Kockadobó bővítmény phpBB fórumokhoz
Ha fórumos szerepjátékot üzemeltetsz, lehet, hogy megfordult már a fejedben, hogy vajon hogyan oldható meg a legbecsületesebben mind a játékosok, mind a KM-ek, adminisztrátorok részéről a véletlenen múló események “kidobálása” a legkülönfélébb kockákkal. Ha fórumod az egyik legnépszerűbb rendszeren, a phpBB-n alapul, akkor ne keress tovább; az ebben a bejegyzésben szereplő “bővítmény” biztosan megoldja a fórumos kockadobással kapcsolatos problémáidat.
Hogyan működik?
Eddig ha kockavetésről volt szó, valószínűleg a legtöbben kézi dobálást, esetleg valamilyen online, ám phpBB-től független rendszert használtak. Ilyenkor bízhattál ugyan az illető becsületességében, de sajnos nem volt lehetőséged ténylegesen leellenőrizni magát a dobást. Ezzel szemben a phpBB Kockadobóval (legyen ez a neve ) a dobások a fórumhozzászólás létrehozásakor, abba “beágyazva keletkeznek”, melyet a hozzászóló is csak a post megjelenésekor láthat. Sőt maguk a dobások adatbázisba kerülnek, ahol dátum szerint ellenőrizheted értéküket, akár még a hozzászólás módosítása után is. A piszkozatokban természetesen nem jelenik meg a dobás, csakis a hsz. elküldésekor. A Kockadobó egyébként nem okoz semmilyen észrevehető változást a fórumodban, egyedül a hozzászólások “dobási részét” számolja ki.
Használata
Amikor olyan helyzetbe kerülsz, hogy dobnod kell a kockákkal, akkor a “dobást” (vagyis a kockák számát, értékét, esetleg a plusz módosítót) helyezd függőleges | | jelek közé (Alt + q), szóközök nélkül. A rendszer innentől már meghatározza, hogy mivel, hányszor kell dobni, és az eredmény megjelenik a hozzászólásodban. Hogyan is néz ki ez a gyakorlatban? Lássunk egy példát!
Ha mondjuk ezt írod (Az elválasztó | | jelek közt szóközök nélkül):
“Rendben, akkor itt az idő, hogy dobjak. Tudok dobni simán | D12 |-t, vagy | 3d6 |-t, sőt még a | 10k4+8 | vagy a | 2K12+4| is működik. Akár még formázhatom is, pl. [ b ] | K6+2 | [ / b ] alakban.”
Akkor ez így jelenik meg:
“Rendben, akkor itt az idő, hogy dobjak. Tudok dobni simán |4+0=4|-t, vagy |1+6+1+0=8|-t, sőt még a |2+2+3+1+2+3+1+3+2+1+8=28| vagy a |5+2+4=11| is működik. Akár még formázhatom is, pl. |3+2=5| alakban.”
Tipp: pl. ÚTK-s íjász szabály esetén nem kell minden egyes dobást új postba írni, hanem “megelőlegezheted” a sikeres dobásokat. Pl. egymás után 4-5-öt is dobsz (| d6 |, | d6 |, | D6 |, | k6 |, | K6 |), és dobásaidat addig adod össze, amíg azok értéke el nem tér a 6-tól. Ugyanígy a TÉ és SP is dobható egyszerre, hogy sikeres támadás után egyből lehessen FP-levonást számolni.
Telepítés
Mivel a phpBB nyílt forrású rendszer, ezért kódja tetszőlegesen alakítható, bővíthető. Sőt, változtatásaidat még a fejlesztők is tiszteletben tartják, hiszen a későbbi frissítések során módosításaid akár “beforgathatók” az új verzióba. Fontos azonban, hogy legyen hozzáférésed a phpBB fájljaihoz, valamint a rendszer adatbázisához.
Rátérve a Kockadobóra két telepítési mód közül is választhatsz.
1. Frissítés tömörített fájlból
Ha a jelenleg legújabb, 3.0.8 verziójú phpBB-t használod, akkor a legkényelmesebb, ha letöltöd a lentebb található tömörített fájlt, és kicsomagolod a phpBB főkönyvtárába. A módosítás az alábbi fájlokra lesz hatással, melyekről érdemes biztonsági másolatot készítened:
- includes/functions_posting.php
- posting.php
A tömörített Kockadobót ide kattintva töltheted le:
phpBB Kockadobó [32,5 KB]
A Kockadobó az első hozzászóláskor létrehoz egy kockadobasok nevű adatbázis táblát, melyben ellenőrizheted majd a megtörtént dobásokat.
2. Fájlok kézi módosítása
Ha esetleg 3.0.8 verziótól eltérő phpBB-t használsz, a kézi telepítés javasolt.
1. Másold ki az alábbi kódot:
/** * Kockadobasok behelyettesitese egy stringben * Visszater: az atalakitott string * Hasznalhato formatumok: |D12|, |3d6|, |2k4+8|, |k6+12|, |5K2+10| stb. * Keszitette: Krazal */ function kockadobo($uzenet) { global $db; $sql = "CREATE TABLE IF NOT EXISTS `kockadobasok` ( `id` int(11) NOT NULL AUTO_INCREMENT, `datum` datetime NOT NULL, `kockak` varchar(30) NOT NULL, `ertek` int(11) NOT NULL, PRIMARY KEY (`id`) ) AUTO_INCREMENT=1 ;"; $db->sql_query($sql); $uj_uzenet = ""; $tagok = explode("|", $uzenet); foreach ($tagok as $tag_id => $tag_val) { if ((strpos($tag_val, " ") === false) && (strpos(strtolower($tag_val), "k") !== false || strpos(strtolower($tag_val), "d") !== false)) { // Szorzo megallapitasa $szorzo = 1; $szorzo_pos = strpos(strtolower($tag_val), "k"); if ($szorzo_pos === false) { $szorzo_pos = strpos(strtolower($tag_val), "d"); } if ($szorzo_pos !== false && (int)(substr($tag_val, 0, $szorzo_pos)) !== 0) { $szorzo = substr($tag_val, 0, $szorzo_pos); } // Van plusz osszeg? $plusz = 0; $plusz_pos = strlen($tag_val)+1; $alap = substr($tag_val, $szorzo_pos+1); if (strpos($tag_val, "+") !== false) { $plusz_pos = strpos($tag_val, "+"); $plusz = substr($tag_val, $plusz_pos+1); $alap = substr($tag_val, $szorzo_pos+1, (-1)*(strlen($tag_val) - $plusz_pos)); } // Random alap es Vegosszeg megallapitasa $osszeg = 0; for($i = 0; $i < $szorzo; $i++) { $random = rand(1, (int)$alap); $uj_uzenet .= $random . "+"; $osszeg += $random; } $orig_tag = $tag_val; $tag_val = $osszeg + $plusz; $uj_uzenet.= $plusz . "="; // Adatbazisba iras $sql = "INSERT INTO `kockadobasok` (`datum`, `kockak`, `ertek`) VALUES ('" . date("Y-m-d H:i:s") . "', '$orig_tag', '$tag_val')"; $db->sql_query($sql); } $uj_uzenet .= $tag_val . "|"; } return substr($uj_uzenet, 0, -1); }
2. Nyisd meg szerkesztésre az includes/functions_posting.php fájlt. Szerkesztés előtt ajánlott a fájlról biztonsági mentést készítened. Szerkesztéshez akár egyszerű Jegyzettömböt is használhatsz, de Wordöt semmiképpen se!
3. Illeszd be a kimásolt kódot. A fájl elején lévő “if (!defined(‘IN_PHPBB’))” részt lezáró kapcsos ‘}’ zárójel után (tehát nagyjából a 18. sortól) szúrd be a kimásolt rész.
4. Mentsd el a fájlt. Így felkészítetted a phpBB-t a dobások kezelésére, azonban még nem végeztél!
5. Másold ki az alábbi kódot:
if ($submit) $message_parser->message = utf8_normalize_nfc(kockadobo(request_var('message', '', true))); else $message_parser->message = utf8_normalize_nfc(request_var('message', '', true));
6. Nyisd meg szerkesztésre a posting.php fájlt. Erről is érdemes biztonsági mentést készítened.
7. Keresd meg az alábbi sort. A 663. sor körül lesz, de ha rákeresel arra a szövegrészletre, hogy “(‘message’, ”, true)”, akkor 1-2 találaton belül meglesz a lenti részlet.
$message_parser->message = utf8_normalize_nfc(request_var('message', '', true));
8. Töröld ki az egész sort, és illeszd be helyére a kimásolt kódot.
9. Mentsd a fájlt.
Törlés
Ha a későbbiekben már nincs szükséged a Kockadobóra, akkor a törlés a Telepítés fordítottjaként működik. Ennél viszont egyszerűbb, ha a visszaállítod a biztonsági mentéseidet a korábbi két fájlról:
- includes/functions_posting.php
- posting.php
A visszaállításon kívül ne felejtsd el törölni a kockadobasok táblát a phpBB adatbázisából!
Hello!
Kipróbáltam a bővítményt, szuperül működik, nagy-nagy köszi érte!

Egyetlen kérdésem lenne: említetted, hogy csinál egy táblázatot, ahova menti a dobásokat. Hova rakja ezt a táblázatot? Sehol nem lelem
Köszi előre is a választ!
Szia!
A dobásokat sajnos még csak adatbázisban tudod ellenőrizni. phpMyAdminban a ‘kockadobasok’ táblában szerepelnek a gurítások dátum szerint.
Hello!
Ó, megvan! A phpMyAdmin nem jutott eszembe
Köszi!
Ha Neked vagy ismerősödnek van online szerepjáték fóruma, akkor egy HSZ-ben bátran belinkelheted a weblapot.