300 lines
16 KiB
PHP
300 lines
16 KiB
PHP
<?php
|
|
set_time_limit(0);
|
|
|
|
/* ! ATTENTION ! NE PAS FAIRE DE REFERENCE A UNE DONNEE DU FICHIER BDD.PHP OU
|
|
* DE L'UTILISATEUR COURANT CAR LE SCRIPT EST LANCE PAR L'ATTAQUANT ET PAR
|
|
* L'ATTAQUé.
|
|
*/
|
|
|
|
require_once('Class/class.rapport.php');
|
|
|
|
function resteVaisseau($tableau){
|
|
$ct = count($tableau);
|
|
for ($i = 0; $i < $ct; $i++) {
|
|
if (!empty($tableau[$i])) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
$Hgalaxie = $queryPlanete["galaxie"];
|
|
$Hss = $queryPlanete["ss"];
|
|
$Hposition = $queryPlanete["position"];
|
|
|
|
$table = $config['db_prefix'].'flottes';
|
|
$req = $chapeau->query("SELECT * FROM `$table` WHERE `id_user` = '$id_user' OR (`end_galaxie` = '$Hgalaxie' AND `end_ss` = '$Hss' AND `end_position` = '$Hposition')");
|
|
for ($i=0 ; $i<$chapeau->num_rows ; $i++) {
|
|
$resultat = $req[$i];
|
|
$id_flotte = $resultat['id'];
|
|
$mission = $resultat['mission'];
|
|
$end_galaxie = $resultat['end_galaxie'];
|
|
$end_ss = $resultat['end_ss'];
|
|
$end_position = $resultat['end_position'];
|
|
$temps = $resultat['start_time'] + $resultat['end_time'];
|
|
if ($resultat['effectue'] != 1 && time() >= $resultat['start_time'] + $resultat['end_time'] && !empty($resultat['end_time'])) {
|
|
|
|
//Mission attaquer
|
|
if ($mission == 1) {
|
|
require_once('Class/class.combat.php');
|
|
$table = $config['db_prefix'].'planete';
|
|
$resultatT = $chapeau->unique_query("SELECT `debris_met`, `debris_cri` FROM `$table` WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
|
|
if ($resultat['effectue'] == 2) {
|
|
$table = $config['db_prefix'].'flottes_combats';
|
|
$resultatC = $chapeau->unique_query("SELECT * FROM `$table` WHERE `refflotte` = '$id_flotte'");
|
|
if (!$resultatC) die('Erreur dans le script de combat, <a href="mailto:admin@halo-battle.s-fr.com">contactez d\'urgence un administrateur</a> !');
|
|
if (time() >= $resultatC['timestamp']) {
|
|
//On récupère le combat
|
|
$combat = unserialize($resultatC['serialize']);
|
|
|
|
//Mise à jour des tactiques
|
|
if (!empty($resultatC['tactiqueAT'])) $combat->changerTactiqueAT($resultatC['tactiqueAT']);
|
|
if (!empty($resultatC['tactiqueEN'])) $combat->changerTactiqueEN($resultatC['tactiqueEN']);
|
|
|
|
while($combat->timestamp <= time()) {
|
|
//On passe le tour
|
|
$combat->Ntour++;
|
|
|
|
//Détermine qui est le tour : attaquant ou défenseur
|
|
if (floor($combat->Ntour/2) == $combat->Ntour/2) { //Le tour est paire : tour attaquant
|
|
$arraytactique = tactique($combat->ATtactique);
|
|
if (@$combat->attaquerVais($combat->calcAttaque($arraytactique[2] + $combat->regenereBC($arraytactique[1], true, !$arraytactique[3]), true), true) == 0) { //Attaquant vainceur
|
|
mysql_query("DELETE FROM `flottes_combats` WHERE `refflotte` = '$id_flotte'");
|
|
mysql_query("UPDATE `flottes` SET ".$combat->exportAT(true).", `effectue` = '1', `ret_time` = ".$combat->timestamp." WHERE `id` = '$id_flotte'");
|
|
mysql_query("UPDATE `planete` SET ".$combat->exportEN()." WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
$send = $combat->genRapport(true, true);
|
|
}
|
|
else $send = $combat->genRapport(false);
|
|
}
|
|
else { //Le tour est impaire : tour défenseur
|
|
$arraytactique = tactique($combat->ENtactique);
|
|
if (@$combat->attaquerVais($combat->calcAttaque($arraytactique[2] + $combat->regenereBC($arraytactique[1], false, !$arraytactique[3]), false), false) == 0) { //Défenseur vainceur
|
|
mysql_query("DELETE FROM `flottes_combats` WHERE `refflotte` = '$id_flotte'");
|
|
mysql_query("DELETE FROM `flottes` WHERE `id` = '$id_flotte'");
|
|
mysql_query("UPDATE `planete` SET ".$combat->exportEN()." WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
$send = $combat->genRapport(true, false);
|
|
}
|
|
else $send = $combat->genRapport(false);
|
|
}
|
|
|
|
//On envoie les rapports aux joueurs concernés
|
|
$temps = $combat->timestamp;
|
|
mysql_query("INSERT INTO `mail` VALUES(NULL, '1', '".trouvNom($send[2])."', '', 'Combat', '".$send[0]."', '$temps')") or die ("erreur sql ".mysql_error());
|
|
mysql_query("INSERT INTO `mail` VALUES(NULL, '1', '".trouvNom($send[3])."', '', 'Combat', '".$send[1]."', '$temps')") or die ("erreur sql ".mysql_error());
|
|
|
|
//Prévision du prochain tour
|
|
$combat->timestamp += 300;
|
|
}
|
|
$timestamp_suite = $combat->timestamp;
|
|
|
|
$debriM = $combat->debriM + $resultatT['debris_met'];
|
|
$debriC = $combat->debriC + $resultatT['debris_cri'];
|
|
|
|
$combat->debriM = 0;
|
|
$combat->debriC = 0;
|
|
|
|
//On sérialise la classe pour l'exporter
|
|
$serialise = serialize($combat);
|
|
|
|
//On enregistre le combat dans la base de données
|
|
mysql_query("UPDATE `flottes_combats` SET `serialize` = '$serialise', `tactiqueAT` = '0', `tactiqueEN` = '0', `timestamp` = '$timestamp_suite' WHERE `refflotte` = '$id_flotte'");
|
|
mysql_query("UPDATE `planete` SET `debris_met` = '$debriM', `debris_cri` = '$debriC' WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
}
|
|
}
|
|
else {
|
|
//On place la flotte en attente
|
|
$table = $config['db_prefix'].'flottes';
|
|
$chapeau->query("UPDATE `$table` SET `effectue` = '2' WHERE `id` = '$id_flotte'");
|
|
|
|
//On trouve les variables nécessaire pour le combat : vaisseaux, défenses, ...
|
|
$table = $config['db_prefix'].'planete';
|
|
$resultatDef = $chapeau->unique_query("SELECT * FROM `$table` WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
|
|
//On déclare le combat
|
|
$combat = new Combat($resultat, $resultatDef, $resultatDef);
|
|
|
|
//Définition des tactiques par défaut pour les deux combatants
|
|
$table = $config['db_prefix'].'user';
|
|
|
|
$resultatU = $chapeau->unique_query("SELECT `combatAT_tactique` FROM `$table` WHERE `id` = '".$resultat['id_user']."'");
|
|
if (empty($resultat['tactiqueAT'])) $combat->changerTactiqueAT($resultatU['combatAT_tactique']);
|
|
else $combat->changerTactiqueAT($resultat['tactiqueAT']);
|
|
|
|
$resultatU = mysql_query("SELECT combatDE_tactique FROM `$table` WHERE `id` = '".$resultatDef['id_user']."'");
|
|
if (empty($resultat['tactiqueEN'])) $combat->changerTactiqueEN($resultatU['combatDE_tactique']);
|
|
else $combat->changerTactiqueEN($resultat['tactiqueEN']);
|
|
|
|
//Lancement de l'attaque
|
|
if (@$combat->attaquerVais($combat->calcAttaque(100,true),true) == 0) { //Attaquant vainceur
|
|
mysql_query("DELETE FROM `flottes_combats` WHERE `refflotte` = '$id_flotte'");
|
|
mysql_query("UPDATE `flottes` SET ".$combat->exportAT(true).", `effectue` = '1', `ret_time` = ".$combat->timestamp." WHERE `id` = '$id_flotte'");
|
|
mysql_query("UPDATE `planete` SET ".$combat->exportEN()." WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
$send = $combat->genRapport(true, true);
|
|
}
|
|
else $send = $combat->genRapport(false);
|
|
|
|
//On envoie les rapports aux joueurs concernés
|
|
$temps = $combat->timestamp;
|
|
mysql_query("INSERT INTO `mail` VALUES(NULL, '1', '".trouvNom($send[2])."', '', 'Combat', '".$send[0]."', '$temps')");
|
|
mysql_query("INSERT INTO `mail` VALUES(NULL, '1', '".trouvNom($send[3])."', '', 'Combat', '".$send[1]."', '$temps')");
|
|
|
|
|
|
//Prévision du prochain tour
|
|
$combat->timestamp += 300;
|
|
$timestamp_suite = $combat->timestamp;
|
|
|
|
$debriM = $combat->debriM + $resultatT['debris_met'];
|
|
$debriC = $combat->debriC + $resultatT['debris_cri'];
|
|
|
|
$combat->debriM = 0;
|
|
$combat->debriC = 0;
|
|
|
|
//On sérialise la classe pour l'exporter
|
|
$serialise = serialize($combat);
|
|
|
|
//On enregistre le combat dans la base de données
|
|
mysql_query("INSERT INTO `flottes_combats` VALUES(NULL, '".$resultat['id']."', '$timestamp_suite', '$serialise', '0', '0')");
|
|
mysql_query("UPDATE `planete` SET `debris_met` = '$debriM', `debris_cri` = '$debriC' WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
}
|
|
}
|
|
//Mission Transporter
|
|
elseif ($mission == 2) {
|
|
$table = $config['db_prefix'].'planete';
|
|
$resultatT = $chapeau->unique_query("SELECT `metal`, `cristal`, `hydrogene` FROM `$table` WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
$Cmetal = $resultat['contenu_metal'] + $resultatT['metal'];
|
|
$Ccristal = $resultat['contenu_cristal'] + $resultatT['cristal'];
|
|
$Chydrogene = $resultat['contenu_hydrogene'] + $resultatT['hydrogene'];
|
|
$table = $config['db_prefix'].'planete';
|
|
$chapeau->query("UPDATE `$table` SET `metal` = '$Cmetal', `cristal` = '$Ccristal', `hydrogene` = '$Chydrogene' WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
$table = $config['db_prefix'].'flottes';
|
|
$chapeau->query("UPDATE `$table` SET `effectue` = '1', `contenu_metal` = '0', `contenu_cristal` = '0', `contenu_hydrogene` = '0' WHERE `id` = '$id_flotte'");
|
|
|
|
$message = mysql_real_escape_string('Vos vaisseaux ont déposés '.$resultat['contenu_metal'].' de métal, '.$resultat['contenu_cristal'].' de cristal et '.$resultat['contenu_hydrogene'].' d\'hydrogène aux coordonnées '.$end_galaxie.':'.$end_ss.':'.$end_position);
|
|
$chapeau->query("INSERT INTO mail VALUES('', '1', '".trouvNom($id_user)."', '', 'Transport', '$message', '$temps')");
|
|
}
|
|
//Mission Coloniser
|
|
elseif ($mission == 3) {
|
|
$table = $config['db_prefix'].'planete';
|
|
$chapeau->query("SELECT * FROM `$table` WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
if (!$chapeau->num_rows > 0) {
|
|
$time = time();
|
|
$cases = mt_rand(125,222);
|
|
$image = mt_rand(1,15);
|
|
$Cmetal = $resultat['contenu_metal'] + 1000;
|
|
$Ccristal = $resultat['contenu_cristal'] + 700;
|
|
$Chydrogene = $resultat['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 planete (`id_user`, `isolement`, `nom_planete`, `galaxie`, `ss`, `position`, `image`, `cases`, `timestamp`, `metal`, `cristal`, `hydrogene`) VALUES ('$id_user', '$debut $fin', 'Planète colonisée', '$end_galaxie', '$end_ss', '$end_position', '$image', '$cases', '$time', '$Cmetal', '$Ccristal', '$Chydrogene')");
|
|
|
|
if ($resultat['nb_vais'] == 1) {
|
|
$resultat['nb_vais'] = -1;
|
|
$chapeau->query("DELETE FROM `flottes` WHERE `id` = '$id_flotte'");
|
|
}
|
|
else $chapeau->query("UPDATE `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'");
|
|
|
|
$message = 'Votre vaisseau a atteint la planète ['.$end_galaxie.':'.$end_ss.':'.$end_position.'] et commence la colonisation';
|
|
$chapeau->query("INSERT INTO `mail` VALUES('', '1', '".trouvNom($resultat['id_user'])."', '', 'Colonisation', '$message', '$temps')");
|
|
}
|
|
else $chapeau->query("INSERT INTO `mail` VALUES('', '1', '".trouvNom($resultat['id_user'])."', '', 'Colonisation', 'Nous n''avons pas pu coloniser la planète [$end_galaxie:$end_ss:$end_position] car lorsque nous sommes arrivé sur place, elle était déjà colonisée.', '$temps')");
|
|
}
|
|
//Mission Recycler
|
|
elseif ($mission == 4) {
|
|
$resultatT = $chapeau->unique_query("SELECT * FROM `planete` WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
if ($resultatT) {
|
|
$resultat['contenu_max'] -= (vais_conso($resultat['end_time'], count($resultat['nb_vais']))*$resultat['vitesse']*5) + $resultat['contenu_metal'] + $resultat['contenu_cristal'] + $resultat['contenu_hydrogene'];
|
|
|
|
$debris_met = $resultatT['debris_met'];
|
|
$debris_cri = $resultatT['debris_cri'];
|
|
$capacite = $resultat['contenu_max'];
|
|
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 + $resultat['contenu_metal'];
|
|
$Ccristal = $b + $resultat['contenu_cristal'];
|
|
$debris_met -= $a;
|
|
$debris_cri -= $b;
|
|
|
|
$chapeau->query("UPDATE `flottes` SET `effectue` = '1', `contenu_metal` = '$Cmetal', `contenu_cristal` = '$Ccristal' WHERE `id` = '$id_flotte'");
|
|
$chapeau->query("UPDATE `planete` SET `debris_met` = '$debris_met', `debris_cri` = '$debris_cri' WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
|
|
$message = 'Vos vaisseaux récoltent '.$a.' de métal et '.$b.' de cristal aux coordonnées '.$end_galaxie.':'.$end_ss.':'.$end_position;
|
|
$chapeau->query("INSERT INTO mail VALUES('', '1', '".trouvNom($resultat['id_user'])."', '', 'Recyclage', '$message', '$temps')");
|
|
}
|
|
}
|
|
elseif ($mission == 5) {
|
|
$nbsondes = $resultat['vaisseau_3'];
|
|
$resultatT = $chapeau->unique_query("SELECT * FROM `planete` WHERE `galaxie` = '$end_galaxie' AND `ss` = '$end_ss' AND `position` = '$end_position'");
|
|
$id_user = $resultatT['id_user'];
|
|
$id_att = $resultat['id_user'];
|
|
$resultatUD = $chapeau->unique_query("SELECT * FROM `user` WHERE `id` = '$id_user';");
|
|
$resultatUA = $chapeau->unique_query("SELECT * FROM `user` WHERE `id` = '$id_att';");
|
|
|
|
$diffNiveau = $resultatUA['detection'] - $resultatUD['detection'] + floor($nbsondes/2);
|
|
$rapport = new Rapport($mission, $id_att, $id_user, $resultat['start_time'] + $resultat['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);
|
|
|
|
$chapeau->query("UPDATE `flottes` SET `effectue` = '1' WHERE `id` = '$id_flotte'");
|
|
$rapport->send();
|
|
}
|
|
}
|
|
if ($resultat['nb_vais'] >= 0 && time() >= $resultat['start_time'] + $resultat['end_time'] * 2 && !empty($resultat['end_time']) && $resultat['mission'] != 0 && ($resultat['mission'] != 1 || (!empty($resultat['ret_time']) && time() >= $resultat['ret_time'] + $resultat['end_time']))) {
|
|
$start_galaxie = $resultat['start_galaxie'];
|
|
$start_ss = $resultat['start_ss'];
|
|
$start_position = $resultat['start_position'];
|
|
$id_flotte = $resultat['id'];
|
|
$reqP = mysql_query("SELECT * FROM planete WHERE `id_user` = '$id_user' AND `galaxie` = '$start_galaxie' AND `ss` = '$start_ss' AND `position` = '$start_position'") or die ("erreur sql ".mysql_error());
|
|
$resultatP = mysql_fetch_array($reqP);
|
|
$metal = $resultat['contenu_metal'] + $resultatP['metal'];
|
|
$cristal = $resultat['contenu_cristal'] + $resultatP['cristal'];
|
|
$hydrogene = $resultat['contenu_hydrogene'] + $resultatP['hydrogene'];
|
|
for($i = 1; $i <= 12; $i++) {
|
|
${'Pvaisseaux_'.$i} = $resultatP['vaisseau_'.$i] + $resultat['vaisseau_'.$i];
|
|
mysql_query("UPDATE `planete` SET `vaisseau_$i` = '${'Pvaisseaux_'.$i}' WHERE `id_user` = '$id_user' AND `galaxie` = '$start_galaxie' AND `ss` = '$start_ss' AND `position` = '$start_position'");
|
|
}
|
|
mysql_query("UPDATE `planete` SET `metal` = '$metal', `cristal` = '$cristal', `hydrogene` = '$hydrogene' WHERE `id_user` = '$id_user' AND `galaxie` = '$start_galaxie' AND `ss` = '$start_ss' AND `position` = '$start_position'");
|
|
mysql_query("DELETE FROM `flottes` WHERE `id_user` = '$id_user' AND `id` = '$id_flotte'");
|
|
}
|
|
}
|
|
?>
|