Skip to content

Commit c023ce7

Browse files
author
Deathgiver
committed
feat(minigames): add Lucky Wheel minigame type
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.
1 parent 3278c0e commit c023ce7

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
@@ -1076,8 +1076,8 @@
10761076
"aiDeleteMessageHistory": "{aiName}: حذف سجل الرسائل"
10771077
},
10781078
"steps": {
1079-
"label": "الخطوات",
1080-
"placeholder": "اختر خطوة"
1079+
"label": "عقدة",
1080+
"placeholder": "اختر عقدة"
10811081
},
10821082
"folder": {
10831083
"label": "المجلد"
@@ -5375,7 +5375,8 @@
53755375
"sumOfProbabilities": "مجموع جميع الاحتمالات: {value}%",
53765376
"loseProbability": "احتمال الخسارة: {value}%",
53775377
"winProbability": "احتمال الفوز: {value}%",
5378-
"newPrize": "جائزة جديدة"
5378+
"newPrize": "جائزة جديدة",
5379+
"prizeNameCustomFieldLabel": "حفظ اسم الجائزة في الحقل المخصص"
53795380
},
53805381
"prizeItemDialog": {
53815382
"prizeTitle": "تعديل الجائزة",
@@ -5384,17 +5385,20 @@
53845385
"nonWinningTitleLabel": "العنوان",
53855386
"loseImageDescription": "الحجم الموصى به 120×120 بكسل",
53865387
"quantityLabel": "كمية الجائزة",
5387-
"quantityDescription": "عدد المرات المتبقية التي يمكن فيها الفوز بهذه الجائزة؛ ينقص بمقدار 1 مع كل فوز. اتركه فارغًا لعدد غير محدود.",
5388-
"sendMessage": "إرسال رسالة عند عدم فوز اللاعب",
5389-
"sendWinMessage": "إرسال رسالة إلى الفائز الذي حصل على الجائزة",
5390-
"messageMode": "نوع الرسالة",
5391-
"messageModeText": "نص",
5392-
"messageModeFlow": "تدفق",
5393-
"messageText": "نص الرسالة"
5388+
"quantityDescription": "عدد المرات المتبقية التي يمكن فيها الفوز بهذه الجائزة؛ ينقص بمقدار 1 مع كل فوز. اتركه فارغًا لعدد غير محدود."
5389+
},
5390+
"outcomeMessage": {
5391+
"enableWin": "إرسال رسالة إلى الفائز الذي حصل على الجائزة",
5392+
"enableLose": "إرسال رسالة عند عدم فوز اللاعب",
5393+
"mode": "نوع الرسالة",
5394+
"modeText": "نص",
5395+
"modeFlow": "تدفق",
5396+
"text": "نص الرسالة"
53945397
},
53955398
"winningMessageDialog": {
53965399
"title": "إعدادات رسالة الفوز",
53975400
"titleLabel": "العنوان",
5401+
"prizeNameHint": "يمكنك استخدام '{{prize_name}}' في العنوان والوصف لإدراج اسم الجائزة.",
53985402
"acceptButtonText": "نص زر القبول",
53995403
"shareButtonText": "نص زر المشاركة",
54005404
"shareButtonDescription": "وصف زر المشاركة"
@@ -5410,8 +5414,8 @@
54105414
"shareWithFriends": "مشاركة مع الأصدقاء",
54115415
"jackpotHeader": "جاكبوت",
54125416
"jackpotBanner": "جاكبوت",
5413-
"comingSoon": "المعاينة التفصيلية لهذا النوع من الألعاب قريبًا",
5414-
"rules": "القواعد"
5417+
"luckyWheelHeader": "عجلة الحظ",
5418+
"comingSoon": "المعاينة التفصيلية لهذا النوع من الألعاب قريبًا"
54155419
},
54165420
"form": {
54175421
"generalSettingsTitle": "الإعدادات العامة",
@@ -5420,6 +5424,7 @@
54205424
"prizeSettingsTitle": "إعدادات الجوائز"
54215425
},
54225426
"generalSettings": {
5427+
"showName": "مرئي",
54235428
"playedAt": "وقت اللعب",
54245429
"rulesDescription": "وصف القواعد",
54255430
"openerTags": "وسم جهات الاتصال التي تفتح رابط اللعبة",

apps/builder/messages/da.json

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,8 +1002,8 @@
10021002
"aiDeleteMessageHistory": "{aiName}: Slet Besked Historik"
10031003
},
10041004
"steps": {
1005-
"label": "Steps",
1006-
"placeholder": "Vælg trin"
1005+
"label": "Node",
1006+
"placeholder": "Vælg node"
10071007
},
10081008
"folder": {
10091009
"label": "Mappe"
@@ -5375,7 +5375,8 @@
53755375
"sumOfProbabilities": "Sum af alle sandsynligheder: {value}%",
53765376
"loseProbability": "Sandsynlighed for tab: {value}%",
53775377
"winProbability": "Sandsynlighed for gevinst: {value}%",
5378-
"newPrize": "Ny gevinst"
5378+
"newPrize": "Ny gevinst",
5379+
"prizeNameCustomFieldLabel": "Gem præmienavn i Brugerdefineret Felt"
53795380
},
53805381
"prizeItemDialog": {
53815382
"prizeTitle": "Rediger gevinst",
@@ -5384,17 +5385,20 @@
53845385
"nonWinningTitleLabel": "Titel",
53855386
"loseImageDescription": "Anbefalet størrelse 120x120px",
53865387
"quantityLabel": "Præmieantal",
5387-
"quantityDescription": "Antal gange denne præmie stadig kan vindes; falder med 1 for hver gevinst. Lad stå tomt for ubegrænset.",
5388-
"sendMessage": "Send en besked, når spilleren ikke vinder",
5389-
"sendWinMessage": "Send besked til vinderen, der modtog præmien",
5390-
"messageMode": "Beskedtype",
5391-
"messageModeText": "Tekst",
5392-
"messageModeFlow": "Flow",
5393-
"messageText": "Besked"
5388+
"quantityDescription": "Antal gange denne præmie stadig kan vindes; falder med 1 for hver gevinst. Lad stå tomt for ubegrænset."
5389+
},
5390+
"outcomeMessage": {
5391+
"enableWin": "Send besked til vinderen, der modtog præmien",
5392+
"enableLose": "Send en besked, når spilleren ikke vinder",
5393+
"mode": "Beskedtype",
5394+
"modeText": "Tekst",
5395+
"modeFlow": "Flow",
5396+
"text": "Besked"
53945397
},
53955398
"winningMessageDialog": {
53965399
"title": "Indstillinger for gevinstbesked",
53975400
"titleLabel": "Titel",
5401+
"prizeNameHint": "Du kan bruge '{{prize_name}}' i titlen og beskrivelsen for at indsætte præmienavnet.",
53985402
"acceptButtonText": "Tekst på accepter-knap",
53995403
"shareButtonText": "Tekst på del-knap",
54005404
"shareButtonDescription": "Beskrivelse af del-knap"
@@ -5410,8 +5414,8 @@
54105414
"shareWithFriends": "Del med venner",
54115415
"jackpotHeader": "JACKPOT",
54125416
"jackpotBanner": "Jackpot",
5413-
"comingSoon": "Detaljeret forhåndsvisning kommer snart for denne spiltype",
5414-
"rules": "Regler"
5417+
"luckyWheelHeader": "LYKKEHJUL",
5418+
"comingSoon": "Detaljeret forhåndsvisning kommer snart for denne spiltype"
54155419
},
54165420
"form": {
54175421
"generalSettingsTitle": "Generelle indstillinger",
@@ -5420,6 +5424,7 @@
54205424
"prizeSettingsTitle": "Gevinstindstillinger"
54215425
},
54225426
"generalSettings": {
5427+
"showName": "Synlig",
54235428
"playedAt": "Spillet den",
54245429
"rulesDescription": "Regelbeskrivelse",
54255430
"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
@@ -1002,8 +1002,8 @@
10021002
"aiDeleteMessageHistory": "{aiName}: Nachrichtenverlauf löschen"
10031003
},
10041004
"steps": {
1005-
"label": "Schritte",
1006-
"placeholder": "Schritt auswählen"
1005+
"label": "Node",
1006+
"placeholder": "Node auswählen"
10071007
},
10081008
"folder": {
10091009
"label": "Ordner"
@@ -5375,7 +5375,8 @@
53755375
"sumOfProbabilities": "Summe aller Wahrscheinlichkeiten: {value}%",
53765376
"loseProbability": "Verlustwahrscheinlichkeit: {value}%",
53775377
"winProbability": "Gewinnwahrscheinlichkeit: {value}%",
5378-
"newPrize": "Neuer Gewinn"
5378+
"newPrize": "Neuer Gewinn",
5379+
"prizeNameCustomFieldLabel": "Preisname in Benutzerdefiniertes Feld speichern"
53795380
},
53805381
"prizeItemDialog": {
53815382
"prizeTitle": "Gewinn bearbeiten",
@@ -5384,17 +5385,20 @@
53845385
"nonWinningTitleLabel": "Titel",
53855386
"loseImageDescription": "Empfohlene Größe 120x120px",
53865387
"quantityLabel": "Preismenge",
5387-
"quantityDescription": "Anzahl, wie oft dieser Preis noch gewonnen werden kann; verringert sich bei jedem Gewinn um 1. Leer lassen für unbegrenzt.",
5388-
"sendMessage": "Eine Nachricht senden, wenn der Spieler nicht gewinnt",
5389-
"sendWinMessage": "Nachricht an den Gewinner senden, der den Preis erhalten hat",
5390-
"messageMode": "Nachrichtentyp",
5391-
"messageModeText": "Text",
5392-
"messageModeFlow": "Flow",
5393-
"messageText": "Nachricht"
5388+
"quantityDescription": "Anzahl, wie oft dieser Preis noch gewonnen werden kann; verringert sich bei jedem Gewinn um 1. Leer lassen für unbegrenzt."
5389+
},
5390+
"outcomeMessage": {
5391+
"enableWin": "Nachricht an den Gewinner senden, der den Preis erhalten hat",
5392+
"enableLose": "Eine Nachricht senden, wenn der Spieler nicht gewinnt",
5393+
"mode": "Nachrichtentyp",
5394+
"modeText": "Text",
5395+
"modeFlow": "Flow",
5396+
"text": "Nachricht"
53945397
},
53955398
"winningMessageDialog": {
53965399
"title": "Einstellungen für Gewinnnachricht",
53975400
"titleLabel": "Titel",
5401+
"prizeNameHint": "Sie können '{{prize_name}}' im Titel und in der Beschreibung verwenden, um den Preisnamen einzufügen.",
53985402
"acceptButtonText": "Text der Bestätigungsschaltfläche",
53995403
"shareButtonText": "Text der Teilen-Schaltfläche",
54005404
"shareButtonDescription": "Beschreibung der Teilen-Schaltfläche"
@@ -5410,8 +5414,8 @@
54105414
"shareWithFriends": "Mit Freunden teilen",
54115415
"jackpotHeader": "JACKPOT",
54125416
"jackpotBanner": "Jackpot",
5413-
"comingSoon": "Detaillierte Vorschau für diesen Spieltyp folgt in Kürze",
5414-
"rules": "Regeln"
5417+
"luckyWheelHeader": "GLÜCKSRAD",
5418+
"comingSoon": "Detaillierte Vorschau für diesen Spieltyp folgt in Kürze"
54155419
},
54165420
"form": {
54175421
"generalSettingsTitle": "Allgemeine Einstellungen",
@@ -5420,6 +5424,7 @@
54205424
"prizeSettingsTitle": "Gewinneinstellungen"
54215425
},
54225426
"generalSettings": {
5427+
"showName": "Sichtbar",
54235428
"playedAt": "Gespielt am",
54245429
"rulesDescription": "Regelbeschreibung",
54255430
"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
@@ -1085,8 +1085,8 @@
10851085
"aiDeleteMessageHistory": "{aiName}: Delete Message History"
10861086
},
10871087
"steps": {
1088-
"label": "Steps",
1089-
"placeholder": "Select step"
1088+
"label": "Node",
1089+
"placeholder": "Select node"
10901090
},
10911091
"folder": {
10921092
"label": "Folder"
@@ -5375,7 +5375,8 @@
53755375
"sumOfProbabilities": "Sum of all probabilities: {value}%",
53765376
"loseProbability": "Lose probability: {value}%",
53775377
"winProbability": "Win probability: {value}%",
5378-
"newPrize": "New Prize"
5378+
"newPrize": "New Prize",
5379+
"prizeNameCustomFieldLabel": "Save prize name to Custom Field"
53795380
},
53805381
"prizeItemDialog": {
53815382
"prizeTitle": "Edit Prize",
@@ -5384,17 +5385,20 @@
53845385
"nonWinningTitleLabel": "Title",
53855386
"loseImageDescription": "Recommended size 120x120px",
53865387
"quantityLabel": "Prize Quantity",
5387-
"quantityDescription": "Number of times this prize can still be won; decreases by 1 each time it's won. Leave empty for unlimited.",
5388-
"sendMessage": "Send a message when the player doesn't win",
5389-
"sendWinMessage": "Send message to winner who received the prize",
5390-
"messageMode": "Message type",
5391-
"messageModeText": "Text",
5392-
"messageModeFlow": "Flow",
5393-
"messageText": "Message"
5388+
"quantityDescription": "Number of times this prize can still be won; decreases by 1 each time it's won. Leave empty for unlimited."
5389+
},
5390+
"outcomeMessage": {
5391+
"enableWin": "Send message to winner who received the prize",
5392+
"enableLose": "Send a message when the player doesn't win",
5393+
"mode": "Message type",
5394+
"modeText": "Text",
5395+
"modeFlow": "Flow",
5396+
"text": "Message"
53945397
},
53955398
"winningMessageDialog": {
53965399
"title": "Winning Message Settings",
53975400
"titleLabel": "Title",
5401+
"prizeNameHint": "You can use '{{prize_name}}' in the title and description to insert the prize name.",
53985402
"acceptButtonText": "Accept Button Text",
53995403
"shareButtonText": "Share Button Text",
54005404
"shareButtonDescription": "Share Button Description"
@@ -5410,8 +5414,8 @@
54105414
"shareWithFriends": "Share with friends",
54115415
"jackpotHeader": "JACKPOT",
54125416
"jackpotBanner": "Jackpot",
5413-
"comingSoon": "Detailed preview coming soon for this game type",
5414-
"rules": "Rules"
5417+
"luckyWheelHeader": "LUCKY WHEEL",
5418+
"comingSoon": "Detailed preview coming soon for this game type"
54155419
},
54165420
"form": {
54175421
"generalSettingsTitle": "General Setting",
@@ -5420,6 +5424,7 @@
54205424
"prizeSettingsTitle": "Prize Settings"
54215425
},
54225426
"generalSettings": {
5427+
"showName": "Visible",
54235428
"playedAt": "Played At",
54245429
"rulesDescription": "Rules Description",
54255430
"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
@@ -1076,8 +1076,8 @@
10761076
"aiDeleteMessageHistory": "{aiName}: Eliminar Mensaje Historial"
10771077
},
10781078
"steps": {
1079-
"label": "Pasos",
1080-
"placeholder": "Seleccionar paso"
1079+
"label": "Nodo",
1080+
"placeholder": "Seleccionar nodo"
10811081
},
10821082
"folder": {
10831083
"label": "Carpeta"
@@ -5375,7 +5375,8 @@
53755375
"sumOfProbabilities": "Suma de todas las probabilidades: {value}%",
53765376
"loseProbability": "Probabilidad de no ganar: {value}%",
53775377
"winProbability": "Probabilidad de ganar: {value}%",
5378-
"newPrize": "Nuevo premio"
5378+
"newPrize": "Nuevo premio",
5379+
"prizeNameCustomFieldLabel": "Guardar el nombre del premio en el Campo personalizado"
53795380
},
53805381
"prizeItemDialog": {
53815382
"prizeTitle": "Editar premio",
@@ -5384,17 +5385,20 @@
53845385
"nonWinningTitleLabel": "Título",
53855386
"loseImageDescription": "Tamaño recomendado 120x120px",
53865387
"quantityLabel": "Cantidad del premio",
5387-
"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.",
5388-
"sendMessage": "Enviar un mensaje cuando el jugador no gane",
5389-
"sendWinMessage": "Enviar mensaje al ganador que recibió el premio",
5390-
"messageMode": "Tipo de mensaje",
5391-
"messageModeText": "Texto",
5392-
"messageModeFlow": "Flujo",
5393-
"messageText": "Mensaje"
5388+
"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."
5389+
},
5390+
"outcomeMessage": {
5391+
"enableWin": "Enviar mensaje al ganador que recibió el premio",
5392+
"enableLose": "Enviar un mensaje cuando el jugador no gane",
5393+
"mode": "Tipo de mensaje",
5394+
"modeText": "Texto",
5395+
"modeFlow": "Flujo",
5396+
"text": "Mensaje"
53945397
},
53955398
"winningMessageDialog": {
53965399
"title": "Configuración del mensaje de premio",
53975400
"titleLabel": "Título",
5401+
"prizeNameHint": "Puedes usar '{{prize_name}}' en el título y la descripción para insertar el nombre del premio.",
53985402
"acceptButtonText": "Texto del botón de aceptar",
53995403
"shareButtonText": "Texto del botón de compartir",
54005404
"shareButtonDescription": "Descripción del botón de compartir"
@@ -5410,8 +5414,8 @@
54105414
"shareWithFriends": "Compartir con amigos",
54115415
"jackpotHeader": "JACKPOT",
54125416
"jackpotBanner": "Jackpot",
5413-
"comingSoon": "La vista previa detallada de este tipo de juego estará disponible próximamente",
5414-
"rules": "Reglas"
5417+
"luckyWheelHeader": "RULETA DE LA SUERTE",
5418+
"comingSoon": "La vista previa detallada de este tipo de juego estará disponible próximamente"
54155419
},
54165420
"form": {
54175421
"generalSettingsTitle": "Configuración general",
@@ -5420,6 +5424,7 @@
54205424
"prizeSettingsTitle": "Configuración de premios"
54215425
},
54225426
"generalSettings": {
5427+
"showName": "Visible",
54235428
"playedAt": "Jugado el",
54245429
"rulesDescription": "Descripción de las reglas",
54255430
"openerTags": "Etiquetar a los contactos que abren el enlace del juego",

0 commit comments

Comments
 (0)