Skip to content

Commit c3dda47

Browse files
sung17Deathgiver
andauthored
feat(minigames): add Lucky Wheel minigame type (#1049)
Extends the Minigame tool beyond Jackpot with a second playable type: hand-authored wheel SVG art with spin-to-target rotation math, its own play/preview screens, and shared MinigamePlayLayout/MinigamePreviewLayout shells so future types (gashapon, drawLots, scratchOff) get correct vertical centering and dispatch registries for free instead of duplicating layout per type. Also generalizes per-prize win/lose messages into one outcome message per minigame (text/flow/node), adds an optional prize-name custom-field sync, and fixes two correctness issues found in review: the public play action now gates on the same MINIGAME_PLAY_SCREENS registry the page uses (was drifting from MINIGAME_TYPES_ENABLED_FOR_CREATION), and showName now falls back to true for minigames saved before the field existed. Co-authored-by: Deathgiver <anonymous@users.noreply.github.com>
1 parent 69c4c1a commit c3dda47

67 files changed

Lines changed: 2405 additions & 978 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/builder/messages/ar.json

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,8 +1077,8 @@
10771077
"aiDeleteMessageHistory": "{aiName}: حذف سجل الرسائل"
10781078
},
10791079
"steps": {
1080-
"label": "الخطوات",
1081-
"placeholder": "اختر خطوة"
1080+
"label": "عقدة",
1081+
"placeholder": "اختر عقدة"
10821082
},
10831083
"folder": {
10841084
"label": "المجلد"
@@ -5381,7 +5381,8 @@
53815381
"sumOfProbabilities": "مجموع جميع الاحتمالات: {value}%",
53825382
"loseProbability": "احتمال الخسارة: {value}%",
53835383
"winProbability": "احتمال الفوز: {value}%",
5384-
"newPrize": "جائزة جديدة"
5384+
"newPrize": "جائزة جديدة",
5385+
"prizeNameCustomFieldLabel": "حفظ اسم الجائزة في الحقل المخصص"
53855386
},
53865387
"prizeItemDialog": {
53875388
"prizeTitle": "تعديل الجائزة",
@@ -5390,17 +5391,20 @@
53905391
"nonWinningTitleLabel": "العنوان",
53915392
"loseImageDescription": "الحجم الموصى به 120×120 بكسل",
53925393
"quantityLabel": "كمية الجائزة",
5393-
"quantityDescription": "عدد المرات المتبقية التي يمكن فيها الفوز بهذه الجائزة؛ ينقص بمقدار 1 مع كل فوز. اتركه فارغًا لعدد غير محدود.",
5394-
"sendMessage": "إرسال رسالة عند عدم فوز اللاعب",
5395-
"sendWinMessage": "إرسال رسالة إلى الفائز الذي حصل على الجائزة",
5396-
"messageMode": "نوع الرسالة",
5397-
"messageModeText": "نص",
5398-
"messageModeFlow": "تدفق",
5399-
"messageText": "نص الرسالة"
5394+
"quantityDescription": "عدد المرات المتبقية التي يمكن فيها الفوز بهذه الجائزة؛ ينقص بمقدار 1 مع كل فوز. اتركه فارغًا لعدد غير محدود."
5395+
},
5396+
"outcomeMessage": {
5397+
"enableWin": "إرسال رسالة إلى الفائز الذي حصل على الجائزة",
5398+
"enableLose": "إرسال رسالة عند عدم فوز اللاعب",
5399+
"mode": "نوع الرسالة",
5400+
"modeText": "نص",
5401+
"modeFlow": "تدفق",
5402+
"text": "نص الرسالة"
54005403
},
54015404
"winningMessageDialog": {
54025405
"title": "إعدادات رسالة الفوز",
54035406
"titleLabel": "العنوان",
5407+
"prizeNameHint": "يمكنك استخدام '{{prize_name}}' في العنوان والوصف لإدراج اسم الجائزة.",
54045408
"acceptButtonText": "نص زر القبول",
54055409
"shareButtonText": "نص زر المشاركة",
54065410
"shareButtonDescription": "وصف زر المشاركة"
@@ -5416,8 +5420,8 @@
54165420
"shareWithFriends": "مشاركة مع الأصدقاء",
54175421
"jackpotHeader": "جاكبوت",
54185422
"jackpotBanner": "جاكبوت",
5419-
"comingSoon": "المعاينة التفصيلية لهذا النوع من الألعاب قريبًا",
5420-
"rules": "القواعد"
5423+
"luckyWheelHeader": "عجلة الحظ",
5424+
"comingSoon": "المعاينة التفصيلية لهذا النوع من الألعاب قريبًا"
54215425
},
54225426
"form": {
54235427
"generalSettingsTitle": "الإعدادات العامة",
@@ -5426,6 +5430,7 @@
54265430
"prizeSettingsTitle": "إعدادات الجوائز"
54275431
},
54285432
"generalSettings": {
5433+
"showName": "مرئي",
54295434
"playedAt": "وقت اللعب",
54305435
"rulesDescription": "وصف القواعد",
54315436
"openerTags": "وسم جهات الاتصال التي تفتح رابط اللعبة",

apps/builder/messages/da.json

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,8 +1003,8 @@
10031003
"aiDeleteMessageHistory": "{aiName}: Slet Besked Historik"
10041004
},
10051005
"steps": {
1006-
"label": "Steps",
1007-
"placeholder": "Vælg trin"
1006+
"label": "Node",
1007+
"placeholder": "Vælg node"
10081008
},
10091009
"folder": {
10101010
"label": "Mappe"
@@ -5381,7 +5381,8 @@
53815381
"sumOfProbabilities": "Sum af alle sandsynligheder: {value}%",
53825382
"loseProbability": "Sandsynlighed for tab: {value}%",
53835383
"winProbability": "Sandsynlighed for gevinst: {value}%",
5384-
"newPrize": "Ny gevinst"
5384+
"newPrize": "Ny gevinst",
5385+
"prizeNameCustomFieldLabel": "Gem præmienavn i Brugerdefineret Felt"
53855386
},
53865387
"prizeItemDialog": {
53875388
"prizeTitle": "Rediger gevinst",
@@ -5390,17 +5391,20 @@
53905391
"nonWinningTitleLabel": "Titel",
53915392
"loseImageDescription": "Anbefalet størrelse 120x120px",
53925393
"quantityLabel": "Præmieantal",
5393-
"quantityDescription": "Antal gange denne præmie stadig kan vindes; falder med 1 for hver gevinst. Lad stå tomt for ubegrænset.",
5394-
"sendMessage": "Send en besked, når spilleren ikke vinder",
5395-
"sendWinMessage": "Send besked til vinderen, der modtog præmien",
5396-
"messageMode": "Beskedtype",
5397-
"messageModeText": "Tekst",
5398-
"messageModeFlow": "Flow",
5399-
"messageText": "Besked"
5394+
"quantityDescription": "Antal gange denne præmie stadig kan vindes; falder med 1 for hver gevinst. Lad stå tomt for ubegrænset."
5395+
},
5396+
"outcomeMessage": {
5397+
"enableWin": "Send besked til vinderen, der modtog præmien",
5398+
"enableLose": "Send en besked, når spilleren ikke vinder",
5399+
"mode": "Beskedtype",
5400+
"modeText": "Tekst",
5401+
"modeFlow": "Flow",
5402+
"text": "Besked"
54005403
},
54015404
"winningMessageDialog": {
54025405
"title": "Indstillinger for gevinstbesked",
54035406
"titleLabel": "Titel",
5407+
"prizeNameHint": "Du kan bruge '{{prize_name}}' i titlen og beskrivelsen for at indsætte præmienavnet.",
54045408
"acceptButtonText": "Tekst på accepter-knap",
54055409
"shareButtonText": "Tekst på del-knap",
54065410
"shareButtonDescription": "Beskrivelse af del-knap"
@@ -5416,8 +5420,8 @@
54165420
"shareWithFriends": "Del med venner",
54175421
"jackpotHeader": "JACKPOT",
54185422
"jackpotBanner": "Jackpot",
5419-
"comingSoon": "Detaljeret forhåndsvisning kommer snart for denne spiltype",
5420-
"rules": "Regler"
5423+
"luckyWheelHeader": "LYKKEHJUL",
5424+
"comingSoon": "Detaljeret forhåndsvisning kommer snart for denne spiltype"
54215425
},
54225426
"form": {
54235427
"generalSettingsTitle": "Generelle indstillinger",
@@ -5426,6 +5430,7 @@
54265430
"prizeSettingsTitle": "Gevinstindstillinger"
54275431
},
54285432
"generalSettings": {
5433+
"showName": "Synlig",
54295434
"playedAt": "Spillet den",
54305435
"rulesDescription": "Regelbeskrivelse",
54315436
"openerTags": "Tag kontakter, der åbner spillinket",

apps/builder/messages/de.json

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,8 +1003,8 @@
10031003
"aiDeleteMessageHistory": "{aiName}: Nachrichtenverlauf löschen"
10041004
},
10051005
"steps": {
1006-
"label": "Schritte",
1007-
"placeholder": "Schritt auswählen"
1006+
"label": "Node",
1007+
"placeholder": "Node auswählen"
10081008
},
10091009
"folder": {
10101010
"label": "Ordner"
@@ -5381,7 +5381,8 @@
53815381
"sumOfProbabilities": "Summe aller Wahrscheinlichkeiten: {value}%",
53825382
"loseProbability": "Verlustwahrscheinlichkeit: {value}%",
53835383
"winProbability": "Gewinnwahrscheinlichkeit: {value}%",
5384-
"newPrize": "Neuer Gewinn"
5384+
"newPrize": "Neuer Gewinn",
5385+
"prizeNameCustomFieldLabel": "Preisname in Benutzerdefiniertes Feld speichern"
53855386
},
53865387
"prizeItemDialog": {
53875388
"prizeTitle": "Gewinn bearbeiten",
@@ -5390,17 +5391,20 @@
53905391
"nonWinningTitleLabel": "Titel",
53915392
"loseImageDescription": "Empfohlene Größe 120x120px",
53925393
"quantityLabel": "Preismenge",
5393-
"quantityDescription": "Anzahl, wie oft dieser Preis noch gewonnen werden kann; verringert sich bei jedem Gewinn um 1. Leer lassen für unbegrenzt.",
5394-
"sendMessage": "Eine Nachricht senden, wenn der Spieler nicht gewinnt",
5395-
"sendWinMessage": "Nachricht an den Gewinner senden, der den Preis erhalten hat",
5396-
"messageMode": "Nachrichtentyp",
5397-
"messageModeText": "Text",
5398-
"messageModeFlow": "Flow",
5399-
"messageText": "Nachricht"
5394+
"quantityDescription": "Anzahl, wie oft dieser Preis noch gewonnen werden kann; verringert sich bei jedem Gewinn um 1. Leer lassen für unbegrenzt."
5395+
},
5396+
"outcomeMessage": {
5397+
"enableWin": "Nachricht an den Gewinner senden, der den Preis erhalten hat",
5398+
"enableLose": "Eine Nachricht senden, wenn der Spieler nicht gewinnt",
5399+
"mode": "Nachrichtentyp",
5400+
"modeText": "Text",
5401+
"modeFlow": "Flow",
5402+
"text": "Nachricht"
54005403
},
54015404
"winningMessageDialog": {
54025405
"title": "Einstellungen für Gewinnnachricht",
54035406
"titleLabel": "Titel",
5407+
"prizeNameHint": "Sie können '{{prize_name}}' im Titel und in der Beschreibung verwenden, um den Preisnamen einzufügen.",
54045408
"acceptButtonText": "Text der Bestätigungsschaltfläche",
54055409
"shareButtonText": "Text der Teilen-Schaltfläche",
54065410
"shareButtonDescription": "Beschreibung der Teilen-Schaltfläche"
@@ -5416,8 +5420,8 @@
54165420
"shareWithFriends": "Mit Freunden teilen",
54175421
"jackpotHeader": "JACKPOT",
54185422
"jackpotBanner": "Jackpot",
5419-
"comingSoon": "Detaillierte Vorschau für diesen Spieltyp folgt in Kürze",
5420-
"rules": "Regeln"
5423+
"luckyWheelHeader": "GLÜCKSRAD",
5424+
"comingSoon": "Detaillierte Vorschau für diesen Spieltyp folgt in Kürze"
54215425
},
54225426
"form": {
54235427
"generalSettingsTitle": "Allgemeine Einstellungen",
@@ -5426,6 +5430,7 @@
54265430
"prizeSettingsTitle": "Gewinneinstellungen"
54275431
},
54285432
"generalSettings": {
5433+
"showName": "Sichtbar",
54295434
"playedAt": "Gespielt am",
54305435
"rulesDescription": "Regelbeschreibung",
54315436
"openerTags": "Kontakte markieren, die den Spiellink öffnen",

apps/builder/messages/en.json

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,8 +1086,8 @@
10861086
"aiDeleteMessageHistory": "{aiName}: Delete Message History"
10871087
},
10881088
"steps": {
1089-
"label": "Steps",
1090-
"placeholder": "Select step"
1089+
"label": "Node",
1090+
"placeholder": "Select node"
10911091
},
10921092
"folder": {
10931093
"label": "Folder"
@@ -5381,7 +5381,8 @@
53815381
"sumOfProbabilities": "Sum of all probabilities: {value}%",
53825382
"loseProbability": "Lose probability: {value}%",
53835383
"winProbability": "Win probability: {value}%",
5384-
"newPrize": "New Prize"
5384+
"newPrize": "New Prize",
5385+
"prizeNameCustomFieldLabel": "Save prize name to Custom Field"
53855386
},
53865387
"prizeItemDialog": {
53875388
"prizeTitle": "Edit Prize",
@@ -5390,17 +5391,20 @@
53905391
"nonWinningTitleLabel": "Title",
53915392
"loseImageDescription": "Recommended size 120x120px",
53925393
"quantityLabel": "Prize Quantity",
5393-
"quantityDescription": "Number of times this prize can still be won; decreases by 1 each time it's won. Leave empty for unlimited.",
5394-
"sendMessage": "Send a message when the player doesn't win",
5395-
"sendWinMessage": "Send message to winner who received the prize",
5396-
"messageMode": "Message type",
5397-
"messageModeText": "Text",
5398-
"messageModeFlow": "Flow",
5399-
"messageText": "Message"
5394+
"quantityDescription": "Number of times this prize can still be won; decreases by 1 each time it's won. Leave empty for unlimited."
5395+
},
5396+
"outcomeMessage": {
5397+
"enableWin": "Send message to winner who received the prize",
5398+
"enableLose": "Send a message when the player doesn't win",
5399+
"mode": "Message type",
5400+
"modeText": "Text",
5401+
"modeFlow": "Flow",
5402+
"text": "Message"
54005403
},
54015404
"winningMessageDialog": {
54025405
"title": "Winning Message Settings",
54035406
"titleLabel": "Title",
5407+
"prizeNameHint": "You can use '{{prize_name}}' in the title and description to insert the prize name.",
54045408
"acceptButtonText": "Accept Button Text",
54055409
"shareButtonText": "Share Button Text",
54065410
"shareButtonDescription": "Share Button Description"
@@ -5416,8 +5420,8 @@
54165420
"shareWithFriends": "Share with friends",
54175421
"jackpotHeader": "JACKPOT",
54185422
"jackpotBanner": "Jackpot",
5419-
"comingSoon": "Detailed preview coming soon for this game type",
5420-
"rules": "Rules"
5423+
"luckyWheelHeader": "LUCKY WHEEL",
5424+
"comingSoon": "Detailed preview coming soon for this game type"
54215425
},
54225426
"form": {
54235427
"generalSettingsTitle": "General Setting",
@@ -5426,6 +5430,7 @@
54265430
"prizeSettingsTitle": "Prize Settings"
54275431
},
54285432
"generalSettings": {
5433+
"showName": "Visible",
54295434
"playedAt": "Played At",
54305435
"rulesDescription": "Rules Description",
54315436
"openerTags": "Tag contacts who open the game link",

apps/builder/messages/es.json

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,8 +1077,8 @@
10771077
"aiDeleteMessageHistory": "{aiName}: Eliminar Mensaje Historial"
10781078
},
10791079
"steps": {
1080-
"label": "Pasos",
1081-
"placeholder": "Seleccionar paso"
1080+
"label": "Nodo",
1081+
"placeholder": "Seleccionar nodo"
10821082
},
10831083
"folder": {
10841084
"label": "Carpeta"
@@ -5381,7 +5381,8 @@
53815381
"sumOfProbabilities": "Suma de todas las probabilidades: {value}%",
53825382
"loseProbability": "Probabilidad de no ganar: {value}%",
53835383
"winProbability": "Probabilidad de ganar: {value}%",
5384-
"newPrize": "Nuevo premio"
5384+
"newPrize": "Nuevo premio",
5385+
"prizeNameCustomFieldLabel": "Guardar el nombre del premio en el Campo personalizado"
53855386
},
53865387
"prizeItemDialog": {
53875388
"prizeTitle": "Editar premio",
@@ -5390,17 +5391,20 @@
53905391
"nonWinningTitleLabel": "Título",
53915392
"loseImageDescription": "Tamaño recomendado 120x120px",
53925393
"quantityLabel": "Cantidad del premio",
5393-
"quantityDescription": "Número de veces que este premio aún se puede ganar; disminuye en 1 cada vez que se gana. Deja vacío para ilimitado.",
5394-
"sendMessage": "Enviar un mensaje cuando el jugador no gane",
5395-
"sendWinMessage": "Enviar mensaje al ganador que recibió el premio",
5396-
"messageMode": "Tipo de mensaje",
5397-
"messageModeText": "Texto",
5398-
"messageModeFlow": "Flujo",
5399-
"messageText": "Mensaje"
5394+
"quantityDescription": "Número de veces que este premio aún se puede ganar; disminuye en 1 cada vez que se gana. Deja vacío para ilimitado."
5395+
},
5396+
"outcomeMessage": {
5397+
"enableWin": "Enviar mensaje al ganador que recibió el premio",
5398+
"enableLose": "Enviar un mensaje cuando el jugador no gane",
5399+
"mode": "Tipo de mensaje",
5400+
"modeText": "Texto",
5401+
"modeFlow": "Flujo",
5402+
"text": "Mensaje"
54005403
},
54015404
"winningMessageDialog": {
54025405
"title": "Configuración del mensaje de premio",
54035406
"titleLabel": "Título",
5407+
"prizeNameHint": "Puedes usar '{{prize_name}}' en el título y la descripción para insertar el nombre del premio.",
54045408
"acceptButtonText": "Texto del botón de aceptar",
54055409
"shareButtonText": "Texto del botón de compartir",
54065410
"shareButtonDescription": "Descripción del botón de compartir"
@@ -5416,8 +5420,8 @@
54165420
"shareWithFriends": "Compartir con amigos",
54175421
"jackpotHeader": "JACKPOT",
54185422
"jackpotBanner": "Jackpot",
5419-
"comingSoon": "La vista previa detallada de este tipo de juego estará disponible próximamente",
5420-
"rules": "Reglas"
5423+
"luckyWheelHeader": "RULETA DE LA SUERTE",
5424+
"comingSoon": "La vista previa detallada de este tipo de juego estará disponible próximamente"
54215425
},
54225426
"form": {
54235427
"generalSettingsTitle": "Configuración general",
@@ -5426,6 +5430,7 @@
54265430
"prizeSettingsTitle": "Configuración de premios"
54275431
},
54285432
"generalSettings": {
5433+
"showName": "Visible",
54295434
"playedAt": "Jugado el",
54305435
"rulesDescription": "Descripción de las reglas",
54315436
"openerTags": "Etiquetar a los contactos que abren el enlace del juego",

0 commit comments

Comments
 (0)