Skip to content

Commit dc0a661

Browse files
committed
[Fix] Fix exploit with ennemie and seed
1 parent 0c68f38 commit dc0a661

2 files changed

Lines changed: 12 additions & 13 deletions

File tree

src/combat.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ void lancerCombat(Vaisseau *joueur, Vaisseau *ennemi) {
6363
}
6464

6565
SLEEP_MS(1000);
66-
srand((unsigned int)time(NULL));
6766

6867
// 2. BOUCLE DE COMBAT
6968
while (joueur->coque > 0 && ennemi->coque > 0) {
@@ -451,7 +450,7 @@ void rechargerBoucliers(Vaisseau *v) {
451450

452451
Vaisseau genererEnnemi(int secteur, unsigned int seed) {
453452
Vaisseau ennemi;
454-
unsigned int seedUnique = seed + (secteur * rand()%1000);
453+
unsigned int seedUnique = seed ^ (secteur * 2654435761u);
455454
srand(seedUnique);
456455

457456
// --- GÉNÉRATEUR DE NOMS PROCÉDURAL ---

src/event.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ void explorerSecteurActuel(Vaisseau *joueur) {
228228
if (rand() % 2 == 0) {
229229
printf(COLOR_RED "[DANGER] Signature hostile détectée ! Des pirates ont triangulé votre position !\n" COLOR_RESET);
230230
SLEEP_MS(1500);
231-
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, rand());
231+
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->explorationActuelle * 40503u));
232232
lancerCombat(joueur, &pirate);
233233
} else {
234234
printf(COLOR_GREEN "[SUCCÈS] Un cargo commercial a capté votre appel !\n" COLOR_RESET);
@@ -261,7 +261,7 @@ void explorerSecteurActuel(Vaisseau *joueur) {
261261
if (jet < 35) {
262262
printf(COLOR_RED "[ALERTE] Patrouille hostile repérée !\n" COLOR_RESET);
263263
SLEEP_MS(800);
264-
Vaisseau ennemi = genererEnnemi(joueur->distanceParcourue, rand());
264+
Vaisseau ennemi = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->explorationActuelle * 40503u));
265265
lancerCombat(joueur, &ennemi);
266266
}
267267
else if (jet < 60) {
@@ -318,7 +318,7 @@ void executerEvenement(Vaisseau *joueur, const char* type) {
318318
}
319319

320320
if (strcmp(evenementFinal, "Signal Hostile (Combat)") == 0) {
321-
Vaisseau ennemi = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur + rand()%1000);
321+
Vaisseau ennemi = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->distanceParcourue * 2654435761u));
322322
lancerCombat(joueur, &ennemi);
323323
} else if (strcmp(evenementFinal, "Station Commerciale (Magasin)") == 0) {
324324
ouvrirMagasin(joueur);
@@ -399,7 +399,7 @@ void evenementDetresse(Vaisseau *joueur) {
399399
printf(COLOR_RED "C'EST UN PIÈGE ! Le transporteur était un leurre holographique !\n" COLOR_RESET);
400400
printf("Un chasseur pirate sort de l'ombre d'un astéroïde !\n");
401401
SLEEP_MS(1500);
402-
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, rand());
402+
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->explorationActuelle * 40503u));
403403
lancerCombat(joueur, &pirate);
404404
}
405405
}
@@ -478,7 +478,7 @@ void evenementEpaveDerivante(Vaisseau *joueur) {
478478
printf("Le croiseur s'illumine. Les armes se verrouillent sur vous !\n");
479479
SLEEP_MS(1500);
480480

481-
Vaisseau drone = genererEnnemi(joueur->distanceParcourue + 2, rand());
481+
Vaisseau drone = genererEnnemi(joueur->distanceParcourue + 2, joueur->seedSecteur ^ (joueur->distanceParcourue * 2654435761u));
482482
strcpy(drone.nom, "Proto-Croiseur IA (Endommagé)");
483483
drone.coque = 15;
484484
drone.coqueMax = 15;
@@ -673,7 +673,7 @@ void evenementMarchandAmbulant(Vaisseau *joueur) {
673673
printf("\"Espèce de fou ! Vous allez le regretter !\"\n");
674674
SLEEP_MS(1000);
675675

676-
Vaisseau marchand = genererEnnemi(joueur->distanceParcourue, rand());
676+
Vaisseau marchand = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->explorationActuelle * 40503u));
677677
strcpy(marchand.nom, "Transporteur Armé");
678678
marchand.coqueMax += 5;
679679
marchand.coque = marchand.coqueMax;
@@ -714,7 +714,7 @@ static void braquageCasino(Vaisseau *joueur) {
714714
SLEEP_MS(1000);
715715

716716
printf(COLOR_YELLOW "\n--- VAGUE 1/3 : DRONE DE SÉCURITÉ ---\n" COLOR_RESET);
717-
Vaisseau drone = genererEnnemi(joueur->distanceParcourue, rand());
717+
Vaisseau drone = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->explorationActuelle * 40503u));
718718
strcpy(drone.nom, "Drone Sécurité Mk1");
719719
drone.coqueMax = 10;
720720
drone.coque = 10;
@@ -731,7 +731,7 @@ static void braquageCasino(Vaisseau *joueur) {
731731
printf(COLOR_YELLOW "\n--- VAGUE 2/3 : GARDE D'ÉLITE ---\n" COLOR_RESET);
732732
SLEEP_MS(1000);
733733
printf("Les portes blindées s'ouvrent, un vaisseau lourd sort du hangar !\n");
734-
Vaisseau garde = genererEnnemi(joueur->distanceParcourue + 2, rand());
734+
Vaisseau garde = genererEnnemi(joueur->distanceParcourue + 2, joueur->seedSecteur ^ (joueur->distanceParcourue * 2654435761u));
735735
strcpy(garde.nom, "Croiseur Blindé Casino");
736736
garde.coqueMax += 10;
737737
garde.coque = garde.coqueMax;
@@ -749,7 +749,7 @@ static void braquageCasino(Vaisseau *joueur) {
749749
printf(COLOR_RED "\n--- VAGUE 3/3 : LE VAISSEAU DU GÉRANT ---\n" COLOR_RESET);
750750
SLEEP_MS(1000);
751751
printf("\"Vous m'avez coûté une fortune ! Vous allez le payer de votre sang !\"\n");
752-
Vaisseau boss = genererEnnemi(joueur->distanceParcourue + 5, rand());
752+
Vaisseau boss = genererEnnemi(joueur->distanceParcourue + 5, joueur->seedSecteur ^ (joueur->distanceParcourue * 2654435761u));
753753
strcpy(boss.nom, "Yacht de Luxe Armé");
754754
boss.coqueMax = 40;
755755
boss.coque = 40;
@@ -861,7 +861,7 @@ void evenementPeagePirate(Vaisseau *joueur) {
861861
} else {
862862
printf(COLOR_RED "\"Tu te moques de moi ?! T'as même pas de quoi payer ! A L'ATTAQUE !\"\n" COLOR_RESET);
863863
SLEEP_MS(1000);
864-
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, rand());
864+
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->explorationActuelle * 40503u));
865865
lancerCombat(joueur, &pirate);
866866
}
867867
}
@@ -877,7 +877,7 @@ void evenementPeagePirate(Vaisseau *joueur) {
877877
else {
878878
printf(COLOR_RED "\n\"A L'ABORDAGE !\"\n" COLOR_RESET);
879879
SLEEP_MS(800);
880-
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, rand());
880+
Vaisseau pirate = genererEnnemi(joueur->distanceParcourue, joueur->seedSecteur ^ (joueur->explorationActuelle * 40503u));
881881
pirate.coque += 5;
882882
lancerCombat(joueur, &pirate);
883883
}

0 commit comments

Comments
 (0)