/** * déduit le temps écoulé des éléments en construction * @param $time_diff int */ public function update_queue($time_diff) { $item = $this->get_first_item_from_queue(); if (!empty($item)) { $time_left = $item['time_left'] - $time_diff; if ($time_left > 0) { $sql = "UPDATE queue SET time_left = time_left - :time_diff WHERE id = {$item['id']}"; $req = Db::prepare($sql); $req->bindParam(':time_diff', $time_diff, PDO::PARAM_INT); $req->execute(); } else { // ajout de la flotte au stock et mise à jour du score $fleet = new Army($this->user_id); $fleet->add_troop($item['unit_id'], $item['quantity'], -1, true); // effacement de l'élement de la file d'attente $this->remove_item_from_queue($item['id']); // on met à jour l'élément suivant de la file d'attente $this->update_queue(abs($time_left)); } } }
/** Cette fonction transfert les unités en attaque au stock et efface le combat * elle retourne la nouvelle armée pour l'affichage en ajax * @return array new updated Army_owned list */ public function reset_army() { $army_mobile = new Army($this->attacker_id, $this->id); $army_owned = new Army($this->attacker_id); if (count($army_mobile->troops) > 0 && $army_mobile->total_units > 0) { foreach ($army_mobile->troops as $unit_id => $troop) { if ($troop->quantity > 0) { $army_owned->add_troop($unit_id, $troop->quantity); } $troop = new Troop($troop->id); $troop->delete(); } } $this->delete(); return $army_owned->get_troops(); }
/* TODO : décommenter pour interdire l'attaque sur soi if ($user->id == $defender->id) { $errors[] = "C'est une mutinerie ? Non sérieusement vous ne pouvez pas vous attaquer."; return; } */ $target = new User($_POST['target_id']); $combat = new Combat(); $combat->hydrate(['attacker_id' => $user->id, 'target_id' => $target->id, 'arrival_time' => date("Y-m-d H:i:s", time('now') + abs($user->score - $target->score))]); $combat_id = intval($combat->add()); $army_moving = new Army($user->id, $combat_id); $army_owned = new Army($user->id); foreach ($_POST as $post_key => $quantity) { $post_arr = explode('_', $post_key); if ($post_arr[0] == 'unitID' && $quantity > 0) { $army_moving->add_troop(intval($post_arr[1]), intval($quantity), $combat_id); $army_owned->add_troop(intval($post_arr[1]), intval(-$quantity)); } } // redirection pour éviter le renvoi d'une nouvelle flotte en actualisant la page /* TODO décommenter en prod $url = 'Location:' . _ROOT_ . 'war'; header("$url"); */ // fleet selection } elseif (isset($_GET['action']) && $_GET['action'] == 'attack' && isset($_GET['param'])) { $army_owned = new Army($user->id); $target = new User(intval($_GET['param'])); if (!Combat::is_available_target($user->score, $target->score)) { $errors[] = clean_html($target->pseudo) . " n'est pas a votre portée"; }