feat(sprint1-step3b): backend save system + anti-cheat + données rattrapées
- game_saves table + migration 002 (JSON state, anti-cheat metadata) - saveControllers.js : load/save avec validation delta ressources (750k/s × 1.1) - GameSaveManager : upsert MySQL ON DUPLICATE KEY UPDATE - useSaveSync hook : auto-save 30s + keepalive beforeunload + guest fallback - save-validation.test.ts : 8 tests anti-cheat - economy.ts : arbre d'évolution 5 nœuds + prestige ADN (rattrapage step 2) - economy.test.ts : +40 tests (évolution tree, multipliers, start bonus) - GDD + SPRINT1.md : docs sprint complètes - Rethème data : shop.json, Achievements.json, Cookie, Legal (rattrapage step 1)
This commit is contained in:
@@ -111,7 +111,7 @@
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "un pull de noël",
|
||||
"name": "Peau de grenouille rare",
|
||||
"founded": false,
|
||||
"image": "https://i.goopics.net/uwjwn1.jpg"
|
||||
},
|
||||
@@ -189,7 +189,7 @@
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"name": "Calendrier de l'Avent avec des chocolats au wasabi et moutarde forte",
|
||||
"name": "Kit de survie du marais au wasabi et moutarde forte",
|
||||
"founded": false,
|
||||
"image": "https://i.goopics.net/dakyj9.png"
|
||||
},
|
||||
@@ -228,7 +228,7 @@
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"name": "Chapeau de Noël clignotant",
|
||||
"name": "Couronne de nénuphars lumineuse",
|
||||
"founded": false,
|
||||
"image": "https://i.goopics.net/d4su7e.png"
|
||||
},
|
||||
|
||||
@@ -1,89 +1,89 @@
|
||||
[
|
||||
{
|
||||
"name": "Manic",
|
||||
"name": "Griffes de Grenouille",
|
||||
"price": 15,
|
||||
"incrementValue": 1,
|
||||
"description": "Evite de vous bruler quand vous sortez les cookies du four, vous gagnez 5 CPS",
|
||||
"description": "Des griffes acérées pour une ponte plus efficace. +1 par clic.",
|
||||
"link": "/",
|
||||
"image": "./svg/Hand.svg",
|
||||
"buyed": false,
|
||||
"type": "actif"
|
||||
},
|
||||
{
|
||||
"name": "Tasse à café",
|
||||
"name": "Algues Nutritives",
|
||||
"price": 15,
|
||||
"incrementValue": 1,
|
||||
"description": "Bien chaud vous permet de tenir sur la durée",
|
||||
"description": "Les algues nourrissent le marais en continu. +1 têtard/s.",
|
||||
"link": "/",
|
||||
"image": "./svg/Tasse.svg",
|
||||
"buyed": false,
|
||||
"type": "passif"
|
||||
},
|
||||
{
|
||||
"name": "Mr Bonhomme",
|
||||
"name": "Crapaud Gardien",
|
||||
"price": 150,
|
||||
"incrementValue": 10,
|
||||
"description": "Un assistant idéal pour le click",
|
||||
"description": "Un ancien du marais qui veille sur les pontes. +10 par clic.",
|
||||
"link": "/",
|
||||
"image": "./svg/Bonhome.svg",
|
||||
"buyed": false,
|
||||
"type": "actif"
|
||||
},
|
||||
{
|
||||
"name": "Bonnet",
|
||||
"name": "Nénuphar Géant",
|
||||
"price": 150,
|
||||
"incrementValue": 10,
|
||||
"description": "Garder vos oreilles bien à l'abri du froid et click !",
|
||||
"description": "Un nénuphar massif qui attire les têtards. +10 têtards/s.",
|
||||
"link": "/",
|
||||
"image": "./svg/Bonnet.svg",
|
||||
"buyed": false,
|
||||
"type": "passif"
|
||||
},
|
||||
{
|
||||
"name": "Cookie",
|
||||
"name": "Oeuf Doré",
|
||||
"price": 1500,
|
||||
"incrementValue": 100,
|
||||
"description": "Fait avec amour",
|
||||
"description": "Un oeuf rare qui éclot en masse. +100 par clic.",
|
||||
"link": "/",
|
||||
"image": "./svg/Cookie.svg",
|
||||
"buyed": false,
|
||||
"type": "actif"
|
||||
},
|
||||
{
|
||||
"name": "Canne en sucre",
|
||||
"name": "Mousse Lumineuse",
|
||||
"price": 1500,
|
||||
"incrementValue": 100,
|
||||
"description": "Le sucre c'est connu, ca reboost",
|
||||
"description": "La mousse phosphorescente accélère la croissance. +100 têtards/s.",
|
||||
"link": "/",
|
||||
"image": "./svg/Canne.svg",
|
||||
"buyed": false,
|
||||
"type": "passif"
|
||||
},
|
||||
{
|
||||
"name": "Couronne d'hiver",
|
||||
"name": "Couronne de Roseaux",
|
||||
"price": 15000,
|
||||
"incrementValue": 1000,
|
||||
"description": "Un bisous ou rien du tout !",
|
||||
"description": "Le symbole du Gardien suprême du Marais. +1000 par clic.",
|
||||
"link": "/",
|
||||
"image": "./svg/Courone.svg",
|
||||
"buyed": false,
|
||||
"type": "actif"
|
||||
},
|
||||
{
|
||||
"name": "Mr pain d'épice",
|
||||
"name": "Esprit du Marais",
|
||||
"price": 15000,
|
||||
"incrementValue": 1000,
|
||||
"description": "Le meilleur c'est la tête",
|
||||
"description": "L'esprit ancestral bénit les eaux. +1000 têtards/s.",
|
||||
"link": "/",
|
||||
"image": "./svg/PainDep.svg",
|
||||
"buyed": false,
|
||||
"type": "passif"
|
||||
},
|
||||
{
|
||||
"name": "Bière",
|
||||
"name": "Nectar de Lotus",
|
||||
"price": 8000,
|
||||
"incrementValue": 1000,
|
||||
"description": "Boisson de qualité, double tout les CPS, attention à ne pas trop en abuser",
|
||||
"description": "Un nectar enivrant qui trouble les eaux... mais booste la ponte. Attention aux effets secondaires.",
|
||||
"link": "/",
|
||||
"image": "./svg/Beer.svg",
|
||||
"buyed": false,
|
||||
|
||||
Reference in New Issue
Block a user