Aller au contenu

tilttek/loot-tables

✅ publié

Des tables de butin lancées avec n'importe quel dé : engagées avant, révélées après, et vérifiables par tous.

tilttek/loot-tables décrit ce qu'un produit peut contenir sous forme de tables d'entrées, chacune lancée avec un seul dé : six entrées avec un d6, huit avec un d8, vingt avec un d20. Chaque entrée a un nom, une image et l'emplacement qu'elle occupe : une tête, une main, une ceinture. Une boîte déclare les tables qu'un produit lance, dans l'ordre : six tables de six entrées lancent 6d6. Le tirage est vérifiable. Son germe secret est engagé avant que quiconque connaisse le résultat, les dés sont lancés à partir de lui par tilttek/dice, et la preuve publiée permet à n'importe qui de les relancer. Des dés physiques, lancés devant un caissier, sont saisis tels qu'ils sont tombés. Un texte tiré d'une liste est une table d'un seul dé. Un résultat s'écrit sous forme de code de boutique, un caractère par dé, et sous forme de ligne qu'un reçu affiche et qu'un programme relit.

Elle s'adresse à tout code PHP qui vend ou distribue ce que personne n'a choisi : une boîte à butin d'une boutique, un objet mystère d'un jeu, un texte aléatoire imprimé sur un produit. tilttek/loot-tables-bundle l'intègre à Symfony et aux options d'une commande de commerce.

C'est une bibliothèque PHP simple qui dépend seulement de tilttek/dice.

État

PartieÉtat
Entrées, tables de n'importe quel dé, boîtes, catalogues et leur lecteurImplémenté et testé
Tirages vérifiables : tirage en attente, révélation, preuve et vérificationImplémenté et testé
Résultats de dés physiques, textes tirés d'une listeImplémenté et testé
Codes de boutique et textes de tirage, écrits et relus, testés par fuzzingImplémenté et testé

Documentation

DocumentContenu
InstallationPrérequis, installation et un premier tirage.
Tables et boîtesLootEntry, LootTable, LootBox, LootCatalog, CatalogReader, et leurs limites.
TirerPendingDraw, LootDrawer, RevealedDraw, la preuve et sa vérification, les dés physiques.
CodesShopCode et DrawText.
ExceptionsLootException et ses classes.
Points d'extensionOù l'application se branche.
TestsLes tests de la bibliothèque, ses cibles de fuzzing, et comment tester le code qui l'utilise.
RéférenceChaque type de la bibliothèque, avec son rôle.

Démarrage rapide

composer require tilttek/loot-tables
use Random\Engine\Secure;
use Random\Randomizer;
use Tilttek\LootTables\Code\ShopCode;
use Tilttek\LootTables\Draw\LootDrawer;
use Tilttek\LootTables\Draw\PendingDraw;
use Tilttek\LootTables\Reading\CatalogReader;

$catalog = new CatalogReader()->read($decodedYaml);
$box = $catalog->box('starter');

$pending = PendingDraw::open(new Randomizer(new Secure()));
$commitment = $pending->commitment()->hex;      // shown to the buyer before the payment

// once, after the payment, with the client seed the buyer typed after seeing the commitment
$revealed = new LootDrawer()->reveal($box, $pending, $buyerClientSeed);
ShopCode::write($revealed->result);             // "352614"
$proof = $revealed->proof();                    // published: anyone verifies it
new LootDrawer()->verify($box, $proof);         // true

Prérequis

PHP 8.5 ou plus récent, l'extension mbstring, et tilttek/dice.

Contribuer

Les contributions sont les bienvenues sur le monodépôt de PHIL : lisez le guide de contribution et le code de conduite. Signalez une vulnérabilité en privé, comme l'explique la politique de sécurité, jamais dans un ticket public.

Licence

MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Tilttek project. Voir LICENSE.