forked from halo-battle/game
304 lines
17 KiB
PHP
304 lines
17 KiB
PHP
<?php
|
|
if(!defined('INDEX')) { header('Location: ../'); exit; }
|
|
$titre = 'Flottes';
|
|
include_once(_FCORE."../game/Class/class.flotte.php");
|
|
|
|
if (!empty($_POST['cds']) && !empty($_POST['nomflotte']) && isset($_POST['amas']) && !empty($_POST['ss']) && !empty($_POST['pos']) && !empty($_POST['vitesse']) && isset($_POST['mission']) && isset($_POST['metal']) && isset($_POST['cristal']) && isset($_POST['hydrogene'])) {
|
|
$end_galaxie = floor(gpc('amas', 'post'));
|
|
$end_ss = floor(gpc('ss', 'post'));
|
|
$end_pos = floor(gpc('pos', 'post'));
|
|
$mission = floor(gpc('mission', 'post'));
|
|
if (isset($_POST['tactique'])) $tactique = floor(gpc('tactique', 'post'));
|
|
else $tactique = 0;
|
|
$EBmetal = floor(gpc('metal', 'post'));
|
|
$EBcristal = floor(gpc('cristal', 'post'));
|
|
$EBhydrogene = floor(gpc('hydrogene', 'post'));
|
|
$vitesse = floor(gpc('vitesse', 'post'))/100;
|
|
|
|
$bdd->connexion();
|
|
$bdd->escape($end_galaxie);
|
|
$bdd->escape($end_ss);
|
|
$bdd->escape($end_pos);
|
|
$bdd->escape($mission);
|
|
$bdd->escape($tactique);
|
|
$bdd->escape($EBmetal);
|
|
$bdd->escape($EBcristal);
|
|
$bdd->escape($EBhydrogene);
|
|
$bdd->escape($vitesse);
|
|
$resultat = $bdd->unique_query("SELECT COUNT(id) AS cnt FROM $table_flottes WHERE id_user = '$id_user'");
|
|
$bdd->deconnexion();
|
|
$nbr = $resultat['cnt'];
|
|
|
|
//Vérification du code anti-bots
|
|
/*if (!isset($sess->values['flcds']) || gpc('cds', 'post') != $sess->values['flcds']) erreur('Impossible d\'authentifier l\'envoie de la flotte.<br />Si le problème perciste, <a href="mailto:technique@halo-battle.s-fr.com">contactez un administrateur</a>.', "red", '?p=flotte', 4000);
|
|
//Si la mission est d'attaquer, on vérifie que les attaques ne soient pas désactivées
|
|
else*/if ($mission == 3 && !ATTAQUES) erreur('Les attaques sont désactivées pour le moment. Pour plus d\'informations, <a href="http://halo-battle.s-fr.com/forum/">consultez le forum</a>.', "red", '?p=flotte', 5000);
|
|
//Vérification que la destination ne soit pas en dehors de la galaxie
|
|
elseif ($end_galaxie > MAX_AMAS || $end_ss > MAX_SYSTEME || $end_pos > MAX_PLANETE || $end_galaxie < 0 || $end_ss < 1 || $end_pos < 1 || ($end_galaxie < 1 && $sess->level < 6)) erreur('La destination de la flotte n\'est pas correcte.', "red", '?p=flotte');
|
|
//Vérification que le nombre de slots ne soit pas dépassé
|
|
elseif ($nbr > ceil(count($queryPlanetes)/2 + 1)) erreur('Vous n\'avez pas assez de slots disponibles.', "red", '?p=flotte');
|
|
//On vérifie la mission
|
|
elseif ($mission < 0 || $mission > 5) erreur('Mission incorrecte !', "red", '?p=flotte');
|
|
//Si la mission est d'attaquer, on vérifie la tactique
|
|
elseif ($mission == 3 && !(($tactique == 1 && $planete->technologies[3] & 4096) || ($tactique == 2 && $planete->technologies[3] & 8192) || ($tactique == 3 && $planete->technologies[3] & 16384) || $tactique == 0)) erreur('Vous ne connaissez pas cette tactique de combat !', "red", '?p=flotte');
|
|
//On vérifie la mission, si elle est d'espionner, il faut qu'il y ait des sondes
|
|
elseif ($mission == 5 && $sess->values['vais'][6] <= 0 && $sess->values['vais'][13] <= 0) erreur('Vous ne pouvez pas espionner sans sonde d\'espionnage !', "red", '?p=flotte');
|
|
//On vérifie la mission, si elle est de coloniser, il faut qu'il y ait des vaisseaux de colonisation
|
|
elseif ($mission == 2 && $sess->values['vais'][2] <= 0) erreur('Vous ne pouvez pas coloniser sans vaisseau de colonisation !', "red", '?p=flotte');
|
|
//On vérifie la mission, si elle est de recycler, il faut qu'il y ait des reclycleurs
|
|
elseif ($mission == 4 && $sess->values['vais'][3] <= 0) erreur('Vous ne pouvez pas recycler sans recycleur !', "red", '?p=flotte');
|
|
//On vérifie que l'on possède assez de ressources
|
|
elseif ((!empty($EBmetal) && !$EBmetal > $planete->metal) || (!empty($EBcristal) && !$EBcristal > $planete->cristal) || (!empty($EBhydrogene) && !$EBhydrogene > $planete->hydrogene)) erreur('Vous ne pouvez pas envoyer plus de ressources que vous n\'en posséder.', "red", '?p=flotte');
|
|
//On vérifie que l'on n'envoie pas des ressources négatives
|
|
elseif ((!empty($EBmetal) && $EBmetal < 0) || (!empty($EBcristal) && $EBcristal < 0) || (!empty($EBhydrogene) && $EBhydrogene < 0)) erreur('Vous avez spécifié des valeurs de ressources à embarquer incorrectes !', "red", '?p=flotte', 4000);
|
|
//On vérifie la vitesse du vaisseau
|
|
elseif (!is_numeric($vitesse) || $vitesse < 0 || $vitesse > 1) erreur('La vitesse de votre flotte est incorrecte !', "red", '?p=flotte');
|
|
else {
|
|
//On vérifie qu'il n'y ait pas une interaction entre deux multi-comptes
|
|
$cnt = count($multi);
|
|
if ($cnt > 1 && $mission == 1) {
|
|
for($i = 0; $i < $cnt; $i++){
|
|
if ($multi[$i]['id_util'] == $resultat['id_user']) erreur('Vous ne pouvez pas avoir d\'interaction avec ce joueur pour raison de multi-compte (voir page d\'accueil).');
|
|
}
|
|
}
|
|
|
|
$bdd->connexion();
|
|
$resultat = $bdd->unique_query("SELECT id, id_user, debris_met, debris_cri FROM $table_planete WHERE galaxie = '$end_galaxie' AND ss = '$end_ss' AND position = '$end_pos';");
|
|
$bdd->deconnexion();
|
|
|
|
//Si la mission est d'attaquer, on vérifie que le joueur cible ne soit pas ne mode vacances
|
|
if ($mission == 3) {
|
|
//Récupération de l'ID du joueur cible
|
|
$rech_user = $resultat['id_user'];
|
|
$bdd->connexion();
|
|
$resultatu = $bdd->unique_query("SELECT mv, time_inscription FROM $table_user WHERE id = '$rech_user';");
|
|
$bdd->deconnexion();
|
|
if ($resultatu['mv'] > 0) erreur('Le joueur que vous tentez d\'attaquer est actuellement en mode vacances, vous ne pouvez donc pas l\'attaquer avant son retour de vacances.', "red", '?p=flotte', 3000); //TODO Mettre le numéro du mode vacances et non > 0 !!!
|
|
elseif ($resultatu['time_inscription'] + 604800 > time()) erreur('Le joueur que vous tentez d\'attaquer s\'est inscrit récemment, laissez-lui le temps de se préparer au combat !', "red", '?p=flotte', 3000);
|
|
elseif (!$resultat) erreur('La planète que vous tentez d\'attaquer est inhabitée.', "red", '?p=flotte');
|
|
elseif ($resultat['id_user'] == $id_user) erreur('La planète que vous tentez d\'attaquer vous appartient.', "red", '?p=flotte');
|
|
}
|
|
elseif ($mission == 1 && !$resultat) erreur('Impossible de transporter des ressources vers la planète ['.$end_galaxie.':'.$end_ss.':'.$end_pos.'] car elle est inhabitée.', "red", '?p=flotte', 4000);
|
|
elseif ($mission == 2 && $resultat) erreur('La planète que vous voulez coloniser est déjà habitée.', "red", '?p=flotte', 3000);
|
|
elseif ($mission == 0 && $resultat['id_user'] != $id_user) erreur('La planète sur laquelle vous désirez stationner ne vous appartient pas.', "red", '?p=flotte', 3000);
|
|
elseif ($mission == 4 && ($resultat['debris_met'] <= 0 || $resultat['debris_cri'] <= 0) && empty($sess->values['forceFlotte'])) {
|
|
$sess->values['forceFlotte'] = true;
|
|
$sess->put();
|
|
erreur('Il n\'y a rien à recycler sur la planète ['.$end_galaxie.':'.$end_ss.':'.$end_pos.'].<br />Vous pouvez forcer le lancement de la flotte en rechargeant cette page.', "orange");
|
|
}
|
|
|
|
if (!isset($sess->values['vais']) || !is_array($sess->values['vais'])) erreur('Erreur lors de la création de la flotte, absence de données des vaisseaux', "red", '?p=flotte');
|
|
else {
|
|
//Envoie de la flotte
|
|
$flotte = new flotte();
|
|
|
|
$sauv = $planete->vaisseaux; //Sauvegarde du contenu de la flotte avant lancement
|
|
$nbVais = 0;
|
|
foreach ($sess->values['vais'] as $key => $vaisseau){
|
|
if ($vaisseau > 0) {
|
|
if ($vaisseau > $planete->vaisseaux[$key]) erreur('Vous avez envoyé plus de vaisseaux que vous n\'en posséder sur cette planète.', "red", '?p=flotte');
|
|
else $nbVais += $vaisseau;
|
|
}
|
|
elseif ($vaisseau < 0) $vaisseau = 0;
|
|
|
|
$flotte->vaisseaux[$key] = $vaisseau;
|
|
$sauv[$key] -= $vaisseau;
|
|
}
|
|
|
|
if ($nbVais <= 0) erreur('Vous devez envoyer au moins un vaisseau pour former une flotte !', "red", '?p=flotte');
|
|
elseif (!isset($sess->values['flnbvais']) || $sess->values['flnbvais'] != $nbVais) erreur('Une erreur est survenue lors de la création de la flotte :<br /><br /><i>Calcul du nombre de vaisseaux incorrect !</i><br /><br />Si le problème perciste, <a href="mailto:'.$config['mailadmin'].'">contactez un administrateur</a>.', "red", '?p=flotte', 4500);
|
|
|
|
$flotte->nom = gpc('nomflotte', 'post');
|
|
$flotte->mission = $mission;
|
|
$flotte->start_planete = $planete;
|
|
$flotte->start_time = time();
|
|
|
|
//On traite le cas des planètes qui n'existent pas (dans le cas de la mission colonisation)
|
|
if ($mission == 2) $flotte->end_planete = $end_galaxie.':'.$end_ss.':'.$end_pos;
|
|
else $flotte->end_planete = $resultat['id'];
|
|
|
|
$calc = $flotte->calc_deplacement($planete->galaxie, $planete->ss, $planete->position, $end_galaxie, $end_ss, $end_pos, $vitesse, false, true);
|
|
$flotte->end_time = $calc[0];
|
|
$conso = $calc[1];
|
|
|
|
//On double la consomation si on fait un aller-retour
|
|
if ($mission == 1 || $mission == 2 || $mission == 4 || $mission == 5) $conso *= 2;
|
|
|
|
//On vérifie qu'il y a assez de place dans les cales des vaisseaux avant l'envoie ainsi que de ressources sur la planète
|
|
$flotte->calculer();
|
|
if ($flotte->contenuMax < ceil(gpc('metal', 'post')) + ceil(gpc('cristal', 'post')) + ceil(gpc('hydrogene', 'post')) + $conso) erreur('Vous ne pouvez pas embarquer autant de ressources, les cales débordent. '.$flotte->contenuMax, "red", '?p=flotte', 3500);
|
|
elseif ($planete->metal < ceil(gpc('metal', 'post')) || $planete->cristal < ceil(gpc('cristal', 'post')) || $planete->hydrogene < ceil(gpc('hydrogene', 'post')) + $conso) erreur('Vous n\'avez pas assez de ressources sur cette planète pour envoyer cette flotte.', "red", '?p=flotte', 3500);
|
|
else {
|
|
//if ($mission == 3) $flotte->tactique = gpc('tactique', 'post');
|
|
$flotte->contenu = array(floor(gpc('metal', 'post')), floor(gpc('cristal', 'post')), floor(gpc('hydrogene', 'post')));
|
|
$flotte->modifFlotte = "INSERT";
|
|
|
|
//On actualise la planète
|
|
$planete->metal -= floor(gpc('metal', 'post'));
|
|
$planete->cristal -= floor(gpc('cristal', 'post'));
|
|
$planete->hydrogene -= floor(gpc('hydrogene', 'post') + $conso);
|
|
$planete->vaisseaux = $sauv;
|
|
if (!in_array('vaisseaux', $planete->modif)) $planete->modif[] = 'vaisseaux';
|
|
|
|
unset($flotte);
|
|
unset($sess->values['vais']);
|
|
$sess->put();
|
|
|
|
erreur('Votre flotte a été envoyée avec succès.', "green", '?p=flotte', 4000);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
elseif (!empty($_POST['v0']) || !empty($_POST['v1']) || !empty($_POST['v2']) || !empty($_POST['v3']) || !empty($_POST['v4']) || !empty($_POST['v5']) || !empty($_POST['v6']) || !empty($_POST['v7']) || !empty($_POST['v8']) || !empty($_POST['v9']) || !empty($_POST['v10']) || !empty($_POST['v11']) || !empty($_POST['v12']) || !empty($_POST['v13'])) {
|
|
$nombreVaisseau = 0;
|
|
foreach ($planete->vaisseaux as $key => $vaisseau){
|
|
$v = gpc('v'.$key, 'post');
|
|
if (!is_numeric($v)) $v = 0;
|
|
else $v = (int)abs($v);
|
|
|
|
if ($vaisseau < $v) {
|
|
erreur('Il ne vous reste plus assez de vaisseaux !', "red", '?p=flotte');
|
|
}
|
|
|
|
$sess->values['vais'][$key] = $v;
|
|
$nombreVaisseau += $v;
|
|
}
|
|
//On vérifie que l'utilisateur a bien envoyé plus d'un vaisseau
|
|
if ($nombreVaisseau <= 0) erreur('Vous devez envoyer au moins un vaisseau.', "red", '?p=flotte');
|
|
|
|
//On enregistre les paramètres en session
|
|
$sess->values['flnbvais'] = $nombreVaisseau;
|
|
$sess->values['forceFlotte'] = false;
|
|
|
|
//Génération de la liste de mission possible avec les vaisseaux de la flotte
|
|
$missions = array("Stationner", "Transporter");
|
|
if ($sess->values['vais'][2]) $missions[2] = "Coloniser";
|
|
if ($planete->technologies[7] & 16) $missions[3] = "Attaquer";
|
|
if ($sess->values['vais'][3]) $missions[4] = "Recycler";
|
|
if ($sess->values['vais'][3] || $sess->values['vais'][3]) $missions[5] = "Espionner";
|
|
$template->assign('missions', $missions);
|
|
|
|
//On enregistre les modification de la session
|
|
$sess->values['fltime'] = time();
|
|
$sess->put();
|
|
|
|
$page = 'flotte2';
|
|
$template->assign('scripth', '<script src="js/prototype.js" type="text/javascript"></script>');
|
|
$template->assign('script', '<script type="text/javascript">document.getElementById(\'nom\').focus();</script><script src="js/flotte.js" type="text/javascript"></script>');
|
|
|
|
//TODO Ajouter les destinations favorites + Colonies
|
|
}
|
|
//Affichage du détail d'une flotte
|
|
elseif (!empty($_GET['n'])) {
|
|
$idN = ceil(gpc('n'));
|
|
|
|
$flotteN = new Flotte($idN);
|
|
$flotteN->load_planete();
|
|
|
|
if ($flotteN->id_flotte == 0 || $flotteN->start_planete->id_user != $planete->id_user) erreur('Impossible de trouver cette flotte !', "red", '?p=flotte', 1500);
|
|
else {
|
|
//Annulation de la mission
|
|
if (isset($_GET['a']) && isset($sess->values['ret_fleet']) && $_GET['a'] == $sess->values['ret_fleet']) {
|
|
//Calcul du temps passé depuis le lancement de la flotte
|
|
$tpsDD = time() - $flotteN->start_time;
|
|
if ($flotteN->mission == '6') erreur('Votre flotte est déjà en train de revenir !', 'red', '?p=flotte&n='.$idN, 1500);
|
|
elseif ($flotteN->end_time > $tpsDD) {
|
|
$bdd->query("UPDATE $table_flottes SET mission = '6', effectue = '1', end_time = '$tpsDD', end_galaxie = start_galaxie, end_ss = start_ss, end_position = start_position WHERE id_user = '$id_user' AND id = '$idN';");
|
|
header('Location: ?p=flotte&n='.$idN);
|
|
exit;
|
|
}
|
|
else erreur('Impossible d\'annuler la mission, elle a déjà commencée.', "red", '?p=flotte&n='.$idN, 1500);
|
|
}
|
|
|
|
$sess->values['ret_fleet'] = sha1('HB.fleet_'.rand().'☺ß☻');
|
|
$sess->put();
|
|
|
|
$template->assign('ret_fleet', $sess->values['ret_fleet']);
|
|
$template->assign('flotte', $flotteN);
|
|
$template->assign('nomvais', $nomvaisa);
|
|
$page = 'flotten';
|
|
}
|
|
}
|
|
//Affichage de la page générale
|
|
else {
|
|
//Mise à jour des tactiques par défaut
|
|
$attaque = gpc('attaque', 'post');
|
|
$defense = gpc('defense', 'post');
|
|
if (is_numeric($attaque) && is_numeric($defense)) {
|
|
$chang = false;
|
|
if (($attaque != $planete->combatAT_tactique) && (($attaque == 1 && $planete->technologies[3] & 4096) || ($attaque == 2 && $planete->technologies[3] & 8192) || ($attaque == 3 && $planete->technologies[3] & 16384) || $attaque == 0)) {
|
|
$planete->combatAT_tactique = $attaque;
|
|
if (!in_array('combatAT_tactique', $planete->modifUser)) $planete->modifUser[] = 'combatAT_tactique';
|
|
$chang = true;
|
|
}
|
|
if (($defense != $planete->combatDE_tactique) && (($defense == 1 && $planete->technologies[3] & 4096) || ($defense == 2 && $planete->technologies[3] & 8192) || ($defense == 3 && $planete->technologies[3] & 16384) || $defense == 0)) {
|
|
$planete->combatDE_tactique = $defense;
|
|
if (!in_array('combatDE_tactique', $planete->modifUser)) $planete->modifUser[] = 'combatDE_tactique';
|
|
$chang = true;
|
|
}
|
|
|
|
if ($chang) erreur('Tactiques mises à jour avec succès.', 'green', '?p=flotte', 1100);
|
|
}
|
|
|
|
//Affichage des flottes en cours dans la galaxie
|
|
$bdd->connexion();
|
|
$flottes = $bdd->query("SELECT * FROM $table_flottes WHERE id_user = '$id_user';");
|
|
$bdd->deconnexion();
|
|
$nbr = $bdd->num_rows;
|
|
|
|
$TEMP_flottesEC = array();
|
|
if ($flottes) {
|
|
foreach ($flottes as $flotte){
|
|
if ($flotte['mission'] != 1 && ($flotte['mission'] != 2 || $flotte['statut'] == '1') && $flotte['mission'] != 0) {
|
|
$retour = $flotte['start_galaxie'].':'.$flotte['start_ss'].':'.$flotte['start_position'];
|
|
$Hretour = date('d/m H:i:s',$flotte['start_time']+2*$flotte['end_time']);
|
|
}
|
|
/*elseif ($flotte['mission'] == 1) {
|
|
$retour = $flotte['start_galaxie'].':'.$flotte['start_ss'].':'.$flotte['start_position'];
|
|
if (empty($flotte['ret_time'])) $Hretour = '-';
|
|
else $Hretour = date('d/m H:i:s',$flotte['ret_time']+$flotte['end_time']);
|
|
}*/
|
|
else {
|
|
$retour = '-';
|
|
$Hretour = '-';
|
|
}
|
|
|
|
$end_planete = new Planete($flotte['end_planete']);
|
|
|
|
if ($flotte['mission'] == 2) {
|
|
preg_match('#^\[?([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})\]?$#', $flotte['mission'], $position);
|
|
$TEMP_flottesEC[] = array($flotte['id'], $flotte['nom'], txtmission($flotte['mission']), $flotte['nb_vais'], ' ['.$position[1].':'.$position[2].':'.$position[3].']', date('d/m H:i:s',$flotte['start_time']+$flotte['end_time']), $retour, $Hretour);
|
|
}
|
|
else $TEMP_flottesEC[] = array($flotte['id'], $flotte['nom'], txtmission($flotte['mission']), $flotte['nb_vais'], $end_planete->nom_planete.' ['.$end_planete->galaxie.':'.$end_planete->ss.':'.$end_planete->position.']', date('d/m H:i:s',$flotte['start_time']+$flotte['end_time']), $retour, $Hretour);
|
|
}
|
|
}
|
|
$template->assign('flottesEC', $TEMP_flottesEC);
|
|
|
|
//Affichage des vaisseaux disponible à l'envoie
|
|
$TEMP_vaisseaux = array();
|
|
foreach ($planete->vaisseaux as $key => $vaisseau){
|
|
//On affiche uniquement les vaisseaux que l'on possède hormis la station spatiale
|
|
if ($vaisseau > 0) $TEMP_vaisseaux[] = array($nomvaisn[$key], separerNombres($vaisseau), $vaisseau, $key);
|
|
}
|
|
$template->assign('vaisseaux', $TEMP_vaisseaux);
|
|
|
|
//Calcul du nombre de slot disponible et vérouillage de l'envoie si besoin
|
|
if ($nbr <= ceil(count($queryPlanetes)/2 + 1)) $template->assign('action', '<input class="submit" type="submit" value="OK" />');
|
|
else $template->assign('action', '<span class="lack">Nombre de flottes maximum simultanées atteint</span>');
|
|
|
|
$template->assign('nbflotte', $nbr);
|
|
$template->assign('nbflottemax', ceil(count($queryPlanetes)/2 + 1));
|
|
|
|
//Modification des tactiques
|
|
$tactiques = array('1');
|
|
$attaqueT = 0;
|
|
$defenseT = 0;
|
|
if ($planete->technologies[3] & 4096) $tactiques[] = '2';
|
|
if ($planete->technologies[3] & 8192) $tactiques[] = '3';
|
|
if ($planete->technologies[3] & 16384) $tactiques[] = '4';
|
|
|
|
$template->assign('tactiques', $tactiques);
|
|
|
|
$page = 'flotte1';
|
|
}
|
|
?>
|