= 1) { //Création des groupes $nbvais = $flotteAT['vaisseau_'.$i]; $nbgroupes = floor(sqrt(ceil($nbvais/10))); $nbvaispgroupe = floor($nbvais/$nbgroupes); $nbrest = $nbvais - $nbvaispgroupe * $nbgroupes; if (isset($groupe)) unset($groupe); $groupe = array(); for ($j=0 ; $j < $nbgroupes ; $j++) { if ($j == $nbgroupes) $nbvaispgroupe += $nbrest; $groupe[] = array($nbvaispgroupe, $nomvais_bc[$i-1], $nomvais_pv[$i-1]); } $this->ATvais[] = array($i, $flotteAT['vaisseau_'.$i], $nbgroupes, $groupe); } } //Définition d'autres variables de la classe concernant la flotte $this->refflotte = $flotteAT['id']; $this->vaisContenu = $flotteAT['contenu_max']; $this->vaisContenuM = $flotteAT['contenu_metal']; $this->vaisContenuC = $flotteAT['contenu_cristal']; $this->vaisContenuH = $flotteAT['contenu_hydrogene']; $this->timestamp = $flotteAT['start_time'] + $flotteAT['end_time']; //Génération des vaisseaux défenseurs for ($i=1 ; $i<=12 ; $i++) { if ($flotteEN['vaisseau_'.$i] >= 1) { //Création des groupes $nbvais = $flotteEN['vaisseau_'.$i]; $nbgroupes = floor(sqrt(ceil($nbvais/10))); $nbvaispgroupe = floor($nbvais/$nbgroupes); $nbrest = $nbvais - $nbvaispgroupe * $nbgroupes; if (isset($groupe)) unset($groupe); $groupe = array(); for ($j=0 ; $j < $nbgroupes ; $j++) { if ($j == $nbgroupes) $nbvaispgroupe += $nbrest; $groupe[] = array($nbvaispgroupe, $nomvais_bc[$i-1], $nomvais_pv[$i-1]); } $this->ENvais[] = array($i, $flotteEN['vaisseau_'.$i], $nbgroupes, $groupe); } } //Génération des défenses défenseurs for ($i=1 ; $i<=5 ; $i++) { if ($defEN['def_'.$i] >= 1) { //Création des groupes $nbvais = $defEN['def_'.$i]; $nbgroupes = floor(sqrt(ceil($nbvais/10))); $nbvaispgroupe = floor($nbvais/$nbgroupes); $nbrest = $nbvais - $nbvaispgroupe * $nbgroupes; if (isset($groupe)) unset($groupe); $groupe = array(); for ($j=0 ; $j < $nbgroupes ; $j++) { if ($j == $nbgroupes) $nbvaispgroupe += $nbrest; $groupe[] = array($nbvaispgroupe, $defense_bc[$i-1], $defense_pv[$i-1]); } $this->ENdef[] = array($i, $defEN['def_'.$i], $nbgroupes, $groupe); } } } /** * Change la tactique de l'attaquant * @param int $tactique numéro de la tactique choisie * * @return void * @access public */ function changerTactiqueAT($tactique) { $this->ATtactique = ceil($tactique); } /** * Change la tactique du défenseur * @param int $tactique numéro de la tactique choisie * * @return void * @access public */ function changerTactiqueEN($tactique) { $this->ENtactique = ceil($tactique); } /** * Régénére les boucliers * @param int $pourcentage pourcentage de régénération * @param bool $attaquant régénére le bouclier de l'attaquant si true, sinon régénrére celui du défenseur * @param bool $retour si true, renvoie true ou false si !le pourcentage a été consommé ou non, si false, retrourne ne nombre de pourcentage restant * * @return float pourcentage non utilisé * @access public */ function regenereBC($pourcentage, $attaquant, $retour = false) { include('includes/vars.php'); if ($attaquant) { $count = count($this->ATvais); $enplus = 0; $norm = 0; for ($i=0 ; $i<$count ; $i++) { $type = $this->ATvais[$i][0]-1; $maxbc = $nomvais_bc[$type]; $ajout = $maxbc*$pourcentage/100; $cntbc = count($this->ATvais[$i][3]); for ($j=0 ; $j<$cntbc ; $j++) { $norm += $maxbc * $this->ATvais[$i][3][$j][0]; if ($this->ATvais[$i][3][$j][1] < $maxbc) { $this->ATvais[$i][3][$j][1] += $ajout; } else $enplus += $ajout * $this->ATvais[$i][3][$j][0]; if ($this->ATvais[$i][3][$j][1] > $maxbc) { $enplus += ($this->ATvais[$i][3][$j][1] - $maxbc)*$this->ATvais[$i][3][$j][0]; $this->ATvais[$i][3][$j][1] = $maxbc; } } } if ($retour) { if($enplus/$norm == 1) return $pourcentage; else return false; } else return $enplus/$norm; } else { $count = count($this->ENvais); $enplus = 0; $norm = 0; for ($i=0 ; $i<$count ; $i++) { $type = $this->ENvais[$i][0]-1; $maxbc = $nomvais_bc[$type]; $ajout = $maxbc*$pourcentage/100; $cntbc = count($this->ENvais[$i][3]); for ($j=0 ; $j<$cntbc ; $j++) { $norm += $maxbc * $this->ENvais[$i][3][$j][0]; if ($this->ENvais[$i][3][$j][1] < $maxbc) { $this->ENvais[$i][3][$j][1] += $ajout; } else $enplus += $ajout * $this->ENvais[$i][3][$j][0]; if ($this->ENvais[$i][3][$j][1] > $maxbc) { $enplus += ($this->ENvais[$i][3][$j][1] - $maxbc)*$this->ENvais[$i][3][$j][0]; $this->ENvais[$i][3][$j][1] = $maxbc; } } } $return = $enplus/$norm; //Défenses $count = count($this->ENdef); $enplus = 0; $norm = 0; for ($i=0 ; $i<$count ; $i++) { $type = $this->ENdef[$i][0]-1; $maxbc = $defense_bc[$type]; $ajout = $maxbc*$pourcentage/100; $cntbc = count($this->ENdef[$i][3]); for ($j=0 ; $j<$cntbc ; $j++) { $norm += $maxbc * $this->ENdef[$i][3][$j][0]; if ($this->ENdef[$i][3][$j][1] < $maxbc) { $this->ENdef[$i][3][$j][1] += $ajout; } else $enplus += $ajout * $this->ENdef[$i][3][$j][0]; if ($this->ENdef[$i][3][$j][1] > $maxbc) { $enplus += ($this->ENdef[$i][3][$j][1] - $maxbc)*$this->ENdef[$i][3][$j][0]; $this->ENdef[$i][3][$j][1] = $maxbc; } } } $return += $enplus/$norm; if ($retour) { if($enplus/$norm == 1) return $pourcentage; else return false; } else return $return/2; } } /** * Calcul la puissance d'attaque disponible * @param int $pourcentage pourcentage de régénération * @param bool $attaquant calcul les points de l'attaquant si true, sinon calcul pour le défenseur * * @return int points disponibles * @access public */ function calcAttaque($pourcentage, $attaquant) { include('includes/vars.php'); if ($attaquant) { $puissance = 0; $count = count($this->ATvais); for ($i=0 ; $i<$count ; $i++) { $maxat = $nomvais_at[$this->ATvais[$i][0]-1]; $puissance += $maxat * $pourcentage/100 * $this->ATvais[$i][1]; } return $puissance; } else { $puissance = 0; $count = count($this->ENvais); for ($i=0 ; $i<$count ; $i++) { $maxat = $nomvais_at[$this->ENvais[$i][0]-1]; $puissance += $maxat * $pourcentage/100 * $this->ENvais[$i][1]; } //Défenses $count = count($this->ENdef); for ($i=0 ; $i<$count ; $i++) { $maxat = $defense_at[$this->ENdef[$i][0]-1]; $puissance += $maxat * $pourcentage/100 * $this->ENdef[$i][1]; } return $puissance; } } /** * Attaque les vaisseaux adverses * @param int $points points d'attaque disponible pour l'attaque * @param bool $attaquant attaque le défenseur si true, sinon attaque l'attaquant * * @return void * @access public */ function attaquerVais($points, $attaquant) { include('includes/vars.php'); if ($attaquant) { while($points > 0) { // Calcul du nombre de vaisseaux et défenses à attaquer $nbvais = 0; $nbgroupes = 0; $nb = count($this->ENvais); for ($i=0 ; $i<$nb ; $i++) { $nbvais += $this->ENvais[$i][1]; $nbgroupes += $this->ENvais[$i][2]; } $nb = count($this->ENdef); for ($i=0 ; $i<$nb ; $i++) { $nbvais += $this->ENdef[$i][1]; $nbgroupes += $this->ENdef[$i][2]; } //S'il ne reste plus de vaisseaux et de défenses, on arrête la boucle if ($nbvais <= 0 || $nbgroupes <= 0 || $points <= 0) break; //Calcul du nombre de points qui sera enlevé par vaisseau ou défense $ppv = $points / $nbgroupes; $points = 0; //On lance l'attaque contre les vaisseaux for ($j=0 ; $j<$nbgroupes ; $j++){ $k = rand(0, count($this->ENvais)-1); $l = rand(0, count($this->ENvais[$k][3])-1); $this->ENvais[$k][3][$l][1] -= $ppv; if ($this->ENvais[$k][3][$l][1] < 0) { $this->ENvais[$k][3][$l][2] -= abs($this->ENvais[$k][3][$l][1]); $this->ENvais[$k][3][$l][1] = 0; if ($this->ENvais[$k][3][$l][2] <= 0) { $this->ENvais[$k][1] -= $this->ENvais[$k][3][$l][0]; $this->ENvais[$k][2] --; unset($this->ENvais[$k][3][$l]); $this->ENvais[$k][3] = array_merge($this->ENvais[$k][3]); if (!count($this->ENvais[$k][3])) { unset($this->ENvais[$k]); $this->ENvais[$k] = array_merge($this->ENvais[$k]); } } } } //On lance l'attaque contre les défenses for ($j=0 ; $j<$nbgroupes ; $j++){ $k = rand(0, count($this->ENdef)-1); $l = rand(0, count($this->ENdef[$k][3])-1); $this->ENdef[$k][3][$l][1] -= $ppv; if ($this->ENdef[$k][3][$l][1] < 0) { $this->ENdef[$k][3][$l][2] -= abs($this->ENdef[$k][3][$l][1]); $this->ENdef[$k][3][$l][1] = 0; if ($this->ENdef[$k][3][$l][2] <= 0) { $this->ENdef[$k][1] -= $this->ENdef[$k][3][$l][0]; $this->ENdef[$k][2] --; unset($this->ENdef[$k][3][$l]); $this->ENdef[$k][3] = array_merge($this->ENdef[$k][3]); if (!count($this->ENdef[$k][3])) { unset($this->ENdef[$k]); $this->ENdef[$k] = array_merge($this->ENdef[$k]); } } } } } return count($this->ENvais) + count($this->ENdef); } else { while($points > 0) { // Calcul du nombre de vaisseaux et défenses à attaquer $nbvais = 0; $nbgroupes = 0; $nb = count($this->ATvais); for ($i=0 ; $i<$nb ; $i++) { $nbvais += $this->ATvais[$i][1]; $nbgroupes += $this->ATvais[$i][2]; } //S'il ne reste plus de vaisseaux et de défenses, on arrête la boucle if ($nbvais <= 0 || $nbgroupes <= 0 || $points <= 0) break; //Calcul du nombre de points qui sera enlevé par vaisseau ou défense $ppv = $points / $nbvais; $points = 0; //On lance l'attaque for ($j=0 ; $j<$nbgroupes ; $j++){ $k = rand(0, count($this->ENdef)-1); $l = rand(0, count($this->ENdef[$k][3])-1); $this->ENdef[$k][3][$l][1] -= $ppv; if ($this->ENdef[$k][3][$l][1] < 0) { $this->ENdef[$k][3][$l][2] -= abs($this->ENdef[$k][3][$l][1]); $this->ENdef[$k][3][$l][1] = 0; if ($this->ENdef[$k][3][$l][2] <= 0) { $this->ENdef[$k][1] -= $this->ENdef[$k][3][$l][0]; $this->ENdef[$k][2] --; unset($this->ENdef[$k][3][$l]); $this->ENdef[$k][3] = array_merge($this->ENdef[$k][3]); if (!count($this->ENdef[$k][3])) { unset($this->ENdef[$k]); $this->ENdef[$k] = array_merge($this->ENdef[$k]); } } } } } return count($this->ATvais); } } function exportAT($pillage = false){ include('includes/vars.php'); $nb = count($this->ATvais); $nbvais = 0; $vaisContenu = 0; $vaisseau_1 = 0; $vaisseau_2 = 0; $vaisseau_3 = 0; $vaisseau_4 = 0; $vaisseau_5 = 0; $vaisseau_6 = 0; $vaisseau_7 = 0; $vaisseau_8 = 0; $vaisseau_9 = 0; $vaisseau_10 = 0; $vaisseau_11 = 0; $vaisseau_12 = 0; for($i=0 ; $i<$nb ; $i++) { ${'vaisseau_'.$this->ATvais[$i][0]} += $this->ATvais[$i][1]; $nbvais += $this->ATvais[$i][1]; $this->vaisContenu += $nomvais_rs[$this->ATvais[$i][0]-1]; } $sommeCont = $this->vaisContenuM + $this->vaisContenuC + $this->vaisContenuH; if ($sommeCont > $this->vaisContenu) { $retirer = $sommeCont/$this->vaisContenu; $this->vaisContenuM = floor($this->vaisContenuM/$retirer); $this->vaisContenuC = floor($this->vaisContenuC/$retirer); $this->vaisContenuH = floor($this->vaisContenuH/$retirer); } if ($pillage) { $req = mysql_query("SELECT * FROM flottes WHERE `id` = '".$this->refflotte."'"); $resultat = mysql_fetch_array($req); $reqDef = mysql_query("SELECT * FROM `planete` WHERE `galaxie` = '".$resultat['end_galaxie']."' AND `ss` = '".$resultat['end_ss']."' AND `position` = '".$resultat['end_position']."'") or die ("erreur sql ".mysql_error()); $resultatDef = mysql_fetch_array($reqDef); $ressplus = pillage($resultatDef['metal'], $resultatDef['cristal'], $resultatDef['hydrogene'], $this->vaisContenu - $this->vaisContenuM - $this->vaisContenuC - $this->vaisContenuH); $this->vaisContenuM += $ressplus[0]; $this->vaisContenuC += $ressplus[1]; $this->vaisContenuH += $ressplus[2]; } return '`nb_vais` = \''.$nbvais.'\', `contenu_max` = \''.$this->vaisContenu.'\', `contenu_metal` = \''.$this->vaisContenuM.'\', `contenu_cristal` = \''.$this->vaisContenuC.'\', `contenu_hydrogene` = \''.$this->vaisContenuH.'\', `vaisseau_1` = \''.$vaisseau_1.'\', `vaisseau_2` = \''.$vaisseau_2.'\', `vaisseau_3` = \''.$vaisseau_3.'\', `vaisseau_4` = \''.$vaisseau_4.'\', `vaisseau_5` = \''.$vaisseau_5.'\', `vaisseau_6` = \''.$vaisseau_6.'\', `vaisseau_7` = \''.$vaisseau_7.'\', `vaisseau_8` = \''.$vaisseau_8.'\', `vaisseau_9` = \''.$vaisseau_9.'\', `vaisseau_10` = \''.$vaisseau_10.'\', `vaisseau_11` = \''.$vaisseau_11.'\', `vaisseau_12` = \''.$vaisseau_12.'\''; } function exportEN(){ $nb = count($this->ENvais); $vaisseau_1 = 0; $vaisseau_2 = 0; $vaisseau_3 = 0; $vaisseau_4 = 0; $vaisseau_5 = 0; $vaisseau_6 = 0; $vaisseau_7 = 0; $vaisseau_8 = 0; $vaisseau_9 = 0; $vaisseau_10 = 0; $vaisseau_11 = 0; $vaisseau_12 = 0; for($i=0 ; $i<$nb ; $i++) { ${'vaisseau_'.$this->ENvais[$i][0]} += $this->ENvais[$i][1]; } $nb = count($this->ENdef); $def_1 = 0; $def_2 = 0; $def_3 = 0; $def_4 = 0; $def_5 = 0; for($i=0 ; $i<$nb ; $i++) { ${'def_'.$this->ENdef[$i][0]} += $this->ENdef[$i][1]; } return '`vaisseau_1` = \''.$vaisseau_1.'\', `vaisseau_2` = \''.$vaisseau_2.'\', `vaisseau_3` = \''.$vaisseau_3.'\', `vaisseau_4` = \''.$vaisseau_4.'\', `vaisseau_5` = \''.$vaisseau_5.'\', `vaisseau_6` = \''.$vaisseau_6.'\', `vaisseau_7` = \''.$vaisseau_7.'\', `vaisseau_8` = \''.$vaisseau_8.'\', `vaisseau_9` = \''.$vaisseau_9.'\', `vaisseau_10` = \''.$vaisseau_10.'\', `vaisseau_11` = \''.$vaisseau_11.'\', `vaisseau_12` = \''.$vaisseau_12.'\', `def_1` = \''.$def_1.'\', `def_2` = \''.$def_2.'\', `def_3` = \''.$def_3.'\', `def_4` = \''.$def_4.'\', `def_5` = \''.$def_5.'\''; } function genRapport($fin, $ATgagnant = false){ $req = mysql_query("SELECT * FROM `flottes` WHERE `id` = '".$this->refflotte."'"); $resultat = mysql_fetch_array($req); $reqDef = mysql_query("SELECT `id_user` FROM `planete` WHERE `galaxie` = '".$resultat['end_galaxie']."' AND `ss` = '".$resultat['end_ss']."' AND `position` = '".$resultat['end_position']."'") or die ("erreur sql ".mysql_error()); $resultatDef = mysql_fetch_array($reqDef); if ($this->Ntour == 0) { $rapportAT = '[b]Le combat contre '.trouvNom($resultatDef['id_user']).' est engagé ![/b] '; $rapportEN = '[b]Un combat est engagé contre '.trouvNom($resultatDef['id_user']).' ![/b] '; } elseif ($fin) { $rapportAT = '[b]Le combat contre '.trouvNom($resultatDef['id_user']).' est terminé ![/b] '; $rapportEN = '[b]Le combat contre '.trouvNom($resultatDef['id_user']).' est terminé ![/b] '; } else { $rapportAT = '[b]Suite du combat contre '.trouvNom($resultatDef['id_user']).' ![/b] '; $rapportEN = '[b]Suite du combat contre '.trouvNom($resultatDef['id_user']).' ![/b] '; } $rapportAT .= 'Tactique lors de ce tour : '.txtTactique($this->ATtactique).'. Lieux : ['.$resultat['end_galaxie'].':'.$resultat['end_ss'].':'.$resultat['end_position'].'] METTRE UN LIEN Vaisseaux au début de notre côté : Array Vaisseaux adverse au début : Array Défenses adverse au début : Array Etat de notre flotte à la fin de ce tour : Grand Array ^^ Etat de la flotte adverse à la fin de ce tour : Grand Array ^^ '; $rapportEN .= 'Tactique lors de ce tour : '.txtTactique($this->ENtactique).'. Lieux : ['.$resultat['end_galaxie'].':'.$resultat['end_ss'].':'.$resultat['end_position'].'] METTRE UN LIEN Vaisseaux au début de notre côté : Array Défenses au début de notre côté : Array Vaisseaux adverse au début : Array Etat de notre flotte à la fin de ce tour : Grand Array ^^ Etat de la flotte adverse à la fin de ce tour : Grand Array ^^ '; if (floor($this->Ntour/2) == $this->Ntour/2 && !$fin) { $rapportAT .= 'Vous pouvez profiter du temps de régénération des boucliers et des armes pour envoyer un nouvel ordre de tactique : Cliquez ici ! La prochaine attaque est prévue à '.date('/dm/ H:i:s', $this->timestamp+600); $rapportEN .= 'Vous pouvez profiter du temps de régénération des boucliers et des armes pour envoyer un nouvel ordre de tactique : Cliquez ici ! La prochaine attaque est prévue à '.date('/dm/ H:i:s', $this->timestamp+300); } elseif (!$fin) { $rapportAT .= 'Vous pouvez profiter du temps de régénération des boucliers et des armes pour envoyer un nouvel ordre de tactique : Cliquez ici ! La prochaine attaque est prévue à '.date('/dm/ H:i:s', $this->timestamp+300); $rapportEN .= 'Vous pouvez profiter du temps de régénération des boucliers et des armes pour envoyer un nouvel ordre de tactique : Cliquez ici ! La prochaine attaque est prévue à '.date('/dm/ H:i:s', $this->timestamp+600); } elseif ($fin && $ATgagnant) { $rapportAT .= 'Nous avons gagné le combat ! Nous repartons avec plein de choses.'; $rapportEN .= 'Nous n\'avons pas pu repousser l\'envahisseur qui repart avec plein de chose.'; } elseif ($fin && !$ATgagnant) { $rapportAT .= 'Nous avons perdu le combat !'; $rapportEN .= 'Nous avons pu repousser l\'envahisseur qui repart sans rien.'; } return array(mysql_real_escape_string($rapportAT), mysql_real_escape_string($rapportEN), $resultat['id_user'], $resultatDef['id_user']); } } ?>