connexion(); $bdd->escape($id); $flotte = $bdd->unique_query("SELECT * FROM $table_flottes WHERE id = $id;"); $bdd->query("UPDATE $table_flottes SET last = ".time()." WHERE id = $id;"); //Obtention d'un vérrou de 10 seconde sur la flotte $bdd->deconnexion(); if (!empty($flotte)) { $this->id_flotte = $flotte["id"]; $this->nom = $flotte["nom"]; $this->start_planete = $flotte["start_planete"]; $this->start_time = $flotte["start_time"]; $this->end_planete = $flotte["end_planete"]; $this->end_time = $flotte["end_time"]; $this->ret_planete = $flotte["ret_planete"]; $this->ret_time = $flotte["ret_time"]; $this->tactique = $flotte["tactique"]; $this->mission = $flotte["mission"]; $this->statut = $flotte["statut"]; $this->last = $flotte["last"]; foreach($nomvaisnVAR as $vais){ $this->vaisseaux[] = $flotte[$vais]; } foreach($ressoVAR as $contenu){ $this->contenu[] = $flotte[$contenu]; } $this->calculer(); } } } function calculer(){ global $nomvais_rs; //Calcul de la capacité maximale d'embarquement de la flotte foreach($this->vaisseaux as $key => $vais){ $this->contenuMax += $nomvais_rs[$key] * $vais; } } function load_planete(){ if (is_numeric($this->start_planete) && !empty($this->start_planete)) { $this->start_planete = new Planete($this->start_planete); } if (is_numeric($this->end_planete) && !empty($this->end_planete)) { $this->end_planete = new Planete($this->end_planete); } if (is_numeric($this->ret_planete) && !empty($this->ret_planete)) { $this->ret_planete = new Planete($this->ret_planete); } } function calc_deplacement($start_galaxie, $start_systeme, $start_position, $end_galaxie, $end_systeme, $end_position, $vitesse, $returnArray = false, $returnConso = false){ //Si la planète de départ n'est pas chargée, on charge les planètes if (is_numeric($this->start_planete)) $this->load_planete(); global $config, $nomvais_vitesseP, $nomvais_vitesseS, $nomvais_vitesseG, $nomvais_rs; $this->vitesse = $vitesse; //Calcul de la longueur du déplacement $diff_galaxie = abs($start_galaxie - $end_galaxie); $diff_systeme = abs($start_systeme - $end_systeme); $diff_position = abs($start_position - $end_position); $diff_centre_position_start = abs(ceil($config['nb_amas']/2) - $start_position); $diff_centre_systeme_start = abs(ceil($config['nb_systeme']/2) - $start_systeme); $diff_centre_position_end = abs(ceil($config['nb_amas']/2) - $end_position); $diff_centre_systeme_end = abs(ceil($config['nb_systeme']/2) - $end_systeme); //Calcul du temps de déplacement pour chaque vaisseau $temps = array(); $conso = array(0, 0, 0); foreach($this->vaisseaux as $key => $vais){ //S'il n'y a pas de vaisseaux de ce type, on ne calcul pas leur vitesse if ($vais == 0) continue; //Calcul du temps de déplacement entre planètes if ($start_systeme == $end_systeme && $start_galaxie == $end_galaxie) { $temps[0][$key] = (10/$nomvais_vitesseP[$key]) * (1 + 0.1 * $diff_position); $temps[1][$key] = $temps[2][$key] = 0; } //Calcul du temps de déplacement entre système elseif ($start_galaxie == $end_galaxie) { $temps[0][$key] = (10/$nomvais_vitesseP[$key]) * (1 + 0.1 * ($diff_centre_position_start + $diff_centre_position_end)); $temps[1][$key] = (20/$nomvais_vitesseS[$key]) * (2 + 1 * $diff_systeme); $temps[2][$key] = 0; } //Calcul du temps de déplacement entre galaxies else { $temps[0][$key] = (10/$nomvais_vitesseP[$key]) * (1 + 0.1 * ($diff_centre_position_start + $diff_centre_position_end)); $temps[1][$key] = (20/$nomvais_vitesseS[$key]) * (2 + 1 * ($diff_centre_systeme_start + $diff_centre_systeme_end)); $temps[2][$key] = (50/$nomvais_vitesseG[$key]) * (2 + 1.5 * $diff_galaxie); } //Calcul du bonus pour le réacteur à combustion $techR = $this->start_planete->technologies[1]; if ($techR & 56) $bonus = 0.7; elseif ($techR & 24) $bonus = 0.8; elseif ($techR & 8) $bonus = 0.9; else $bonus = 1; $temps[0][$key] *= $bonus * 1/$vitesse; $conso[0] += $vais * $temps[0][$key] * $bonus / exp($vitesse/5); //Calcul du bonus pour le réacteur à fusion $techR = $this->start_planete->technologies[1]; if ($techR & 448) $bonus = 0.7; elseif ($techR & 192) $bonus = 0.8; elseif ($techR & 64) $bonus = 0.9; else $bonus = 1; $temps[1][$key] *= $bonus * 1/$vitesse; $conso[1] += $vais * $temps[1][$key] * $bonus / exp($vitesse/7.5); //Calcul du bonus pour le réacteur à fusion de type II $techR = $this->start_planete->technologies[1]; if ($techR & 3584) $bonus = 0.7; elseif ($techR & 1536) $bonus = 0.8; elseif ($techR & 512) $bonus = 0.9; else $bonus = 1; $temps[2][$key] *= $bonus * 1/$vitesse; $conso[2] += $vais * $temps[2][$key] * $bonus / exp($vitesse/10); } //Si les chasseurs peuvent rentrer dans les cales des vaisseaux, on les enlèves if ($this->contenuMax - ($this->contenu[0] + $this->contenu[1] + $this->contenu[2]) - ($this->vaisseaux[4] * $nomvais_rs[4] + $this->vaisseaux[5] * $nomvais_rs[5]) >= ($this->vaisseaux[4] + $this->vaisseaux[5]) * 200) { $temps[2][4] = $temps[2][5] = $temps[1][4] = $temps[1][5] = $temps[0][4] = $temps[0][5] = 0; } //On calcul le temps de déplacement maximal if ($returnArray) return $temps; elseif ($returnConso) return array(max($temps[0]) + max($temps[1]) + max($temps[2]), ceil($conso[0]+$conso[1]+$conso[2])); else return (max($temps[0]) + max($temps[1]) + max($temps[2])); } function check_mission(){ //On vérifie qu'un calcul ne soit pas déjà en cours if ($this->last >= time() - 10) return false; elseif ($this->start_time + $this->end_time < time()) return false; elseif ($this->statut == 1 && ($this->ret_time > time() || $this->start_time + $this->end_time * 2 >= time())) return $this->retourner(); switch($this->mission){ case 0: case 5: return $this->stationner(); break; case 1: return $this->transporter(); break; case 2: return $this->coloniser(); break; case 3: return $this->espionner(); break; case 4: return $this->attaquer(); break; } } function rappeler(){ if ($this->start_time + $this->end_time >= time()) return false; else { $this->end_time = time() - $this->start_time + 10; $this->mission = 5; if (!in_array('mission', $this->modifFlotte)) $this->modifFlotte[] = 'mission'; if (!in_array('end_time', $this->modifFlotte)) $this->modifFlotte[] = 'end_time'; return true; } } function retourner(){ //Si la planète de départ n'est pas chargée, on charge les planètes if (is_numeric($this->start_planete)) $this->load_planete(); //Si on a demandé une planète particulière au retour if (!empty($this->ret_time) && !empty($this->ret_planete) && !is_numeric($this->ret_planete)) { foreach($this->vaisseaux as $key => $vais){ $this->ret_planete->vaisseaux[$key] += $vais; } } //Si le retour se fait sur la planète source else { foreach($this->vaisseaux as $key => $vais){ $this->start_planete->vaisseaux[$key] += $vais; } } $this->modifFlotte = "DELETE"; } /** * Destructeur * * @return void * @access public */ function __destruct(){ global $var___db, $config, $table_flottes; $nb = count($this->modifFlotte); $out = array(); $bdd = new bdd(); $bdd->connexion(); if ($this->modifFlotte === "DELETE") $bdd->query("DELETE FROM $table_flottes WHERE id = ".$this->id_flotte.";"); else { for($i = 0; $i < $nb; $i++){ if (!is_array($this->{$this->modifFlotte[$i]})) { $bdd->escape($this->{$this->modifFlotte[$i]}); if (is_int($this->{$this->modifFlotte[$i]}) || is_float($this->{$this->modifFlotte[$i]})) $out[] .= $this->modifFlotte[$i]." = ".$this->{$this->modifFlotte[$i]}; else $out[] .= $this->modifFlotte[$i]." = '".$this->{$this->modifFlotte[$i]}."'"; } else { if ($this->modifFlotte[$i] == "contenu") $calc = "resso"; elseif ($this->modifFlotte[$i] == "vaisseaux") $calc = "nomvaisn"; if (!isset(${$calc.'VAR'})) global ${$calc.'VAR'}; $nombr = count(${$calc.'VAR'}); for($j = 0; $j < $nombr; $j++){ $bdd->escape($this->{$this->modifFlotte[$i]}[$j]); $out[] = ${$calc.'VAR'}[$j]." = ".$this->{$this->modifFlotte[$i]}[$j]; } } } if (empty($id_flotte)) { $out1 = ''; $out2 = ''; global $nomvaisnVAR; foreach ($this->vaisseaux as $key => $vais){ $out1 .= ', '.${$calc.'VAR'}[$key]; $out2 .= ', '.$vais; } $sql = "INSERT INTO $table_flottes (id_user, mission, start_time, start_planete, end_time, end_planete, vitesse, contenu_metal, contenu_cristal, contenu_hydrogene, tactique, nom$out1) VALUES ('".$start_planete->id_user."', '".$this->mission."', '".$this->start_time."', '".$start_planete->id."', '".$this->end_time."', '".$this->end_planete."', '".$this->vitesse."', '".$this->contenu[0]."', '".$this->contenu[1]."', '".$this->contenu[2]."', '".$this->tactique."', '".$this->nom."'$out2);"; var_dump($sql); //$bdd->query($sql); } elseif (!empty($out)) $bdd->query("UPDATE $table_flottes SET ".implode(', ', $out).", last = 0 WHERE id = ".$this->id_flotte.";"); else $bdd->query("UPDATE $table_flottes SET last = 0 WHERE id = ".$this->id_flotte.";"); } $bdd->deconnexion(); } } ?>