Voici mon erreur, lors d'une connexion avec un joueur (n'importe lequel, même si on s'est déjà connecté dans la journée)
Dans la barre des messages d'info qui est en fait le contenu de la variable de session $_SESSION["alerte"]
J'obtiens ce message-ci :
Vous avez 14310 poules qui sont mortes ! Votre indice de contentement est à 0 !
(Dans une div de class="alerte")
Ensuite si je vérifie l'indice il n'est pas à 0 et il n'y a aucune de poules de morte.
Autre indice :
Quand on a réellement l'indice de contentement à 0 et qu'on a bien une poule qui meure. On a un second message qui apparaît indiquant la chose, ce qui est normale. (le premier message avec 14310 poules est tjrs là )
Je comprends pas, sachant que le message ne peut s'afficher qu'une fois et que si l'indice de content est == 0 et que la dernière connexion n'est pas d'aujourd'hui...
<?php require "./security/connect.inc.php"; require ('fonction.php'); $resultat = mysql_query("SELECT * FROM users WHERE userId ='".$_SESSION["verified_user"]."'"); $user = mysql_fetch_array ($resultat); //mise en session des infos du joueur, sous forme de tableau $_SESSION["info_user"] = $user; // Calcule de la difference de tps depuis la dernière connexion //$derniereConn = mktime(0, 0, 0, 2, 23, 9); $derniereConn = mktime(0, 0, 0,date('m',$_SESSION["info_user"]['dateConn']), date('d',$_SESSION["info_user"]['dateConn']), date('y',$_SESSION["info_user"]['dateConn'])); $aujourdhuiConn = mktime(0, 0, 0,date('m',time()), date('d',time()), date('y',time())); $joursDeDiff = ($aujourdhuiConn - $derniereConn)/3600/24; // On calcule et enregistre en session le nombre de jours d'exploitation : $_SESSION['joursDexploitation'] = ceil((time() - $_SESSION["info_user"]['dateCrea'])/3600/24); // On enregistre dans une variable de session le nombre de jours depuis la dernière connexion $_SESSION['joursDeDiff'] = $joursDeDiff; //Calcule indice contentement : if ($joursDeDiff > 1){ $indiceContent = $_SESSION["info_user"]['indiceContent']- 2* $_SESSION["info_user"]['nbVolailles']*($joursDeDiff-1); if($indiceContent > 0){ $_SESSION["info_user"]['indiceContent'] = $indiceContent; } else{ $_SESSION["info_user"]['indiceContent'] = 0; } mysql_query("UPDATE users SET indiceContent='".$_SESSION["info_user"]['indiceContent']."' WHERE userId ='".$_SESSION["verified_user"]."'"); } elseif ($_SESSION["info_user"]['nbPoulesNourries'] < $_SESSION["info_user"]['nbVolailles'] AND $derniereConn != $aujourdhuiConn){ $indiceContent = $_SESSION["info_user"]['indiceContent']- 2*($_SESSION["info_user"]['nbVolailles']-$_SESSION["info_user"]['nbPoulesNourries']); if($indiceContent > 0){ $_SESSION["info_user"]['indiceContent'] = $indiceContent; } else{ $_SESSION["info_user"]['indiceContent'] = 0; } mysql_query("UPDATE users SET indiceContent='".$_SESSION["info_user"]['indiceContent']."' WHERE userId ='".$_SESSION["verified_user"]."'"); } // les actions suivantes sont celles qui ne sont à effectuer une seul fois par jour if ($derniereConn != $aujourdhuiConn){ //Calcul du nombre de mort // Les poules ne meurent que si l'indice de contentement est égal à 0 if ($_SESSION['info_user']['indiceContent'] != 0){ // Dans ce cas elle meurent du en fonction de l'indice de mortalité sauf si l'indice est égal à 0 if ($_SESSION["info_user"]['indiceMortalite'] > 0){ $nbMort = floor($_SESSION["info_user"]['nbPoules']*$_SESSION["info_user"]['indiceMortalite']/100); switch ($nbMort){ case 0 : $_SESSION["alerte"] .= '<div class="alerte">Votre indice de contentement est à 0, attention vous risquer de perdre des poules !</div>'; break; case 1 : $_SESSION["alerte"] .= '<div class="alerte">Vous avez 1 poules de morte ! Votre indice de contentement est à 0 !</div>'; break; default : $_SESSION["alerte"] .= '<div class="alerte">Vous avez '.$nbMort.' poules qui sont mortes ! Votre indice de contentement est à 0 !</div>'; break; } $_SESSION["info_user"]['nbPoules'] -= $nbMort; } elseif ($_SESSION["info_user"]['indiceMortalite'] == 0){ $nbMort = 1*$joursDeDiff; switch ($nbMort){ case 0 : $_SESSION["alerte"] .= '<div class="alerte">Votre indice de contentement est à 0, attention vous risquer de perdre des poules !</div>'; break; case 1 : $_SESSION["alerte"] .= '<div class="alerte">Vous avez 1 poules de morte ! Votre indice de contentement est à 0 !</div>'; break; default : $_SESSION["alerte"] .= '<div class="alerte">Vous avez '.$nbMort.' poules qui sont mortes ! Votre indice de contentement est à 0 !</div>'; } $_SESSION["info_user"]['nbPoules'] -= $nbMort; } }// fin calcule nb mort // Calcule du nombre de nouvelle poules : (basé sur le nombre d'oeufs fécondé de la dernière connexion) // dabord voir si il y a de la place dans le poulailler pour que tous les oeufs éclosent $placeRestante = $_SESSION["info_user"]["nivPoulailler"]*7 - $_SESSION["info_user"]["nbVolailles"]; // Si il y a pas assez de place, le nombre d'oeufs à éclore est le nombre de place disponible, et on redéfinit le nombre d'oeufs féconds restant if ($placeRestante < $_SESSION["info_user"]["nbOeufsFecond"]){ $nbOeufsEclore = $placeRestante; $_SESSION["info_user"]["nbOeufsFecond"] -= $nbOeufsEclore; } // Si il y a assez de place, les oeufs à éclore sont les oeufs féconds dont il en este plus else { $nbOeufsEclore = $_SESSION["info_user"]["nbOeufsFecond"]; $_SESSION["info_user"]["nbOeufsFecond"] = 0; } // 60% des oeufs : poules, 40% des coqs $nvPoules = ceil($nbOeufsEclore*60/100); $nvCoqs = floor($nbOeufsEclore*40/100); $_SESSION["info_user"]['nbPoules'] += $nvPoules; $_SESSION["info_user"]['nbCoqs'] += $nvCoqs; // Calcule nombre volaille total $_SESSION["info_user"]['nbVolailles']= $_SESSION["info_user"]['nbCoqs'] + $_SESSION["info_user"]['nbPoules']; // Affichage des infos sur les nouvelles poules et coqs if ($nvPoules > 0){ $_SESSION["alerte"] .='<div class="nouvelle">Vous avez '.$nvPoules.' poule(s) de née(s). </div>'; } if ($nvCoqs > 0){ $_SESSION["alerte"] .='<div class="nouvelle">Vous avez '.$nvCoqs.' coqs(s) de né(s). </div>'; } // Enregistrement du total mysql_query("UPDATE users SET nbPoules='".$_SESSION["info_user"]['nbPoules']."' WHERE userId ='".$_SESSION["verified_user"]."'"); mysql_query("UPDATE users SET nbVolailles='".$_SESSION["info_user"]['nbVolailles']."' WHERE userId ='".$_SESSION["verified_user"]."'"); mysql_query("UPDATE users SET nbCoqs='".$_SESSION["info_user"]['nbCoqs']."' WHERE userId ='".$_SESSION["verified_user"]."'"); mysql_query("UPDATE users SET nbOeufsFecond='".$_SESSION["info_user"]["nbOeufsFecond"]."' WHERE userId ='".$_SESSION["verified_user"]."'"); // Calcule du nombre d'oeuf pondut par jours : for ($joursPasse; $joursPasse <= $joursDeDiff; $joursPasse++){ $nvOeufsFecond = 0; $nvOeufs = 0; $rand = rand(1,100); if ($rand < $_SESSION["info_user"]['indiceContent']){ $nvOeufs = $_SESSION["info_user"]['nbPoules']; } else{ $nvOeufs = ceil($_SESSION["info_user"]['nbPoules']*$_SESSION["info_user"]['indiceContent']/100); } // Calcule du nombre d'oeufs fécondés : $nvOeufsFecond = ceil($nvOeufs*$_SESSION["info_user"]['indiceFecondite']/100); // calcule du nouveau nombre pour la journée $_SESSION["info_user"]['nbOeufsFecond'] += $nvOeufsFecond; // On l'additionne au reste des oeufs féconds $nvOeufs -= $nvOeufsFecond; //On soustrait le nombre de nouveau oeufs fécondés au nombre de nouveau oeufs $_SESSION["info_user"]['nbOeufs'] += $nvOeufs; //On additionne le nombre de nouveau oeufs au nom d'oeufs total } // Enregistrement des oeufs : mysql_query("UPDATE users SET nbOeufs='".$_SESSION["info_user"]['nbOeufs']."' WHERE userId ='".$_SESSION["verified_user"]."'"); mysql_query("UPDATE users SET nbOeufsFecond='".$_SESSION["info_user"]['nbOeufsFecond']."' WHERE userId ='".$_SESSION["verified_user"]."'"); // Mise à jour du nombre de volailles nourries mysql_query("UPDATE users SET nbPoulesNourries='0' WHERE userId='".$_SESSION["verified_user"]."'"); }// Fin des actions à une exécution par jours // Mise à jours de la date de dernière connexion : $_SESSION["info_user"]['dateConn'] = time(); mysql_query("UPDATE users SET dateConn ='".$_SESSION["info_user"]['dateConn']."' WHERE userID ='".$_SESSION['verified_user']."'"); // Calcule indice d'accident : $_SESSION["info_user"]['indiceAccident'] = $_SESSION["info_user"]['nbVolailles']*1 + 5*$_SESSION["info_user"]['nivPoulailler']; if ($_SESSION["info_user"]['indiceAccident'] > 100){ $_SESSION["info_user"]['indiceAccident'] = 100;} mysql_query("UPDATE users SET indiceAccident='".$_SESSION["info_user"]['indiceAccident']."' WHERE userId ='".$_SESSION["verified_user"]."'"); // Calcule indice de fécondité : if ($_SESSION["info_user"]['nbPoules'] == 0 ){ $_SESSION["info_user"]['nbPoules'] = 0;} $_SESSION["info_user"]['indiceFecondite'] = ceil(($_SESSION["info_user"]['nbCoqs']/$_SESSION["info_user"]['nbPoules'])*100); mysql_query("UPDATE users SET indiceFecondite='".$_SESSION["info_user"]['indiceFecondite']."' WHERE userId ='".$_SESSION["verified_user"]."'"); // Calcule de l'indice de mortalité : $_SESSION["info_user"]["indiceMortalite"] = 15 - 2 * ($_SESSION["info_user"]["nivNourriture"]-1); mysql_query("UPDATE users SET indiceMortalite='".$_SESSION["info_user"]['indiceMortalite']."' WHERE userId ='".$_SESSION["verified_user"]."'"); //Si on a un GET, on rempli l'attribut content, en rapport avec ce GET (On inclut le fichier qui donne la valeur correct àl'attribut content) if(isSet($_GET['page'])) { switch($_GET['page']) { case 'general' : include('game/general.php'); break; case 'option' : include ('game/option.php'); break; case 'deconnection' : include('content/deconnection.php'); break; case 'stats' : include('game/stats.php'); break; case 'poulailler' : include('game/poulailler.php'); break; case 'bureau' : include('game/bureau.php'); break; case 'silo' : include('game/silo.php'); break; case 'commerce' : include('game/commerce.php'); break; //Par défaut, on affiche la page d'accueil default : include('game/general.php'); } } elseif(isSet($_GET['moteurjeu'])) { switch($_GET['moteurjeu']) { case 'nourrir' : include ('game/moteur/nourrir.php'); break; case 'achats' : include ('game/moteur/achats.php'); break; case 'ventes' : include ('game/moteur/ventes.php'); break; case 'nourritures' : include ('game/moteur/nourritures.php'); break; default : include ('game/general.php'); break; } } elseif(isSet($_GET['masquerinfo'])){ $_SESSION["alerte"] =""; include('game/general.php'); } //Sinon on fait afficher la page d'accueil else { include('game/general.php'); } ?>
Ca dérange pas le jeu en lui même, mais c'est vraiment chiant...
Merci de votre aide !!!
Hors ligne
Posté le 07-03-2009 15:28:03
Première chose que j'ai remarqué:
C'est cette ligne:
if ($_SESSION["info_user"]['indiceMortalite'] > 0){ $nbMort = floor($_SESSION["info_user"]['nbPoules']*$_SESSION["info_user"]['indiceMortalite']/100); switch ($nbMort){ case 0 : $_SESSION["alerte"] .= '<div class="alerte">Votre indice de contentement est à 0, attention vous risquer de perdre des poules !</div>'; break;
Le case 0 devrait plutot afficher le message vous n'avez aucune poule, ca permettrait déjà d'empêcher les confusions. Je me pencherais un peu plus dessus plus tard .
Hors ligne
Posté le 08-03-2009 18:07:38
Non, parce que le floor arrondi à l'inférieur, ce qui fait que je peux avoir aucune poule qui meure (ce qui est le cas si on a entre 0 et 6 poules)
Et finalement, je ne cherche pas le bug. Je crois qu'il n'y en a pas. Depuis hier soir je ne l'ai plus....
Hors ligne
Posté le 08-03-2009 18:12:37
oki d'acc , mais le message laissé à croire que le consentement était égal à 0, alors que ce n'était pas le cas vu cette ligne:
if ($_SESSION['info_user']['indiceContent'] != 0)
Et finalement, je ne cherche pas le bug. Je crois qu'il n'y en a pas. Depuis hier soir je ne l'ai plus....
Les caprices de la programmation xD
Hors ligne
Posté le 08-03-2009 19:37:25
Et merde tiens >=<, je comprends pas comment ça a pu arriver ça. J'ai relu je ne sais pas combien de fois ce bout de code, et j'avais pas vu que mon explication ne concordait pas avec le code.
Effectivement que si c'est == à la place de !=
Les poules ne meurent que si l'indice de contentement est = à 0....
En plus mon frère vient de me dire que les poules meurent d'une autre façon aussi. Alors que je suis maintenant dans une tout autre partie du jeu. Il est pas chiant lui, on a passé 3jours à faire la liste des variables et en faire un dictionnaire et à établir comment les poules meurent, naissent, comment les indices varient etc... Il là il me sort ça ! grrrrrrrrrrrrrrrrrr J'ai plus qu'a revoir de A à Z la logique de l'algorithme et retravailler mon code...
Merci encore pour la remarque du != ^^
Hors ligne
Posté le 08-03-2009 20:25:43
Arf, maintenant que j'ai rétablit le == à la place du !=, j'ai a nouveau le bug (en fait j'avais du metre != pour ne plus avoir le bug)
Hors ligne
Posté le 09-03-2009 21:03:02
A oki lol, c vachement tordu ce truc ^^. Mais courage, éclate tous ces bugs sans broncher
Hors ligne
Posté le 15-03-2009 15:08:02
Ouais, je suis passé en poo, nettement plus simple a gérer tout ça. même si c'est pas facile de convertir le jeu d'avant a du objet ^^
Hors ligne
Posté le 15-03-2009 16:21:15
Arf, conversion terminée. Le code est plus clair, plus simple, mais les bugs restent, un peu différents mais sûrement le même.
Le problème est trouvable ici :
http://www.phportail.net/forum/viewtopi … 565#p18565
Hors ligne
Posté le 06-04-2009 23:42:52
Je ne vois pas vraiment de bug personnellement mais il faudrait regarder en profondeur regarde bien, car l'erreur est peut-être très banale, c'est pour sa que on ne la trouve pas .
Hors ligne
Posté le 13-04-2009 08:30:39