add randomizer module
All checks were successful
Deploy Sokko G / deploy (push) Successful in 17s

This commit is contained in:
Shinuwa 2026-08-31 09:10:38 +02:00
parent 07de342fc2
commit 35fe877d58
32 changed files with 3822 additions and 200 deletions

View file

@ -45,6 +45,10 @@
"id": "mf",
"type": "goalTree"
},
{
"id": "mg",
"type": "randomizer"
},
{
"id": "m9",
"type": "timer"
@ -233,6 +237,7 @@
"m7",
"m8",
"mf",
"mg",
"m9",
"md",
"me",
@ -255,6 +260,7 @@
"m7",
"m8",
"mf",
"mg",
"m9",
"md",
"me",
@ -4073,6 +4079,686 @@
}
]
},
"mg": {
"activeTab": "teams",
"dice": {
"faces": 6,
"rolls": 5,
"results": [
1,
2,
4,
5,
6
],
"history": [
{
"id": "x-dice-history-1",
"at": "2026-08-31T06:52:00.000Z",
"results": [
1,
2,
4,
5,
6
]
},
{
"id": "x-dice-history-2",
"at": "2026-08-31T06:49:00.000Z",
"results": [
6,
3,
2,
2,
5
]
},
{
"id": "x-dice-history-3",
"at": "2026-08-31T06:46:00.000Z",
"results": [
4,
4,
1,
3,
6
]
}
]
},
"wheel": {
"draws": 3,
"entries": [
{
"id": "x1",
"label": "Oui",
"weight": 2
},
{
"id": "x2",
"label": "Non",
"weight": 2
},
{
"id": "x3",
"label": "Peut etre",
"weight": 1
}
],
"results": [
"Oui",
"Non",
"Peut etre"
],
"history": [
{
"id": "x-wheel-history-1",
"at": "2026-08-31T06:51:00.000Z",
"results": [
"Oui",
"Non",
"Peut etre"
]
},
{
"id": "x-wheel-history-2",
"at": "2026-08-31T06:47:00.000Z",
"results": [
"Non",
"Oui",
"Non"
]
},
{
"id": "x-wheel-history-3",
"at": "2026-08-31T06:44:00.000Z",
"results": [
"Peut etre",
"Oui",
"Non"
]
}
]
},
"teams": {
"teamCount": 4,
"playerSelectionMode": "all",
"playerSelectionCount": 6,
"players": [
{
"id": "x4",
"name": "Dracaufeu",
"score": 0
},
{
"id": "x5",
"name": "Tortank",
"score": 0
},
{
"id": "x6",
"name": "Florizarre",
"score": 0
},
{
"id": "x7",
"name": "Dracolosse",
"score": 0
},
{
"id": "x8",
"name": "Ectoplasma",
"score": 0
},
{
"id": "x9",
"name": "Alakazam",
"score": 0
},
{
"id": "x10",
"name": "Mackogneur",
"score": 0
},
{
"id": "x11",
"name": "Cizayox",
"score": 0
},
{
"id": "x12",
"name": "Tyranocif",
"score": 0
},
{
"id": "x13",
"name": "Gardevoir",
"score": 0
},
{
"id": "x14",
"name": "Drattak",
"score": 0
},
{
"id": "x15",
"name": "Métalosse",
"score": 0
},
{
"id": "x16",
"name": "Carchacrok",
"score": 0
},
{
"id": "x17",
"name": "Lucario",
"score": 0
},
{
"id": "x18",
"name": "Trioxhydre",
"score": 0
},
{
"id": "x19",
"name": "Amphinobi",
"score": 0
},
{
"id": "x20",
"name": "Archéduc",
"score": 0
},
{
"id": "x21",
"name": "Félinferno",
"score": 0
},
{
"id": "x22",
"name": "Corvaillus",
"score": 0
},
{
"id": "x23",
"name": "Lanssorien",
"score": 0
},
{
"id": "x24",
"name": "Raichu",
"score": 0
},
{
"id": "x25",
"name": "Artikodin",
"score": 0
},
{
"id": "x26",
"name": "Électhor",
"score": 0
},
{
"id": "x27",
"name": "Sulfura",
"score": 0
}
],
"exclusions": [
{
"id": "x28",
"playerAId": "x7",
"playerBIds": [
"x14",
"x16",
"x23"
],
"mode": "group"
},
{
"id": "x29",
"playerAId": "x25",
"playerBIds": [
"x26",
"x27"
],
"mode": "group"
}
],
"teams": [
{
"id": "team-1",
"name": "Équipe 1",
"score": 0,
"players": [
{
"id": "x9",
"name": "Alakazam",
"score": 0
},
{
"id": "x24",
"name": "Raichu",
"score": 0
},
{
"id": "x20",
"name": "Archéduc",
"score": 0
},
{
"id": "x7",
"name": "Dracolosse",
"score": 0
},
{
"id": "x5",
"name": "Tortank",
"score": 0
},
{
"id": "x26",
"name": "Électhor",
"score": 0
}
]
},
{
"id": "team-2",
"name": "Équipe 2",
"score": 0,
"players": [
{
"id": "x25",
"name": "Artikodin",
"score": 0
},
{
"id": "x8",
"name": "Ectoplasma",
"score": 0
},
{
"id": "x13",
"name": "Gardevoir",
"score": 0
},
{
"id": "x15",
"name": "Métalosse",
"score": 0
},
{
"id": "x17",
"name": "Lucario",
"score": 0
},
{
"id": "x16",
"name": "Carchacrok",
"score": 0
}
]
},
{
"id": "team-3",
"name": "Équipe 3",
"score": 0,
"players": [
{
"id": "x12",
"name": "Tyranocif",
"score": 0
},
{
"id": "x11",
"name": "Cizayox",
"score": 0
},
{
"id": "x10",
"name": "Mackogneur",
"score": 0
},
{
"id": "x18",
"name": "Trioxhydre",
"score": 0
},
{
"id": "x6",
"name": "Florizarre",
"score": 0
},
{
"id": "x23",
"name": "Lanssorien",
"score": 0
}
]
},
{
"id": "team-4",
"name": "Équipe 4",
"score": 0,
"players": [
{
"id": "x27",
"name": "Sulfura",
"score": 0
},
{
"id": "x21",
"name": "Félinferno",
"score": 0
},
{
"id": "x19",
"name": "Amphinobi",
"score": 0
},
{
"id": "x22",
"name": "Corvaillus",
"score": 0
},
{
"id": "x14",
"name": "Drattak",
"score": 0
},
{
"id": "x4",
"name": "Dracaufeu",
"score": 0
}
]
}
],
"history": [
{
"id": "x-teams-history-1",
"at": "2026-08-31T06:50:00.000Z",
"teams": [
{
"id": "team-1",
"name": "Équipe 1",
"score": 0,
"players": [
{
"id": "x9",
"name": "Alakazam",
"score": 0
},
{
"id": "x24",
"name": "Raichu",
"score": 0
},
{
"id": "x20",
"name": "Archéduc",
"score": 0
},
{
"id": "x7",
"name": "Dracolosse",
"score": 0
},
{
"id": "x5",
"name": "Tortank",
"score": 0
},
{
"id": "x26",
"name": "Électhor",
"score": 0
}
]
},
{
"id": "team-2",
"name": "Équipe 2",
"score": 0,
"players": [
{
"id": "x25",
"name": "Artikodin",
"score": 0
},
{
"id": "x8",
"name": "Ectoplasma",
"score": 0
},
{
"id": "x13",
"name": "Gardevoir",
"score": 0
},
{
"id": "x15",
"name": "Métalosse",
"score": 0
},
{
"id": "x17",
"name": "Lucario",
"score": 0
},
{
"id": "x16",
"name": "Carchacrok",
"score": 0
}
]
},
{
"id": "team-3",
"name": "Équipe 3",
"score": 0,
"players": [
{
"id": "x12",
"name": "Tyranocif",
"score": 0
},
{
"id": "x11",
"name": "Cizayox",
"score": 0
},
{
"id": "x10",
"name": "Mackogneur",
"score": 0
},
{
"id": "x18",
"name": "Trioxhydre",
"score": 0
},
{
"id": "x6",
"name": "Florizarre",
"score": 0
},
{
"id": "x23",
"name": "Lanssorien",
"score": 0
}
]
},
{
"id": "team-4",
"name": "Équipe 4",
"score": 0,
"players": [
{
"id": "x27",
"name": "Sulfura",
"score": 0
},
{
"id": "x21",
"name": "Félinferno",
"score": 0
},
{
"id": "x19",
"name": "Amphinobi",
"score": 0
},
{
"id": "x22",
"name": "Corvaillus",
"score": 0
},
{
"id": "x14",
"name": "Drattak",
"score": 0
},
{
"id": "x4",
"name": "Dracaufeu",
"score": 0
}
]
}
]
},
{
"id": "x-teams-history-2",
"at": "2026-08-31T06:48:00.000Z",
"teams": [
{
"id": "team-1",
"name": "Équipe 1",
"score": 0,
"players": [
{
"id": "x19",
"name": "Amphinobi",
"score": 0
},
{
"id": "x13",
"name": "Gardevoir",
"score": 0
},
{
"id": "x4",
"name": "Dracaufeu",
"score": 0
},
{
"id": "x9",
"name": "Alakazam",
"score": 0
},
{
"id": "x6",
"name": "Florizarre",
"score": 0
},
{
"id": "x11",
"name": "Cizayox",
"score": 0
}
]
}
]
},
{
"id": "x-teams-history-3",
"at": "2026-08-31T06:48:00.000Z",
"teams": [
{
"id": "team-1",
"name": "Équipe 1",
"score": 0,
"players": [
{
"id": "x13",
"name": "Gardevoir",
"score": 0
},
{
"id": "x19",
"name": "Amphinobi",
"score": 0
},
{
"id": "x16",
"name": "Carchacrok",
"score": 0
},
{
"id": "x10",
"name": "Mackogneur",
"score": 0
},
{
"id": "x21",
"name": "Félinferno",
"score": 0
},
{
"id": "x9",
"name": "Alakazam",
"score": 0
}
]
},
{
"id": "team-2",
"name": "Équipe 2",
"score": 0,
"players": [
{
"id": "x5",
"name": "Tortank",
"score": 0
},
{
"id": "x11",
"name": "Cizayox",
"score": 0
},
{
"id": "x18",
"name": "Trioxhydre",
"score": 0
},
{
"id": "x22",
"name": "Corvaillus",
"score": 0
},
{
"id": "x12",
"name": "Tyranocif",
"score": 0
},
{
"id": "x20",
"name": "Archéduc",
"score": 0
}
]
}
]
}
]
}
},
"m9": {
"activeTab": "countdown",
"stopwatch": {

View file

@ -436,6 +436,61 @@
"example": "Top 1: 3\nTop 2: 6\nTop 3: 2\nTop 4: 1"
}
},
"randomizer": {
"controls": [
{
"group": "Tirage",
"icon": "play-circle",
"title": "Lancer",
"preview": {
"kind": "iconButton",
"icon": "play-circle"
}
},
{
"group": "Paramètres",
"icon": "dice",
"title": "Faces, poids et scores",
"preview": {
"kind": "textButton",
"label": "N"
}
},
{
"group": "Historique",
"icon": "rubber",
"title": "Effacer l'historique",
"preview": {
"kind": "button",
"label": "Effacer"
}
}
],
"features": [
{
"title": "Trois modes fixes",
"text": "Dé numérique, roue pondérée et équipes équilibrées restent disponibles dans le même outil.",
"details": [
"Le dé tire une ou plusieurs valeurs entre 1 et le nombre de faces.",
"La roue utilise des poids pour rendre certaines valeurs plus probables.",
"Les équipes répartissent les joueurs actifs en équilibrant les scores."
]
},
{
"title": "Contraintes d'équipes",
"text": "Les exclusions paire-à-paire empêchent deux joueurs de tomber dans la même équipe quand une solution existe.",
"details": [
"Chaque joueur peut être désactivé sans être supprimé.",
"Le score sert uniquement à équilibrer les équipes.",
"Si les contraintes sont impossibles, le dernier résultat valide reste affiché."
]
}
],
"importFormat": {
"text": "Le format texte contient les sections [dice], [wheel] et [teams]. Les exclusions d'équipes commencent par !.",
"example": "@activeTab: teams\n[dice]\nfaces: 6\nrolls: 5\n\n[wheel]\ndraws: 3\n\n- Oui | weight=2\n- Non | weight=2\n- Peut etre | weight=1\n\n[teams]\nteamCount: 4\nplayerSelectionMode: all\nplayerSelectionCount: 6\n\n- Dracaufeu | score=0\n- Tortank | score=0\n- Florizarre | score=0\n- Dracolosse | score=0\n- Ectoplasma | score=0\n- Alakazam | score=0\n- Mackogneur | score=0\n- Cizayox | score=0\n- Tyranocif | score=0\n- Gardevoir | score=0\n- Drattak | score=0\n- Métalosse | score=0\n- Carchacrok | score=0\n- Lucario | score=0\n- Trioxhydre | score=0\n- Amphinobi | score=0\n- Archéduc | score=0\n- Félinferno | score=0\n- Corvaillus | score=0\n- Lanssorien | score=0\n- Raichu | score=0\n- Artikodin | score=0\n- Électhor | score=0\n- Sulfura | score=0\n! Dracolosse / Drattak / Carchacrok / Lanssorien | mode=group\n! Artikodin / Électhor / Sulfura | mode=group"
}
},
"images": {
"controls": [
{
@ -1602,8 +1657,8 @@
{
"icon": "table",
"title": "Données et calculs",
"text": "Comparer des valeurs, préparer des tableaux, calculer des besoins de craft ou structurer des objectifs.",
"examples": ["Calculateur", "Tableau", "Arbre d'objectifs"]
"text": "Comparer des valeurs, préparer des tableaux, calculer des besoins de craft, structurer des objectifs ou tirer des choix aléatoires.",
"examples": ["Calculateur", "Tableau", "Arbre d'objectifs", "Randomizer"]
},
{
"icon": "clock",
@ -1919,6 +1974,70 @@
"resetTitle": "Réinitialiser",
"deleteTitle": "Supprimer"
},
"randomizer": {
"diceTab": "Dé",
"wheelTab": "Roue",
"teamsTab": "Équipes",
"facesLabel": "Faces",
"rollsLabel": "Lancers",
"rollButton": "Lancer",
"stopButton": "Arrêter",
"totalLabel": "Total",
"drawsLabel": "Tirages",
"drawButton": "Tirer",
"valuesTitle": "Valeurs",
"valuePlaceholder": "Valeur",
"savedValuesLabel": "Valeurs enregistrées",
"weightLabel": "Poids",
"addButton": "Ajouter",
"clearValuesButton": "Supprimer toutes les valeurs",
"teamCountLabel": "Équipes",
"createTeamsButton": "Créer les équipes",
"playerSelectionModeLabel": "Répartition",
"playerSelectionAll": "Tous",
"playerSelectionCount": "Nombre défini",
"playerSelectionCountLabel": "Nombre",
"nameLabel": "Nom",
"namesImportLabel": "Liste de noms",
"namesImportPlaceholder": "Un nom par ligne",
"importNamesButton": "Ajouter",
"clearNamesButton": "Supprimer tous les noms",
"valuesImportLabel": "Liste de valeurs",
"valuesImportPlaceholder": "Une valeur par ligne",
"scoreLabel": "Score",
"activeLabel": "Actif",
"firstPlayerLabel": "Nom source",
"secondPlayerLabel": "Noms exclus",
"selectNamesButton": "Choisir",
"selectedNamesLabel": "noms",
"exclusionModeLabel": "Type",
"exclusionModeSource": "Exclusions granulaires",
"exclusionModeGroup": "Tous séparés",
"addExclusionButton": "Exclure",
"exclusionsListLabel": "Combinaisons exclues",
"teamsSingularLabel": "équipe",
"teamsPluralLabel": "équipes",
"teamScoreLabel": "Score",
"emptyTeams": "Aucune équipe générée.",
"historyTitle": "Historique",
"emptyHistory": "Aucun historique.",
"clearHistoryButton": "Effacer tout",
"deleteTitle": "Supprimer",
"wheelInvalid": "Ajoutez au moins deux valeurs.",
"notEnoughPlayers": "Pas assez de joueurs actifs.",
"constraintsImpossible": "Contraintes impossibles à satisfaire.",
"importPlaceholder": "@activeTab: teams\n[dice]\nfaces: 6\nrolls: 5\n\n[wheel]\ndraws: 3\n\n- Oui | weight=2\n- Non | weight=2\n- Peut etre | weight=1\n\n[teams]\nteamCount: 4\nplayerSelectionMode: all\nplayerSelectionCount: 6\n\n- Dracaufeu | score=0\n- Tortank | score=0\n- Florizarre | score=0\n- Dracolosse | score=0\n- Ectoplasma | score=0\n- Alakazam | score=0\n- Mackogneur | score=0\n- Cizayox | score=0\n- Tyranocif | score=0\n- Gardevoir | score=0\n- Drattak | score=0\n- Métalosse | score=0\n- Carchacrok | score=0\n- Lucario | score=0\n- Trioxhydre | score=0\n- Amphinobi | score=0\n- Archéduc | score=0\n- Félinferno | score=0\n- Corvaillus | score=0\n- Lanssorien | score=0\n- Raichu | score=0\n- Artikodin | score=0\n- Électhor | score=0\n- Sulfura | score=0\n! Dracolosse / Drattak / Carchacrok / Lanssorien | mode=group\n! Artikodin / Électhor / Sulfura | mode=group",
"importOpenButton": "Importer du texte",
"exportOpenButton": "Exporter en format texte",
"importModalTitle": "Importer un randomizer",
"exportModalTitle": "Exporter un randomizer",
"importButton": "Importer le texte",
"exportButton": "Copier le texte",
"importSuccess": "Import randomizer terminé.",
"exportSuccess": "Export randomizer copié.",
"importError": "Format de randomizer invalide.",
"exportInfo": "Le format texte conserve les paramètres du dé, de la roue et des équipes."
},
"combos": {
"importPlaceholder": "@device: playstation\n# Neutral\nHadoken | device=playstation | direction:down > direction:right > button:cross",
"importOpenButton": "Importer du texte",