/** * résolution des combats (chargé depuis index.php) **/ public function solve_combats() { // identification de l'attaquant et du défenseur $attacker = new User($this->attacker_id); $defender = new User($this->target_id); // ... et de leur armée $army_att = new Army($this->attacker_id, $this->id); $army_def = new Army($this->target_id); // affichage de l'armée attaquante $mess_att = ''; foreach ($army_att->troops as $unit) { if ($unit->quantity > 0) { $mess_att .= '<li>' . $unit->quantity . ' ' . $unit->name . '</li>'; } } // affichage de l'armée en défence $mess_def = ''; if ($army_def->total_units > 0) { foreach ($army_def->troops as $unit) { $mess_def .= '<li>' . $unit->quantity . ' ' . $unit->name . '</li>'; } } else { $mess_def .= "<li>Il n'y avait personne pour défendre cet empire</li>"; } $message = "<table><tr>" . "<th style=\"width:50%\">Attaquant : {$attacker->pseudo}<br>flotte : {$army_att->total_units} unité(s)</th>" . "<th style=\"width:50%\">Défenseur : {$defender->pseudo}<br>flotte : {$army_def->total_units} unité(s)</th>" . "</tr><tr><td><ul>{$mess_att}</ul></td><td><ul>{$mess_def}</ul></td></tr>"; if ($army_def->total_units > 0) { // résolution du combat en 6 tours (on boucle tant qu'il reste des unités à un joueur $i = 0; while ($i < 6 && $army_att->total_units > 0 && $army_def->total_units > 0) { $i++; // il faut temporiser les dégats de l'attaquant pour qu'il puisse attaquer de toute sa force // car va lui détruire des unités dès sa première attaque $dommages = $army_def->total_damage; $def_res = $army_def->split_damage($army_att->total_damage); $att_res = $army_att->split_damage($dommages); $message .= "<tbody><tr><th colspan=\"2\">Tour {$i}</th></tr><tr><td>{$att_res}</td><td>{$def_res}</td></tr></tbody>"; } } // résultat du combat if ($army_def->total_units <= 0) { $available = round($defender->ressources / 3); $can_take = round($army_att->total_life); $amount = $available - $can_take > 0 ? $can_take : $available; $attacker->increase_ressource($amount); $defender->increase_ressource(-$amount); $result = 'Vainqueur : ' . $attacker->pseudo . '<br>Ressources pillées : ' . $amount; } elseif ($army_att->total_units <= 0) { $result = 'Vainqueur : ' . $defender->pseudo; } else { $result = 'Aucun vainqueur'; } $message .= "<tr><td colspan='2'>{$result}</td></tr></table>"; $this->reset_army(); // envoi les rapports de combats $mail = new Mail(); $mail->send_mail($attacker->id, $message, 'Rapport de combat (' . $defender->pseudo . ')'); // on changer uniquement le destinataire et on le renvoi $mail->recipient = $defender->id; $mail->add(); }