Kockadobó bővítmény phpBB fórumokhoz

phpBB logoHa 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!

    • Lisbeth
    • augusztus 14th, 2013 8:27du.

    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!

      • Krazal
      • augusztus 15th, 2013 8:28de.

      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.

        • Lisbeth
        • augusztus 18th, 2013 9:59du.

        Hello!

        Ó, megvan! A phpMyAdmin nem jutott eszembe :)
        Köszi!

    • Krazal
    • január 16th, 2011 8:44du.

    Ha Neked vagy ismerősödnek van online szerepjáték fóruma, akkor egy HSZ-ben bátran belinkelheted a weblapot.

  1. Nincs még visszakövetés.