diff --git a/spirit/database/json_data/versus_seasons.json b/spirit/database/json_data/versus_seasons.json
index d967b6f..306d8a6 100644
--- a/spirit/database/json_data/versus_seasons.json
+++ b/spirit/database/json_data/versus_seasons.json
@@ -245,7 +245,7 @@
{
"name": "Sword & Shield - Fusion Strike",
"rewardType": "Archetype",
- "rewardAmount": 10,
+ "rewardAmount": 1,
"rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
"rewardCurrency": "",
"rewardDescription": {
@@ -253,13 +253,121 @@
},
"rewardReason": "",
"index": 0
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 1
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 2
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 3
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 4
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 5
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 6
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 7
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 8
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 9
}
],
"60": [
{
"name": "Sword & Shield - Evolving Skies",
"rewardType": "Archetype",
- "rewardAmount": 10,
+ "rewardAmount": 1,
"rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
"rewardCurrency": "",
"rewardDescription": {
@@ -267,13 +375,121 @@
},
"rewardReason": "",
"index": 0
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 1
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 2
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 3
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 4
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 5
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 6
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 7
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 8
+ },
+ {
+ "name": "Sword & Shield - Evolving Skies",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b317777",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Evolving Skies"
+ },
+ "rewardReason": "",
+ "index": 9
}
],
"65": [
{
"name": "Sword & Shield - Chilling Reign",
"rewardType": "Archetype",
- "rewardAmount": 10,
+ "rewardAmount": 1,
"rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
"rewardCurrency": "",
"rewardDescription": {
@@ -281,6 +497,114 @@
},
"rewardReason": "",
"index": 0
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 1
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 2
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 3
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 4
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 5
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 6
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 7
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 8
+ },
+ {
+ "name": "Sword & Shield - Chilling Reign",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b316666",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Chilling Reign"
+ },
+ "rewardReason": "",
+ "index": 9
}
],
"70": [
@@ -319,7 +643,7 @@
{
"name": "Pokemon Go - Pokemon Go",
"rewardType": "Archetype",
- "rewardAmount": 15,
+ "rewardAmount": 1,
"rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
"rewardCurrency": "",
"rewardDescription": {
@@ -327,13 +651,181 @@
},
"rewardReason": "",
"index": 0
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 1
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 2
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 3
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 4
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 5
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 6
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 7
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 8
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 9
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 10
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 11
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 12
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 13
+ },
+ {
+ "name": "Pokemon Go - Pokemon Go",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b314545",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Pokemon Go - Pokemon Go"
+ },
+ "rewardReason": "",
+ "index": 14
}
],
"110": [
{
"name": "Sword & Shield - Rebel Clash",
"rewardType": "Archetype",
- "rewardAmount": 15,
+ "rewardAmount": 1,
"rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
"rewardCurrency": "",
"rewardDescription": {
@@ -341,13 +833,181 @@
},
"rewardReason": "",
"index": 0
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 1
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 2
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 3
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 4
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 5
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 6
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 7
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 8
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 9
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 10
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 11
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 12
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 13
+ },
+ {
+ "name": "Sword & Shield - Rebel Clash",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b312222",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Rebel Clash"
+ },
+ "rewardReason": "",
+ "index": 14
}
],
"115": [
{
"name": "Sword & Shield - Fusion Strike",
"rewardType": "Archetype",
- "rewardAmount": 15,
+ "rewardAmount": 1,
"rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
"rewardCurrency": "",
"rewardDescription": {
@@ -355,6 +1015,174 @@
},
"rewardReason": "",
"index": 0
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 1
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 2
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 3
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 4
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 5
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 6
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 7
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 8
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 9
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 10
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 11
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 12
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 13
+ },
+ {
+ "name": "Sword & Shield - Fusion Strike",
+ "rewardType": "Archetype",
+ "rewardAmount": 1,
+ "rewardProductID": "d017c195-83c5-c74e-0638-25128b3116c4",
+ "rewardCurrency": "",
+ "rewardDescription": {
+ "id": "Sword & Shield - Fusion Strike"
+ },
+ "rewardReason": "",
+ "index": 14
}
],
"120": [
diff --git a/spirit/server/admin/dashboard.html b/spirit/server/admin/dashboard.html
index 9663d4a..00f4f8d 100644
--- a/spirit/server/admin/dashboard.html
+++ b/spirit/server/admin/dashboard.html
@@ -69,7 +69,10 @@
.reward-chip img { height: 58px; width: 42px; object-fit: cover; border-radius: 4px; display: block; background: #0b0e14; }
.reward-chip .coin { width: 42px; height: 42px; border-radius: 50%; flex: none; display: flex; align-items: center; justify-content: center; font-size: 21px; background: radial-gradient(circle at 35% 30%, #ffe98a, #d4a017 70%); box-shadow: inset 0 0 0 3px rgba(0,0,0,.18); }
.reward-chip .rc-name { font-size: 12px; max-width: 150px; line-height: 1.3; }
- .reward-chip .rc-amt { color: var(--accent); font-weight: 700; font-size: 12px; }
+ .reward-chip .rc-amt { color: var(--accent); font-weight: 700; font-size: 12px; min-width: 26px; text-align: center; }
+ .rc-step { display: flex; align-items: center; gap: 3px; }
+ .rc-pm { width: 20px; height: 20px; border-radius: 5px; border: 1px solid var(--line); background: var(--panel); color: var(--accent); font-size: 14px; line-height: 1; cursor: pointer; padding: 0; }
+ .rc-pm:hover { border-color: var(--accent); }
.chip-x { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 14px; padding: 2px 4px; }
.chip-x:hover { color: var(--bad); }
.add-chip { border: 1px dashed var(--line); color: var(--muted); background: none; border-radius: 9px; padding: 18px 16px; cursor: pointer; font-size: 13px; }
@@ -704,7 +707,7 @@ function defaultSeason(n) {
function parseTiers(season) {
const tiers = (season.tiers || []).map(t => ({
ms: Object.entries(t.rewards || {})
- .map(([pts, rewards]) => ({points: parseInt(pts) || 0, rewards}))
+ .map(([pts, rewards]) => ({points: parseInt(pts) || 0, rewards: expandRewards(rewards)}))
.sort((a, b) => a.points - b.points)
}));
return tiers.length ? tiers : [{ms: []}];
@@ -739,19 +742,46 @@ function deleteSeason() {
SEASONS.splice(VS_SEL, 1); VS_SEL = 0; vsDirty(true); renderVersus();
}
-function rewardChipHTML(r, ti, mi, ri) {
- let art, label;
- const amt = r.rewardAmount || 0;
+/* The client shows a reward's quantity by COUNTING duplicate entries in the
+ milestone array (rewardAmount is ignored for Archetype rewards), so identical
+ products/cards are stored as N entries. Group them into one stepper chip. */
+function groupRewards(rewards) {
+ const groups = [], byKey = {};
+ (rewards || []).forEach((r, idx) => {
+ const key = r.rewardType === 'Archetype'
+ ? 'A:' + String(r.rewardProductID || '').toLowerCase()
+ : 'T:' + idx; // tokens never merge — they carry their own amount
+ if (byKey[key] === undefined) { byKey[key] = groups.length; groups.push({reward: r, indices: []}); }
+ groups[byKey[key]].indices.push(idx);
+ });
+ return groups;
+}
+function expandRewards(rewards) {
+ const out = [];
+ (rewards || []).forEach(r => {
+ if (r.rewardType === 'Archetype' && (r.rewardAmount || 1) > 1) {
+ const n = Math.max(1, r.rewardAmount | 0);
+ for (let k = 0; k < n; k++) out.push({...r, rewardAmount: 1});
+ } else { out.push(r); }
+ });
+ return out;
+}
+function rewardGroupChip(g, stepPrefix, removePrefix) {
+ const r = g.reward, n = g.indices.length;
if (r.rewardType === 'Archetype') {
const m = metaFor(r.rewardProductID) || {name: r.name || 'Unknown', image: null};
- art = m.image ? `` : '