query("SELECT * FROM `$table_flottes` WHERE `id_user` = '$id_user' OR (`end_galaxie` = '$Hgalaxie' AND `end_ss` = '$Hss' AND `end_position` = '$Hposition');"); $nbFlottes = $chapeau->num_rows; for ($i = 0; $i < $nbFlottes; $i++) { //Récupération des principales variables de la flotte $id_flotte = $queryFlottes[$i]['id']; $mission = $queryFlottes[$i]['mission']; $end_galaxie = $queryFlottes[$i]['end_galaxie']; $end_ss = $queryFlottes[$i]['end_ss']; $end_position = $queryFlottes[$i]['end_position']; $end_time = $queryFlottes[$i]['start_time'] + $queryFlottes[$i]['end_time']; //On vérifie que la planète cible existe if ($mission != 3 && !$queryEN = $chapeau->unique_query("SELECT * FROM `$table_planete` WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position';")) { //TODO La planète cible n'existe plus/pas, envoyer un mail au joueur et retourner la flotte continue; } $ENidPlan = $queryEN['id']; //La flotte est prête a effectuer une action if ($queryFlottes[$i]['effectue'] != 1 && time() >= $queryFlottes[$i]['start_time'] + $queryFlottes[$i]['end_time'] && !empty($queryFlottes[$i]['end_time'])) { //Mission Attaquer if ($mission == 1) { require_once('Class/class.combat.php'); //On regarde si le combat a déjà commencé if ($queryFlottes[$i]['effectue'] == 2) { if ($queryCombat = $chapeau->unique_query("SELECT * FROM `$table_flottes_combats` WHERE `refflotte` = '$id_flotte';")) { //On vérifie si on lance le tour suivant ou non if (time() >= $queryCombat['timestamp']) { //Récupération du combat $combat = unserialize($queryCombat['serialize']); //Mise à jour des tactiques if (!empty($queryCombat['tactiqueAT'])) $combat->changerTactiqueAT($queryCombat['tactiqueAT']); if (!empty($queryCombat['tactiqueEN'])) $combat->changerTactiqueEN($queryCombat['tactiqueEN']); } else continue; } else die('Erreur dans le script de combat, contactez d\'urgence un administrateur !'); } else { //On génére un nouveau combat $combat = new Combat($queryFlottes[$i], $queryEN, $queryEN); $chapeau->query("UPDATE `$table_flottes` SET `effectue` = '2' WHERE `id` = '$id_flotte';"); } while($combat->timestamp <= time()) { //Préparation du rapport $rapport = new Rapport($mission, $queryFlottes[$i]['id_user'], $queryEN['id_user'], $combat->timestamp); $combat->Ntour++; $rapport->addInfo($combat->ATvais, 0); $rapport->addInfo($combat->ENvais, 1); $rapport->addInfo($combat->ENdef, 2); $rapport->addInfo($combat->Ntour, 3); $rapport->addInfo($queryEN, 4); $rapport->addInfo($queryFlottes[$i], 5); //Détermine à qui est le tour : attaquant ou défenseur if ($combat->Ntour%2) { //Tour impaire : tour attaquant //Récupération des paramètres de la tactique $arraytactique = tactique($combat->ATtactique); //Lancement du combat, si condition validée, attaquant vainceur if (@!$combat->attaquerVais($combat->calcAttaque($arraytactique[2] + $combat->regenereBC($arraytactique[1], true, !$arraytactique[3]), true), true)) { $chapeau->query("DELETE FROM `$table_flottes_combats` WHERE `refflotte` = '$id_flotte';"); $chapeau->query("UPDATE `$table_flottes` SET ".$combat->exportAT(true).", `effectue` = '1', `ret_time` = '".$combat->timestamp."' + `end_time` WHERE `id` = '$id_flotte';"); $chapeau->query("UPDATE `$table_planete` SET ".$combat->exportEN().", `metal` = `metal` - '".$combat->pillage[0]."', `cristal` = `cristal` - '".$combat->pillage[1]."', `hydrogene` = `hydrogene` - '".$combat->pillage[2]."' WHERE `id` = '$ENidPlan';"); $rapport->addInfo(array(true, true), 6); } else $rapport->addInfo(array(false, false), 6); } else { //Tour impaire : tour défenseur //Récupération des paramètres de la tactique $arraytactique = tactique($combat->ENtactique); //Lancement du combat, si condition validée, défenseur vainceur if (@!$combat->attaquerVais($combat->calcAttaque($arraytactique[2] + $combat->regenereBC($arraytactique[1], false, !$arraytactique[3]), false), false)) { $chapeau->query("DELETE FROM `$table_flottes_combats` WHERE `refflotte` = '$id_flotte';"); $chapeau->query("DELETE FROM `$table_flottes` WHERE `id` = '$id_flotte';"); $chapeau->query("UPDATE `$table_planete` SET ".$combat->exportEN()." WHERE `id` = '$ENidPlan';"); $rapport->addInfo(array(true, false), 6); } else $rapport->addInfo(array(false, false), 6); } $rapport->addInfo($combat->ATvais, 7); $rapport->addInfo($combat->ENvais, 8); $rapport->addInfo($combat->ENdef, 9); //Prévision du prochain tour $combat->timestamp += 300; $rapport->addInfo($combat->timestamp, 10); $rapport->addInfo($combat->pillage, 11); //On envoie les rapports aux joueurs concernés $rapport->send(); } $debriM = $combat->debriM + $queryEN['debris_met']; $debriC = $combat->debriC + $queryEN['debris_cri']; $combat->debriM = 0; $combat->debriC = 0; $chapeau->query("UPDATE `$table_planete` SET `debris_met` = '$debriM', `debris_cri` = '$debriC' WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position';"); if (!$rapport->var[6][0]) { //Si le combat n'est pas terminé //On sérialise la classe pour l'exporter $serialise = serialize($combat); //On enregistre le combat dans la base de données if ($queryFlottes[$i]['effectue']) $chapeau->query("UPDATE `$table_flottes_combats` SET `serialize` = '$serialise', `tactiqueAT` = '0', `tactiqueEN` = '0', `timestamp` = '".$combat->timestamp."' WHERE `refflotte` = '$id_flotte';"); else $chapeau->query("INSERT INTO `$table_flottes_combats` VALUES(NULL, '".$queryFlottes[$i]['id']."', '".$combat->timestamp."', '$serialise', '0', '0');"); } } //Mission Transporter elseif ($mission == 2) { $chapeau->query("UPDATE `$table_planete` SET `metal` = `metal` + '".$queryFlottes[$i]['contenu_metal']."', `cristal` = `cristal` + '".$queryFlottes[$i]['contenu_cristal']."', `hydrogene` = `hydrogene` + '".$queryFlottes[$i]['contenu_hydrogene']."' WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position';"); $chapeau->query("UPDATE `$table_flottes` SET `effectue` = '1', `contenu_metal` = '0', `contenu_cristal` = '0', `contenu_hydrogene` = '0' WHERE `id` = '$id_flotte';"); $rapport = new Rapport($mission, $queryFlottes[$i]['id_user'], $queryEN['id_user'], $end_time); $rapport->addInfo($queryEN, 0); $rapport->addInfo(array($queryFlottes[$i]['contenu_metal'], $queryFlottes[$i]['contenu_cristal'], $queryFlottes[$i]['contenu_hydrogene']), 1); $rapport->send(); } //Mission Coloniser elseif ($mission == 3) { $rapport = new Rapport($mission, $queryFlottes[$i]['id_user'], 0, $end_time); $rapport->addInfo(array($end_galaxie, $end_ss, $end_position), 0); if ($queryEN) $rapport->addInfo(false, 1); else { $rapport->addInfo(true, 1); $time = time(); $cases = mt_rand(125,222); $image = mt_rand(1,15); $Cmetal = $queryFlottes[$i]['contenu_metal'] + 1000; $Ccristal = $queryFlottes[$i]['contenu_cristal'] + 700; $Chydrogene = $queryFlottes[$i]['contenu_hydrogene']; //Calcul de l'isolement $nbPlan = count($queryPlanetes); switch($nbPlan){ case 11: $tps = 2; break; case 12: $tps = 4; break; case 13: $tps = 6; break; case 14: $tps = 8; break; case 15: $tps = 12; break; case 16: $tps = 16; break; case 17: $tps = 20; break; default: $tps = 24; } $debut = mktime(rand(0, 24-$tps), 0, 0, date('n'), date('j'), date('Y')); $fin = $debut + $tps * 3600; $chapeau->query("INSERT INTO `$table_planete` (`id_user`, `isolement`, `nom_planete`, `galaxie`, `ss`, `position`, `image`, `cases`, `timestamp`, `metal`, `cristal`, `hydrogene`) VALUES ('".$queryFlottes[$i]['id_user']."', '$debut $fin', 'Planète colonisée', '$end_galaxie', '$end_ss', '$end_position', '$image', '$cases', '$time', '$Cmetal', '$Ccristal', '$Chydrogene');"); if ($queryFlottes[$i]['nb_vais'] == 1) { $queryFlottes[$i]['nb_vais'] = -1; $chapeau->query("DELETE FROM `$table_flottes` WHERE `id` = '$id_flotte'"); } else $chapeau->query("UPDATE `$table_flottes` SET `effectue` = '1', `vaisseau_3` = `vaisseau_3` - 1, `nb_vais` = `nb_vais` - 1, `contenu_metal` = '0', `contenu_cristal` = '0', `contenu_hydrogene` = '0' WHERE `id` = '$id_flotte';"); } $rapport->send(); } //Mission Recycler elseif ($mission == 4) { $capacite = $queryFlottes[$i]['contenu_max'] - (vais_conso($queryFlottes[$i]['end_time'], count($queryFlottes[$i]['nb_vais']))*$queryFlottes[$i]['vitesse']*5) + $queryFlottes[$i]['contenu_metal'] + $queryFlottes[$i]['contenu_cristal'] + $queryFlottes[$i]['contenu_hydrogene']; $debris_met = $queryEN['debris_met']; $debris_cri = $queryEN['debris_cri']; if ($debris_met+$debris_cri > $capacite) { $a = floor($capacite/2); $b = floor($capacite/2); if ($a > $debris_met && $b > $debris_cri) { $a = $debris_met; $b = $debris_cri; } else if ($a > $debris_met) { $a = $debris_met; $b = ($capacite - $a); if ($b > $debris_cri) $b = $debris_cri; } else if ($b > $debris_cri) { $b = $debris_cri; $a = ($capacite - $b); if ($a > $debris_met) $a = $debris_met; } } else { $a = $debris_met; $b = $debris_cri; } $Cmetal = $a + $queryFlottes[$i]['contenu_metal']; $Ccristal = $b + $queryFlottes[$i]['contenu_cristal']; $chapeau->query("UPDATE `$table_flottes` SET `effectue` = '1', `contenu_metal` = '$Cmetal', `contenu_cristal` = '$Ccristal' WHERE `id` = '$id_flotte';"); $chapeau->query("UPDATE `$table_planete` SET `debris_met` = `debris_met` - '$a', `debris_cri` = `debris_cri` - '$b' WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position';"); $rapport = new Rapport($mission, $queryFlottes[$i]['id_user'], $queryEN['id_user'], $end_time); $rapport->addInfo($queryEN, 0); $rapport->addInfo(array($a, $b), 1); $rapport->send(); } //Mission Espionnage elseif ($mission == 5) { $chapeau->query("UPDATE `$table_flottes` SET `effectue` = '1' WHERE `id` = '$id_flotte';"); $nbsondes = $queryFlottes[$i]['vaisseau_3']; $id_userT = $queryEN['id_user']; $id_att = $queryFlottes[$i]['id_user']; $resultatUD = $chapeau->unique_query("SELECT * FROM `$table_user` WHERE `id` = '$id_userT';"); $resultatUA = $chapeau->unique_query("SELECT * FROM `$table_user` WHERE `id` = '$id_att';"); $diffNiveau = $resultatUA['detection'] - $resultatUD['detection'] + floor($nbsondes/2); $rapport = new Rapport($mission, $id_att, $id_userT, $end_time); if ($diffNiveau < 0) { $rapport->addInfo($resultatT, 0); $rapport->addInfo(false, 1); } if ($diffNiveau >= 0) $rapport->addInfo($resultatT, 0); if ($diffNiveau >= 1) $rapport->addInfo(true, 1); if ($diffNiveau >= 2) $rapport->addInfo(true, 2); if ($diffNiveau >= 3) $rapport->addInfo(true, 3); if ($diffNiveau >= 4) $rapport->addInfo($resultatUD, 4); if ($diffNiveau >= 5) $rapport->addInfo(true, 5); $rapport->send(); } } //Si la flotte a terminé son retour if ($queryFlottes[$i]['nb_vais'] >= 0 && $queryFlottes[$i]['effectue']) { $start_galaxie = $queryFlottes[$i]['start_galaxie']; $start_ss = $queryFlottes[$i]['start_ss']; $start_position = $queryFlottes[$i]['start_position']; $ret_galaxie = $queryFlottes[$i]['ret_galaxie']; $ret_ss = $queryFlottes[$i]['ret_ss']; $ret_position = $queryFlottes[$i]['ret_position']; $retour = false; if (!empty($queryFlottes[$i]['ret_position']) && time() >= $queryFlottes[$i]['ret_time']) { if ($chapeau->unique_query("SELECT * FROM `$table_planete` WHERE `galaxie` = '$ret_galaxie' AND `ss` = '$ret_ss' AND `position` = '$ret_position';")) { $export = ''; for($j = 1; $j <= 12; $j++) { $export .= ', `vaisseau_'.$j.'` = `vaisseau_'.$j.'` + '.$queryFlottes[$i]['vaisseau_'.$j]; } $chapeau->query("UPDATE `$table_planete` SET `metal` = `metal` + '".$queryFlottes[$i]['contenu_metal']."', `cristal` = `cristal` + '".$queryFlottes[$i]['contenu_cristal']."', `hydrogene` = `hydrogene` + '".$queryFlottes[$i]['contenu_hydrogene']."'$export WHERE `galaxie` = '$ret_galaxie' AND `ss` = '$ret_ss' AND `position` = '$ret_position';"); $chapeau->query("DELETE FROM `$table_flottes` WHERE `id_user` = '".$queryFlottes[$i]['id_user']."' AND `id` = '$id_flotte';"); } } elseif (time() >= $queryFlottes[$i]['ret_time']) $retour = true; elseif (time() >= $queryFlottes[$i]['start_time'] + $queryFlottes[$i]['end_time'] * 2 && $queryFlottes[$i]['mission'] != 0 && ($queryFlottes[$i]['mission'] != 1 || (!empty($queryFlottes[$i]['ret_time']) && time() >= $queryFlottes[$i]['ret_time'] + $queryFlottes[$i]['end_time']))) $retour = true; if ($retour) { if ($chapeau->unique_query("SELECT * FROM `$table_planete` WHERE `galaxie` = '$start_galaxie' AND `ss` = '$start_ss' AND `position` = '$start_position';")) { $export = ''; for($j = 1; $j <= 12; $j++) { $export .= ', `vaisseau_'.$j.'` = `vaisseau_'.$j.'` + '.$queryFlottes[$i]['vaisseau_'.$j]; } $chapeau->query("UPDATE `$table_planete` SET `metal` = `metal` + '".$queryFlottes[$i]['contenu_metal']."', `cristal` = `cristal` + '".$queryFlottes[$i]['contenu_cristal']."', `hydrogene` = `hydrogene` + '".$queryFlottes[$i]['contenu_hydrogene']."'$export WHERE `galaxie` = '$start_galaxie' AND `ss` = '$start_ss' AND `position` = '$start_position';"); $chapeau->query("DELETE FROM `$table_flottes` WHERE `id_user` = '".$queryFlottes[$i]['id_user']."' AND `id` = '$id_flotte';"); } } } } ?>