2008-11-17 11:00:00 +00:00
< ? 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 " ];
2008-12-01 11:00:00 +00:00
$queryFlottes = $chapeau -> query ( " SELECT * FROM ` $table_flottes ` WHERE `id_user` = ' $id_user ' OR (`end_galaxie` = ' $Hgalaxie ' AND `end_ss` = ' $Hss ' AND `end_position` = ' $Hposition '); " );
2008-11-30 11:00:00 +00:00
$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' ];
2008-12-01 11:00:00 +00:00
$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' ];
2008-11-30 11:00:00 +00:00
//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' ])) {
2008-12-01 11:00:00 +00:00
//Mission Attaquer
2008-11-17 11:00:00 +00:00
if ( $mission == 1 ) {
require_once ( 'Class/class.combat.php' );
2008-12-01 11:00:00 +00:00
//On regarde si le combat a déjà commencé
2008-11-30 11:00:00 +00:00
if ( $queryFlottes [ $i ][ 'effectue' ] == 2 ) {
2008-12-01 11:00:00 +00:00
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' ]);
2008-11-17 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
else continue ;
2008-11-17 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
else die ( 'Erreur dans le script de combat, <a href="mailto:admin@halo-battle.s-fr.com">contactez d\'urgence un administrateur</a> !' );
2008-11-17 11:00:00 +00:00
}
else {
2008-12-01 11:00:00 +00:00
//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 '; " );
}
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
while ( $combat -> timestamp <= time ()) {
//Préparation du rapport
$rapport = new Rapport ( $mission , $queryFlottes [ $i ][ 'id_user' ], $queryEN [ 'id_user' ], $combat -> timestamp );
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
$combat -> Ntour ++ ;
2008-11-30 11:00:00 +00:00
$rapport -> addInfo ( $combat -> ATvais , 0 );
$rapport -> addInfo ( $combat -> ENvais , 1 );
$rapport -> addInfo ( $combat -> ENdef , 2 );
$rapport -> addInfo ( $combat -> Ntour , 3 );
2008-12-01 11:00:00 +00:00
$rapport -> addInfo ( $queryEN , 4 );
2008-11-30 11:00:00 +00:00
$rapport -> addInfo ( $queryFlottes [ $i ], 5 );
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
//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 );
2008-11-30 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
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 );
2008-11-17 11:00:00 +00:00
}
2008-11-30 11:00:00 +00:00
$rapport -> addInfo ( $combat -> ATvais , 7 );
$rapport -> addInfo ( $combat -> ENvais , 8 );
$rapport -> addInfo ( $combat -> ENdef , 9 );
2008-11-17 11:00:00 +00:00
//Prévision du prochain tour
$combat -> timestamp += 300 ;
2008-11-30 11:00:00 +00:00
$rapport -> addInfo ( $combat -> timestamp , 10 );
2008-12-01 11:00:00 +00:00
$rapport -> addInfo ( $combat -> pillage , 11 );
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
//On envoie les rapports aux joueurs concernés
$rapport -> send ();
}
$debriM = $combat -> debriM + $queryEN [ 'debris_met' ];
$debriC = $combat -> debriC + $queryEN [ 'debris_cri' ];
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
$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 '; " );
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
if ( ! $rapport -> var [ 6 ][ 0 ]) { //Si le combat n'est pas terminé
2008-11-17 11:00:00 +00:00
//On sérialise la classe pour l'exporter
$serialise = serialize ( $combat );
//On enregistre le combat dans la base de données
2008-12-01 11:00:00 +00:00
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'); " );
2008-11-17 11:00:00 +00:00
}
}
//Mission Transporter
elseif ( $mission == 2 ) {
2008-12-01 11:00:00 +00:00
$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 '; " );
2008-11-30 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
$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 ();
2008-11-17 11:00:00 +00:00
}
//Mission Coloniser
elseif ( $mission == 3 ) {
2008-12-01 11:00:00 +00:00
$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 );
2008-11-17 11:00:00 +00:00
$time = time ();
$cases = mt_rand ( 125 , 222 );
$image = mt_rand ( 1 , 15 );
2008-11-30 11:00:00 +00:00
$Cmetal = $queryFlottes [ $i ][ 'contenu_metal' ] + 1000 ;
$Ccristal = $queryFlottes [ $i ][ 'contenu_cristal' ] + 700 ;
$Chydrogene = $queryFlottes [ $i ][ 'contenu_hydrogene' ];
2008-11-17 11:00:00 +00:00
//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 ;
2008-12-01 11:00:00 +00:00
$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 '); " );
2008-11-17 11:00:00 +00:00
2008-11-30 11:00:00 +00:00
if ( $queryFlottes [ $i ][ 'nb_vais' ] == 1 ) {
$queryFlottes [ $i ][ 'nb_vais' ] = - 1 ;
$chapeau -> query ( " DELETE FROM ` $table_flottes ` WHERE `id` = ' $id_flotte ' " );
2008-11-17 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
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 '; " );
2008-11-17 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
$rapport -> send ();
2008-11-17 11:00:00 +00:00
}
//Mission Recycler
elseif ( $mission == 4 ) {
2008-12-01 11:00:00 +00:00
$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' ];
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
$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 ;
2008-11-17 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
else if ( $a > $debris_met ) {
2008-11-17 11:00:00 +00:00
$a = $debris_met ;
2008-12-01 11:00:00 +00:00
$b = ( $capacite - $a );
if ( $b > $debris_cri ) $b = $debris_cri ;
}
else if ( $b > $debris_cri ) {
2008-11-17 11:00:00 +00:00
$b = $debris_cri ;
2008-12-01 11:00:00 +00:00
$a = ( $capacite - $b );
if ( $a > $debris_met ) $a = $debris_met ;
2008-11-17 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
}
else {
$a = $debris_met ;
$b = $debris_cri ;
}
$Cmetal = $a + $queryFlottes [ $i ][ 'contenu_metal' ];
$Ccristal = $b + $queryFlottes [ $i ][ 'contenu_cristal' ];
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
$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 '; " );
2008-11-17 11:00:00 +00:00
2008-12-01 11:00:00 +00:00
$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 ();
2008-11-17 11:00:00 +00:00
}
2008-12-01 11:00:00 +00:00
//Mission Espionnage
2008-11-17 11:00:00 +00:00
elseif ( $mission == 5 ) {
2008-12-01 11:00:00 +00:00
$chapeau -> query ( " UPDATE ` $table_flottes ` SET `effectue` = '1' WHERE `id` = ' $id_flotte '; " );
2008-11-30 11:00:00 +00:00
$nbsondes = $queryFlottes [ $i ][ 'vaisseau_3' ];
2008-12-01 11:00:00 +00:00
$id_userT = $queryEN [ 'id_user' ];
2008-11-30 11:00:00 +00:00
$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 '; " );
2008-11-17 11:00:00 +00:00
$diffNiveau = $resultatUA [ 'detection' ] - $resultatUD [ 'detection' ] + floor ( $nbsondes / 2 );
2008-12-01 11:00:00 +00:00
$rapport = new Rapport ( $mission , $id_att , $id_userT , $end_time );
2008-11-17 11:00:00 +00:00
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 ();
}
}
2008-12-01 11:00:00 +00:00
//Si la flotte a terminé son retour
if ( $queryFlottes [ $i ][ 'nb_vais' ] >= 0 && $queryFlottes [ $i ][ 'effectue' ]) {
2008-11-30 11:00:00 +00:00
$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' ];
2008-12-01 11:00:00 +00:00
$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 '; " );
}
2008-11-17 11:00:00 +00:00
}
}
}
?>