Version 1.12

This commit is contained in:
nemunaire 2009-11-01 12:00:00 +01:00
commit de31cd3e9a
1373 changed files with 156282 additions and 45238 deletions

View file

@ -0,0 +1,128 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$titre = 'Bourse';
include_once(_FCORE."../game/Class/class.bourse.php");
define('MAX_ACTION_PAR_JOUR', 5);
erreur('Arrêtez de tester la bourse, on attend le nouveau script !');
/*if (date('G') < 7 && date('G') >= 0 && date('w') != 0 && date('w') != 6 && $queryUser['auth_level'] < 3)
erreur('La bourse est actuellement fermée !<br />Réouverture à 7h00', "orange");
else*/if ($queryPlanetes[0]['id'] != $planete->id)
erreur('Vous devez être sur votre planète mère pour utiliser la bourse.');
else {
$a = gpc('a');
$v = gpc('v');
$nb = gpc('a'.$a.$v, 'post');
if ($nb < 0) erreur("Vous ne pouvez pas acheter ou vendre un nombre négatif d'action !", "red", "?p=bourse");
if (!empty($a) && is_numeric($nb)) {
$action = new Bourse($a, $id_user);
$poss24 = $action->actionIn24Hours();
if ($poss24 + $nb > MAX_ACTION_PAR_JOUR) erreur('Vous ne pouvez pas acheter plus de 5 mêmes actions dans les mêmes 24h.');
$ressources = $action->prixAchat($nb);
if ($ressources[0] > $planete->metal || $ressources[1] > $planete->cristal) erreur('Vous n\'avez pas assez de ressources pour acheter '.$nb.' actions.');
$action->addAction($nb);
$planete->metal -= $ressources[0];
$planete->cristal -= $ressources[1];
header('Location: ?p=bourse&d='.$a);
exit;
}
elseif (!empty($v) && is_numeric($nb)) {
$action = new Bourse($v, $id_user);
$ressources = $action->delAction($nb);
$planete->metal += $ressources[0];
$planete->cristal += $ressources[1];
header('Location: ?p=bourse&d='.$v);
exit;
}
elseif (gpc('e') && $planete->auth_level >= 3) {
$e = gpc('e');
if (isset($_POST['nomaction']) && isset($_POST['descaction'])) {
$nom = gpc('nomaction', 'post');
$description = gpc('descaction', 'post');
$bdd->connexion();
$bdd->escape($nom);
$bdd->escape($description);
$bdd->escape($e);
$bdd->query("UPDATE $table_bourse SET description = '$description', nom = '$nom' WHERE id = $e;");
$bdd->deconnexion();
}
elseif (isset($_POST['prixAM']) && isset($_POST['prixAC'])) {
$prixAM = gpc('prixAM', 'post');
$prixAC = gpc('prixAC', 'post');
$bdd->connexion();
$bdd->escape($prixAM);
$bdd->escape($prixAC);
$bdd->escape($e);
$bdd->query("UPDATE $table_bourse SET metal = $prixAM, cristal = $prixAC WHERE id = $e;");
$bdd->deconnexion();
}
elseif (isset($_POST['newsaction'])) {
$news = gpc('newsaction', 'post');
$time = time();
$bdd->connexion();
$bdd->escape($news);
$bdd->escape($e);
$bdd->query("UPDATE $table_bourse SET news = '$news', timeDesc = '$time' WHERE id = $e;");
$bdd->deconnexion();
}
header('Location: ?p=bourse&d='.$e);
exit;
}
elseif (gpc('c') == "new" && $planete->auth_level >= 3 && is_numeric(gpc('prixAM', 'post')) && is_numeric(gpc('prixAC', 'post'))) {
if (isset($_POST['nomaction']) && isset($_POST['descaction'])) {
$nom = gpc('nomaction', 'post');
$description = gpc('descaction', 'post');
$prixAM = gpc('prixAM', 'post');
$prixAC = gpc('prixAC', 'post');
$news = gpc('newsaction', 'post');
$time = time();
$bdd->connexion();
$bdd->escape($nom);
$bdd->escape($description);
$bdd->escape($prixAM);
$bdd->escape($prixAC);
$bdd->escape($news);
if (!empty($news)) $bdd->query("INSERT INTO $table_bourse (nom, description, news, timeDesc, metal, cristal) VALUES ('$nom', '$description', '$news', '$time', '$prixAM', '$prixAC');");
else $bdd->query("INSERT INTO $table_bourse (nom, description, metal, cristal) VALUES ('$nom', '$description', '$prixAM', '$prixAC');");
$bdd->deconnexion();
}
header('Location: ?p=bourse');
exit;
}
elseif ($d = gpc('d')) {
$action = new Bourse($d, $id_user);
$template->assign('taxeA', $action->taxeA);
$template->assign('taxeV', $action->taxeV);
$template->assign('poss', $action->action());
$template->assign('poss24', $action->actionIn24Hours());
$action = null;
$bdd->connexion();
$bdd->escape($d);
$bourse = $bdd->unique_query("SELECT id, nom, description, news, metal, cristal, (metal/metalAnc-1)*100 AS evolution FROM $table_bourse WHERE id = $d;");
$bdd->deconnexion();
if ($bourse) {
$page = 'bourseDetails';
$template->assign('bourse', $bourse);
}
else erreur('Cette action n\'existe pas !', "red", '?p=bourse');
}
else {
$bdd->connexion();
$infos = $bdd->query("SELECT id, nom, news AS description FROM $table_bourse WHERE news != '' ORDER BY timeDesc DESC LIMIT 7;");
$bourse = $bdd->query("SELECT id, nom, metal, cristal, (metal/metalAnc-1)*100 AS evolution FROM $table_bourse;");
$bdd->deconnexion();
$page = 'bourse';
$template->assign('bourse', $bourse);
$template->assign('infos', $infos);
}
}
?>

View file

@ -11,22 +11,24 @@ $alli = $bdd->unique_query("SELECT * FROM $table_alliances WHERE id = '".$planet
$radar = array();
$nbPlan = count($queryPlanetes);
$detect = $planete->technologies[1]*1800;
for($i = 0; $i < $nbPlan; $i++){
/*for($i = 0; $i < $nbPlan; $i++){
$end_galaxie = $queryPlanetes[$i]['galaxie'];
$end_ss = $queryPlanetes[$i]['ss'];
$end_position = $queryPlanetes[$i]['position'];
$radar[] = array($bdd->query("SELECT F.mission, F.start_galaxie, F.start_ss, F.start_position, F.start_time, F.end_time, F.start_time + F.end_time - ".time()." AS arrive_time, P.nom_planete, U.pseudo FROM $table_flottes F INNER JOIN $table_planete P ON P.galaxie = F.start_galaxie AND P.ss = F.start_ss AND P.position = F.start_position INNER JOIN $table_user U ON U.id = P.id_user WHERE F.effectue != '1' AND F.end_galaxie = '$end_galaxie' AND F.end_ss = '$end_ss' AND F.end_position = '$end_position' AND F.id_user != $id_user AND F.start_time + F.end_time - ".time()." <= $detect;"), array($queryPlanetes[$i]['nom_planete'], $queryPlanetes[$i]['galaxie'], $queryPlanetes[$i]['ss'], $queryPlanetes[$i]['position']));
}
}*/
$bdd->deconnexion();
//Affichage des informations sur la planète
$diametre = separerNombres($planete->cases * 92);
$Classpoints = separerNombres($planete->points);
if (SURFACE == "planete") {
//Affichage des informations sur la planète
$diametre = separerNombres($planete->cases * 92);
$Classpoints = separerNombres($planete->points);
$template->assign('diametre',$diametre);
$template->assign('points',$Classpoints);
}
$template->assign('mail', $queryMail);
$template->assign('radar',$radar);
$template->assign('diametre',$diametre);
$template->assign('points',$Classpoints);
$template->assign('alliance', $alli);
?>

View file

@ -53,8 +53,8 @@ elseif (!empty($_GET['d'])) {
}
else {
$chapeau->connexion();
$req = $chapeau->query("SELECT * FROM $table_infoshead;");
$req = $chapeau->query("SELECT * FROM $table_infoshead ORDER BY id ASC;");
$chapeau->deconnexion();
$template->assign('tableau', $req);
}
?>
?>

View file

@ -4,12 +4,11 @@ $page = 'batiments';
$titre = 'Batiments';
$TEMP_batiments = array();
$nbstop = count($batiment);
//Lancement d'une nouvelle construction
if (isset($_GET['c'])) {
//Vérification que la planète ne soit pas pleine
if ($planete->casesRest <= 0) erreur('Vous n\'avez plus de place sur votre planète.', "red", "?p=batiments", 3500);
if ($planete->casesRest - count($planete->file_bat) + 1 <= 0) erreur('Vous n\'avez plus de place sur votre planète.', "red", "?p=batiments", 3500);
//On vérifie qu'il n'y ait pas de technologie en cours de recherche si l'on veut améliorer le centre de recherche
if($_GET['c'] == 6 && !empty($planete->file_tech[1])) erreur('Une technologie est en cours de recherche dans votre laboratoire, vous ne pouvez pas faire de travaux !');
@ -27,6 +26,9 @@ $titre = 'Batiments';
}
//Lancement d'une déconstruction
if (isset($_GET['d'])) {
//Si l'on ne possède pas de batiment, erreur
if ($planete->batiments[intval(gpc('d'))] <= 0) erreur('Vous ne pouvez pas démolir un batiment que vous ne possédez pas !');
//Récupération des erreurs de la mise en file d'attente pour traitement
$construction = $planete->file_addObjet("batiments", intval(gpc('d')), -1);
@ -59,13 +61,52 @@ $titre = 'Batiments';
exit;
}*/
//Calcul du bonus de construction des mines en fonction des technologies
if ($planete->technologies[0] &262144)
{
$bonusMine_a = 0.85;
$bonusMine_b = 0.85;
$bonusMine_c = 0.85;
}
elseif ($planete->technologies[0] &131072)
{
$bonusMine_a = 0.9;
$bonusMine_b = 0.9;
$bonusMine_c = 0.9;
}
elseif ($planete->technologies[0] &65536)
{
$bonusMine_a = 0.95;
$bonusMine_b = 0.95;
$bonusMine_c = 0.95;
}
else
{
$bonusMine_a = 1;
$bonusMine_b = 1;
$bonusMine_c = 1;
}
foreach($planete->batiments as $i => $PLbatiment) {
//Si l'on est pas sur la planète mère, on désactive le laboratoire
if ($i == 6 && $queryPlanetes[0]['id'] != $planete->id) continue;
$tr = 0; $a = 0; $b = 0; $c = 0; $sec = 0; $enFile = false;
if ($PLbatiment > 0) $niveau = $PLbatiment; else $niveau = 0;
$n = $PLbatiment + 1;
eval($batimentCALC[$i][0]); eval($batimentCALC[$i][1]); eval($batimentCALC[$i][2]); eval($batimentCALC[$i][3]);
if ($planete->file_exist($i, 'file_bat')) $enFile = true; else $enFile = false;
if ($i < 4)
{
$a *= $bonusMine_a;
$b *= $bonusMine_b;
$c *= $bonusMine_c;
}
//On applique le bonus de temps des ingénieurs et des centrales informatiques
if ($i != 11) $sec /= pow(1.23,$planete->batiments[11]) + 0.0025*$planete->casernes[7];
//On applique les bonus de test
$sec /= VITESSE;
@ -105,6 +146,7 @@ $titre = 'Batiments';
$n = $planete->batiments[$bout[0]] + 1;
eval($batimentCALC[$bout[0]][3]);
if ($bout[0] != 11) $sec /= pow(1.23,$planete->batiments[11]) + 0.0025*$planete->casernes[7];
if ($bout[1] < 0) $sec *= 0.6;
if ($key == 1) $file[] = array($bout[0], $bout[1], ceil($sec/VITESSE - (time() - $planete->file_bat[0])), $batiment[$bout[0]]);
else $file[] = array($bout[0], $bout[1], ceil($sec/VITESSE), $batiment[$bout[0]]);

View file

@ -1,128 +1,87 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$titre = 'Bourse';
include_once(_FCORE."../game/Class/class.bourse.php");
define('MAX_ACTION_PAR_JOUR', 5);
$a = gpc('a');
$v = gpc('v');
if(is_numeric($a) && is_numeric(gpc('a'.$a, 'post'))){
$nb = gpc('a'.$a, 'post');
if ($nb <= 0 || $nb > 99999999) erreur("Nombre de ressources invalide !");
erreur('Arrêtez de tester la bourse, on attend le nouveau script !');
if ($a == 0) $var = 'metal';
elseif ($a == 1) $var = 'cristal';
elseif ($a == 2) $var = 'hydrogene';
/*if (date('G') < 7 && date('G') >= 0 && date('w') != 0 && date('w') != 6 && $queryUser['auth_level'] < 3)
erreur('La bourse est actuellement fermée !<br />Réouverture à 7h00', "orange");
else*/if ($queryPlanetes[0]['id'] != $planete->id)
erreur('Vous devez être sur votre planète mère pour utiliser la bourse.');
else {
$a = gpc('a');
$v = gpc('v');
$nb = gpc('a'.$a.$v, 'post');
if ($nb < 0) erreur("Vous ne pouvez pas acheter ou vendre un nombre négatif d'action !", "red", "?p=bourse");
if (!empty($a) && is_numeric($nb)) {
$action = new Bourse($a, $id_user);
$poss24 = $action->actionIn24Hours();
if ($poss24 + $nb > MAX_ACTION_PAR_JOUR) erreur('Vous ne pouvez pas acheter plus de 5 mêmes actions dans les mêmes 24h.');
$ressources = $action->prixAchat($nb);
if ($ressources[0] > $planete->metal || $ressources[1] > $planete->cristal) erreur('Vous n\'avez pas assez de ressources pour acheter '.$nb.' actions.');
$action->addAction($nb);
$planete->metal -= $ressources[0];
$planete->cristal -= $ressources[1];
$bdd->connexion();
$action = $bdd->unique_query("SELECT dispo, graph FROM $table_bourse_ressources WHERE id = $a;");
$bdd->deconnexion();
header('Location: ?p=bourse&d='.$a);
exit;
}
elseif (!empty($v) && is_numeric($nb)) {
$action = new Bourse($v, $id_user);
$ressources = $action->delAction($nb);
$planete->metal += $ressources[0];
$planete->cristal += $ressources[1];
//On vérifie que la bourse ait suffisament de ressources à distribuer :
if ($action['dispo'] <= $nb) erreur("Il n'y a pas assez de ressources dans la galaxie pour que vous puissiez en acheter autant.");
header('Location: ?p=bourse&d='.$v);
exit;
}
elseif (gpc('e') && $planete->auth_level >= 3) {
$e = gpc('e');
if (isset($_POST['nomaction']) && isset($_POST['descaction'])) {
$nom = gpc('nomaction', 'post');
$description = gpc('descaction', 'post');
$bdd->connexion();
$bdd->escape($nom);
$bdd->escape($description);
$bdd->escape($e);
$bdd->query("UPDATE $table_bourse SET description = '$description', nom = '$nom' WHERE id = $e;");
$bdd->deconnexion();
}
elseif (isset($_POST['prixAM']) && isset($_POST['prixAC'])) {
$prixAM = gpc('prixAM', 'post');
$prixAC = gpc('prixAC', 'post');
$bdd->connexion();
$bdd->escape($prixAM);
$bdd->escape($prixAC);
$bdd->escape($e);
$bdd->query("UPDATE $table_bourse SET metal = $prixAM, cristal = $prixAC WHERE id = $e;");
$bdd->deconnexion();
}
elseif (isset($_POST['newsaction'])) {
$news = gpc('newsaction', 'post');
$time = time();
$bdd->connexion();
$bdd->escape($news);
$bdd->escape($e);
$bdd->query("UPDATE $table_bourse SET news = '$news', timeDesc = '$time' WHERE id = $e;");
$bdd->deconnexion();
}
//On vérifie qu'il reste suffisamment de place dans les silos du joueur
if ($planete->cap < $planete->$var + $nb) $nb = $planete->cap - $planete->$var;
if ($nb <= 0) erreur("Vous n'avez pas assez de place pour stocker ces ressources !");
header('Location: ?p=bourse&d='.$e);
exit;
}
elseif (gpc('c') == "new" && $planete->auth_level >= 3 && is_numeric(gpc('prixAM', 'post')) && is_numeric(gpc('prixAC', 'post'))) {
if (isset($_POST['nomaction']) && isset($_POST['descaction'])) {
$nom = gpc('nomaction', 'post');
$description = gpc('descaction', 'post');
$prixAM = gpc('prixAM', 'post');
$prixAC = gpc('prixAC', 'post');
$news = gpc('newsaction', 'post');
$time = time();
$bdd->connexion();
$bdd->escape($nom);
$bdd->escape($description);
$bdd->escape($prixAM);
$bdd->escape($prixAC);
$bdd->escape($news);
if (!empty($news)) $bdd->query("INSERT INTO $table_bourse (nom, description, news, timeDesc, metal, cristal) VALUES ('$nom', '$description', '$news', '$time', '$prixAM', '$prixAC');");
else $bdd->query("INSERT INTO $table_bourse (nom, description, metal, cristal) VALUES ('$nom', '$description', '$prixAM', '$prixAC');");
$bdd->deconnexion();
}
$prix = ceil(pow($action['dispo'], -0.1) * $nb * 1.07)/10;
header('Location: ?p=bourse');
exit;
}
elseif ($d = gpc('d')) {
$action = new Bourse($d, $id_user);
$template->assign('taxeA', $action->taxeA);
$template->assign('taxeV', $action->taxeV);
$template->assign('poss', $action->action());
$template->assign('poss24', $action->actionIn24Hours());
$action = null;
//On vérifie que le joueur ait assez de crédits pour acheter
if ($prix <= $planete->credits) {
$planete->credits -= $prix;
$planete->$var += $nb;
if (empty($action['graph'])) $action['graph'] = array();
else $action['graph'] = unserialize($action['graph']);
$action['graph'][date('w')] = $action['dispo'];
$graph = serialize($action['graph']);
$bdd->connexion();
$bdd->escape($d);
$bourse = $bdd->unique_query("SELECT id, nom, description, news, metal, cristal, (metal/metalAnc-1)*100 AS evolution FROM $table_bourse WHERE id = $d;");
$bdd->escape($graph);
$bdd->query("UPDATE $table_bourse_ressources SET dispo = dispo - $nb, graph = '$graph' WHERE id = $a;");
$bdd->deconnexion();
if ($bourse) {
$page = 'bourseDetails';
$template->assign('bourse', $bourse);
}
else erreur('Cette action n\'existe pas !', "red", '?p=bourse');
}
else {
$bdd->connexion();
$infos = $bdd->query("SELECT id, nom, news AS description FROM $table_bourse WHERE news != '' ORDER BY timeDesc DESC LIMIT 7;");
$bourse = $bdd->query("SELECT id, nom, metal, cristal, (metal/metalAnc-1)*100 AS evolution FROM $table_bourse;");
$bdd->deconnexion();
$page = 'bourse';
$template->assign('bourse', $bourse);
$template->assign('infos', $infos);
}
else erreur("Vous n'avez pas assez de crédits pour faire cet achat !");
}
elseif(is_numeric($v) && is_numeric(gpc('a'.$v, 'post'))){
$nb = gpc('a'.$v, 'post');
if ($nb <= 0 || $nb > 99999999) erreur("Nombre de ressources invalide !");
if ($v == 0) $var = 'metal';
elseif ($v == 1) $var = 'cristal';
elseif ($v == 2) $var = 'hydrogene';
//On vérifie que le joueur ait assez de ressources pour vendre, sinon, on ajuste à son maximum
if ($nb > $planete->$var) $nb = $planete->$var;
$bdd->connexion();
$action = $bdd->unique_query("SELECT dispo, graph FROM $table_bourse_ressources WHERE id = $v;");
$bdd->deconnexion();
$prix = ceil(pow($action['dispo'], -0.1) * $nb * 0.9)/10;
$planete->credits += $prix;
$planete->$var -= $nb;
if (empty($action['graph'])) $action['graph'] = array();
else $action['graph'] = unserialize($action['graph']);
$action['graph'][date('w')] = $action['dispo'];
$graph = serialize($action['graph']);
$bdd->connexion();
$bdd->escape($graph);
$bdd->query("UPDATE $table_bourse_ressources SET dispo = dispo + $nb, graph = '$graph' WHERE id = $v;");
$bdd->deconnexion();
}
$bdd->connexion();
$bourse = $bdd->query("SELECT id, dispo FROM $table_bourse_ressources;");
$bdd->deconnexion();
foreach($bourse as $key => $action){
$bourse[$key]['prix'] = pow($action['dispo'], -0.1) * 200;
$bourse[$key]['prixV'] = $bourse[$key]['prix'] * 0.9;
$bourse[$key]['prixA'] = $bourse[$key]['prix'] * 1.07;
}
$page = 'bourse_ressources';
$template->assign('bourse', $bourse);
?>

View file

@ -4,7 +4,7 @@ $page = 'chantierspatial';
$titre = $batiment[8];
//Vérification que le joueur ait bien un labo avant d'afficher la page
if ($planete->batiments[8] == 0) erreur('Vous devez d\'abord construire un '.strtolower($batiment[8]), "red", '?p=batiments', 4000);
if ($planete->batiments[8] <= 0) erreur('Vous devez d\'abord construire un '.strtolower($batiment[8]), "red", '?p=batiments', 4000);
$TEMP_batiments = array();

View file

@ -4,7 +4,7 @@ $page = 'chantierterrestre';
$titre = $batiment[7];
//Vérification que le joueur ait bien un labo avant d'afficher la page
if ($planete->batiments[7] == 0) erreur('Vous devez d\'abord construire un '.strtolower($batiment[7]), "red", '?p=batiments', 4000);
if ($planete->batiments[7] <= 0) erreur('Vous devez d\'abord construire un '.strtolower($batiment[7]), "red", '?p=batiments', 4000);
$TEMP_batiments = array();

189
game/jeu/connexion.php Normal file
View file

@ -0,0 +1,189 @@
<?php
//On traite la demande de loggin de l'utilisateur
if ((isset($_GET['l']) && isset($_GET['p'])) || (isset($_POST['HB_login']) && isset($_POST['HB_password']))) {
//Récupération des données POST ou GET
if (isset($_POST['HB_login']) && isset($_POST['HB_password']) && gpc('p') == 'connexion') {
$HB_login = gpc('HB_login', 'post');
$HB_password = gpc('HB_password', 'post');
$HB_auth = hash("sha512", $HB_login.'Ņ♂↨'.$HB_password.'☻♫☼'.date('W!Y¨D@j').$_SERVER["HTTP_USER_AGENT"].$_SERVER["REMOTE_ADDR"]);
}
else {
$HB_login = gpc('l');
if (is_numeric('0x'.gpc('p'))) $HB_password = cxor(hexstr(gpc('p')), date('WYDj'));
$HB_auth = gpc('a');
}
if (empty($HB_login) || empty($HB_password)) {
$template->assign('message','Nom d\'utilisateur ou mot de passe incorrect.<br /><br />');
$template->assign('couleur','red');
$template->display('cms/erreur.tpl');
exit;
}
elseif (hash("sha512", $HB_login.'Ņ♂↨'.$HB_password.'☻♫☼'.date('W!Y¨D@j').$_SERVER["HTTP_USER_AGENT"].$_SERVER["REMOTE_ADDR"]) != $HB_auth && hash("sha512", $HB_login.'Ņ♂↨'.$HB_password.'☻♫☼'.date('W!Y¨D@j', time()-300)) != $HB_auth) {
$template->assign('message','Impossible d\'authentifier la connexion !<br /><br />Si le problème perciste, contactez un administrateur.');
$template->assign('couleur','red');
$template->display('cms/erreur.tpl');
exit;
}
else {
$ipe = $_SERVER['REMOTE_ADDR'];
$bdd->connexion();
$bruteforce = $bdd->unique_query("SELECT nombre FROM securite_identification WHERE ip = '$ipe';");
if ($bruteforce['nombre'] >= 10) {
$fichier = fopen(_FCORE."ban.xlist",'a+');
fwrite($fichier, $_SERVER['REMOTE_ADDR']."\n\r");
fclose($fichier);
}
$bdd->escape($HB_login);
if (!$var = $bdd->unique_query("SELECT mdp_var, mdp FROM $table_user WHERE pseudo = '$HB_login';")) {
if (isset($bruteforce['nombre'])) $bdd->query("UPDATE securite_identification SET nombre = nombre + 1 WHERE ip = '$ipe';");
else $bdd->query("INSERT INTO securite_identification VALUES ('$ipe', '1', '".time()."');");
$bdd->deconnexion();
$template->assign('message','Nom d\'utilisateur ou mot de passe incorrect.');
$template->assign('couleur','red');
$template->assign('script','<script type="text/javascript">setTimeout(\'document.location.href="http://www.halo-battle.s-fr.com/";\', 2500);</script>');
$template->display('cms/erreur.tpl');
exit;
}
$bdd->deconnexion();
$HB_password = mdp($HB_login, $HB_password, $var['mdp_var']);
$time = time();
$ip = $_SERVER["REMOTE_ADDR"];
$bdd->connexion();
$bdd->escape($HB_password);
//Limiter le nombre de personnes en ligne simutanément
if ($enligne['enligne'] > 1500) {
$template->assign('message','Il y a actuellement trop de monde connecté sur Halo-Battle. Pour permettre aux joueurs une navigation convenable, nous vous remercions de revenir plus tard.');
$template->assign('couleur','red');
$template->display('cms/erreur.tpl');
exit;
}
$resultat = $bdd->unique_query("SELECT id, race, mv, last_visite, auth_level, raisonmv FROM $table_user WHERE pseudo = '$HB_login' AND mdp = '$HB_password';");
if ($resultat) {
$id = $resultat['id'];
$reqPlan = $bdd->query("SELECT id, file_bat, file_tech, file_cas, file_vais, file_ter, timestamp FROM $table_planete WHERE id_user = '$id' ORDER BY id ASC;");
$resultatP = $reqPlan[0];
$race = $resultat['race'];
if (!$reqPlan) {
$bdd->deconnexion();
$template->assign('message','Impossible de trouver votre planète !');
$template->assign('couleur','red');
$template->display('cms/erreur.tpl');
exit;
}
if ($resultat['mv'] > 0) {
if (($resultat['last_visite'] + 259200 > time() || $resultat['mv'] == 3) && $resultat['auth_level'] < 2) {
if ($resultat['mv'] == 3) $template->assign('message','Vous êtes définitivement banni de cette galaxie pour '.$resultat['raisonmv'].'. Vous ne pouvez plus vous reconnecter sur votre compte');
elseif ($resultat['mv'] == 2) $template->assign('message','Un opérateur a placé votre compte en mode vacances pour '.$resultat['raisonmv'].'. Vous ne pouvez pas vous reconnecter sur votre compte avant le<br />'.strftime("%A %d %B à %H:%M", $resultat['last_visite']+259200));
else $template->assign('message','Vous ne pouvez pas sortir du mode vacances avant le<br />'.strftime("%A %d %B à %H:%M", $resultat['last_visite']+259200));
$template->assign('couleur','red');
$template->display('cms/erreur.tpl');
exit;
}
$bdd->query("UPDATE $table_user SET mv = '0' WHERE id = '$id';");
$bdd->query("UPDATE $table_planete SET timestamp = '".time()."' WHERE id_user = '$id';");
$bdd->deconnexion();
//On fait repartir à 0 les files d'attente
include_once(_FCORE."../game/vars.php");
include_once(_FCORE."../game/Class/class.file.php");
include_once(_FCORE."../game/Class/class.user.php");
include_once(_FCORE."../game/Class/class.planete.php");
foreach ($reqPlan as $plan){
if (!empty($plan['file_bat'])) {
$file = new File($plan['file_bat']);
$fileBat = $file->reajusteVacances($plan['timestamp']);
}
else $fileBat = '';
if (!empty($plan['file_tech'])) {
$file = new File($plan['file_tech']);
$fileTech = $file->reajusteVacances($plan['timestamp']);
}
else $fileTech = '';
if (!empty($plan['file_cas'])) {
$file = new File($plan['file_cas']);
$fileCas = $file->reajusteVacances($plan['timestamp']);
}
else $fileCas = '';
if (!empty($plan['file_vais'])) {
$file = new File($plan['file_vais']);
$fileVais = $file->reajusteVacances($plan['timestamp']);
}
else $fileVais = '';
if (!empty($plan['file_ter'])) {
$file = new File($plan['file_ter']);
$fileTer = $file->reajusteVacances($plan['timestamp']);
}
else $fileTer = '';
$idPlan = $plan['id'];
$bdd->connexion();
$bdd->escape($fileBat);
$bdd->escape($fileTech);
$bdd->escape($fileCas);
$bdd->escape($fileVais);
$bdd->escape($fileTer);
$bdd->query("UPDATE $table_planete SET file_bat = '$fileBat', file_tech = '$fileTech', file_cas = '$fileCas', file_vais = '$fileVais', file_ter = '$fileTer' WHERE id = $idPlan;");
$bdd->deconnexion();
//On met à jour la planète pour tout le reste
$plan = new Planete($plan['id'], true);
}
}
//On met à jour toutes les planètes si le nombre de joueurs n'est pas trop important
elseif ($enligne['enligne'] > 400) {
include_once(_FCORE."../game/vars.php");
include_once(_FCORE."../game/Class/class.file.php");
include_once(_FCORE."../game/Class/class.user.php");
include_once(_FCORE."../game/Class/class.planete.php");
foreach ($reqPlan as $plan){
$plan = new Planete($plan['id'], true);
}
}
$plan = null;
$bdd->connexion();
$bdd->query("UPDATE $table_user SET last_visite = '$time', last_ip = '$ip' WHERE id = $id;");
$bdd->query("INSERT INTO $table_registre_identification (id_util, ip) VALUES (".$id.",'".$ip."');");
$multi = $bdd->unique_query("SELECT COUNT(*) FROM $table_registre_identification WHERE ip = '$ip' GROUP BY ip, id_util;");
$message = $bdd->unique_query("SELECT time FROM $table_messages_demarrage ORDER BY time DESC LIMIT 1;");
$bdd->deconnexion();
$sess->values['connected'] = TRUE;
$sess->values['id'] = $resultat['id'];
$sess->values['race'] = $resultat['race'];
$sess->values['idPlan'] = $resultatP['id'];
$sess->values['idAsteroide'] = 0;
//Si on détecte le multi-compte, on interdit l'accès au panneau d'admin
if (empty($multi)) $sess->level = 1;
else $sess->level = $resultat['auth_level'] + 1;
$sess->put($resultat['id']);
if ($message['time'] > $resultat['last_visite']) redirection('./'.$config['first_page'].'?p=demarrage');
elseif (empty($multi)) redirection('./'.$config['first_page'].'?p=avertmulti');
else redirection('./'.$config['first_page'].'?p=accueil');
exit;
}
else {
$bdd->deconnexion();
$template->assign('message','Nom d\'utilisateur ou mot de passe incorrect.');
$template->assign('couleur','red');
$template->assign('script','<script type="text/javascript">setTimeout(\'document.location.href="http://www.halo-battle.s-fr.com/";\', 2500);</script>');
$template->display('cms/erreur.tpl');
exit;
}
}
}
?>

View file

@ -77,7 +77,7 @@ $race = $_GET['r'];
if ($race != $planete->race) include(_FCORE."../game/noms.php");
$template->assign('raceAff', $race);
if (isset($_GET['b']) && is_numeric($_GET['b']) && $_GET['b'] < count($batiment)) {
if (isset($_GET['b']) && is_numeric($_GET['b']) && !empty($batiment[$_GET['b']])) {
$template->assign('type', 'batiments');
$t = $_GET['b'];
$template->assign('t', $t);
@ -97,7 +97,7 @@ if (isset($_GET['b']) && is_numeric($_GET['b']) && $_GET['b'] < count($batiment)
$template->assign('etat', readDeblok($batimentTECH[$t], $planete));
}
elseif (isset($_GET['t']) && is_numeric($_GET['t']) && $_GET['t'] < count($technolo)) {
elseif (isset($_GET['t']) && is_numeric($_GET['t']) && !empty($technolo[$_GET['t']])) {
$template->assign('type', 'technologies');
$t = $_GET['t'];
$template->assign('image', $technoli[$t]);
@ -115,7 +115,7 @@ elseif (isset($_GET['t']) && is_numeric($_GET['t']) && $_GET['t'] < count($techn
$template->assign('etat', readDeblok($technoloTECH[$t], $planete));
}
elseif (isset($_GET['v']) && is_numeric($_GET['v']) && $_GET['v'] < count($nomvaisn)) {
elseif (isset($_GET['v']) && is_numeric($_GET['v']) && !empty($nomvaisn[$_GET['v']])) {
$template->assign('type', 'vaisseaux');
$t = $_GET['v'];
$template->assign('image', $nomvaisi[$t]);
@ -150,7 +150,7 @@ elseif (isset($_GET['d']) && is_numeric($_GET['d']) && $_GET['d'] < count($nomte
$template->assign('caract', array($defense_at[$t], $defense_bc[$t], $defense_pv[$t]));
}
}
elseif (isset($_GET['c']) && is_numeric($_GET['c']) && $_GET['c'] < count($casernen)) {
elseif (isset($_GET['c']) && is_numeric($_GET['c']) && !empty($casernen[$_GET['c']])) {
$template->assign('type', 'caserne');
$t = $_GET['c'];
$template->assign('image', $casernei[$t]);

View file

@ -10,9 +10,9 @@ if (!empty($_POST['cds']) && !empty($_POST['nomflotte']) && isset($_POST['amas']
$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'));
$EBmetal = floor(str_replace(' ', '', gpc('metal', 'post')));
$EBcristal = floor(str_replace(' ', '', gpc('cristal', 'post')));
$EBhydrogene = floor(str_replace(' ', '', gpc('hydrogene', 'post')));
$vitesse = floor(gpc('vitesse', 'post'))/100;
$bdd->connexion();
@ -56,7 +56,7 @@ if (!empty($_POST['cds']) && !empty($_POST['nomflotte']) && isset($_POST['amas']
else {
//On vérifie qu'il n'y ait pas une interaction entre deux multi-comptes
$cnt = count($multi);
if ($cnt > 1 && $mission == 2) {
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).');
}
@ -78,8 +78,8 @@ if (!empty($_POST['cds']) && !empty($_POST['nomflotte']) && isset($_POST['amas']
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 == 2 && !$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 == 3 && $resultat) erreur('La planète que vous voulez coloniser est déjà habitée.', "red", '?p=flotte', 3000);
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;
@ -112,30 +112,35 @@ if (!empty($_POST['cds']) && !empty($_POST['nomflotte']) && isset($_POST['amas']
$flotte->mission = $mission;
$flotte->start_planete = $planete;
$flotte->start_time = time();
$flotte->end_planete = $resultat['id'];
//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 == 3 || $mission == 4 || $mission == 5) $conso *= 2;
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);
if ($flotte->contenuMax < $EBmetal + $EBcristal + $EBhydrogene + $conso) erreur('Vous ne pouvez pas embarquer autant de ressources, les cales débordent. '.$flotte->contenuMax, "red", '?p=flotte', 3500);
elseif ($planete->metal < $EBmetal || $planete->cristal < $EBcristal || $planete->hydrogene < $EBhydrogene + $conso) erreur('Vous n\'avez pas assez de ressources sur cette planète pour envoyer cette flotte.', "red", '?p=flotte', 3500);
else {
if ($mission == 1) $flotte->tactique = gpc('tactique', 'post');
$flotte->contenu = array(floor(gpc('metal', 'post')), floor(gpc('cristal', 'post')), floor(gpc('hydrogene', 'post')));
//if ($mission == 3) $flotte->tactique = gpc('tactique', 'post');
$flotte->contenu = array($EBmetal, $EBcristal, $EBhydrogene);
$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->metal -= $EBmetal;
$planete->cristal -= $EBcristal;
$planete->hydrogene -= floor($EBhydrogene + $conso);
$planete->vaisseaux = $sauv;
if (!in_array('vaisseaux', $planete->modif)) $planete->modif[] = 'vaisseaux';
unset($flotte);
unset($sess->values['vais']);
$sess->put();
@ -152,7 +157,6 @@ elseif (!empty($_POST['v0']) || !empty($_POST['v1']) || !empty($_POST['v2']) ||
else $v = (int)abs($v);
if ($vaisseau < $v) {
$planete->vaisseaux = $sauv;
erreur('Il ne vous reste plus assez de vaisseaux !', "red", '?p=flotte');
}
@ -167,12 +171,11 @@ elseif (!empty($_POST['v0']) || !empty($_POST['v1']) || !empty($_POST['v2']) ||
$sess->values['forceFlotte'] = false;
//Génération de la liste de mission possible avec les vaisseaux de la flotte
$missions = array('Stationner');
if ($planete->technologies[0] & 8) $missions[1] = "Transporter";
$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";
if ($sess->values['vais'][4] || $sess->values['vais'][13]) $missions[5] = "Espionner";
$template->assign('missions', $missions);
//On enregistre les modification de la session
@ -184,6 +187,22 @@ elseif (!empty($_POST['v0']) || !empty($_POST['v1']) || !empty($_POST['v2']) ||
$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
$favoris = array();
$favorisC = array();
include_once(_FCORE."../game/Class/class.tinyplanete.php");
foreach ($planete->destinationsFavoris as $fav)
{
$fav_Planete = new TinyPlanete($fav);
if (!empty($fav_Planete->nom_planete)) $favoris[$fav_Planete->id] = $fav_Planete->nom_planete;
else $favoris[$fav_Planete->id] = '['.$fav_Planete->galaxie.':'.$fav_Planete->ss.':'.$fav_Planete->position.']';
}
foreach ($queryPlanetes as $fav)
{
if (!empty($fav['nom_planete'])) $favorisC[$fav['id']] = $fav['nom_planete'];
else $favorisC[$fav['id']] = '['.$fav['galaxie'].':'.$fav['ss'].':'.$fav['position'].']';
}
$template->assign('favoris', $favoris);
$template->assign('favorisColonies', $favorisC);
}
//Affichage du détail d'une flotte
elseif (!empty($_GET['n'])) {
@ -246,15 +265,16 @@ else {
$TEMP_flottesEC = array();
if ($flottes) {
foreach ($flottes as $flotte){
if ($flotte['mission'] != 1 && ($flotte['mission'] != 3 || $flotte['effectue'] == '1' || $flotte['nb_vais'] >= 1) && $flotte['mission'] != 0) {
$retour = $flotte['start_galaxie'].':'.$flotte['start_ss'].':'.$flotte['start_position'];
if ($flotte['mission'] != 1 && ($flotte['mission'] != 2 || $flotte['statut'] == '1') && $flotte['mission'] != 0) {
$planete_retour = new Planete($flotte['start_planete']);
$retour = $planete_retour->galaxie.':'.$planete_retour->ss.':'.$planete_retour->position;
$Hretour = date('d/m H:i:s',$flotte['start_time']+2*$flotte['end_time']);
}
elseif ($flotte['mission'] == 1) {
/*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 = '-';
@ -262,7 +282,11 @@ else {
$end_planete = new Planete($flotte['end_planete']);
$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);
if ($flotte['mission'] == 2) {
preg_match('#^\[?([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})\]?$#', $flotte['end_planete'], $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);

View file

@ -35,4 +35,5 @@ if ($planete->technologies[3] & 2048) {
$politiques[] = 'Démocratie (Administration coloniale)';
}
$template->assign('politiques', $politiques);
$template->assign('moraldetails', $politiques);
?>

View file

@ -3,8 +3,12 @@ if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'laboratoire';
$titre = 'Laboratoire';
//Si l'on est pas sur la planète mère, on bloque le laboratoire
if ($queryPlanetes[0]['id'] != $planete->id)
erreur('Vous devez être sur votre planète mère pour faire des recherches dans le laboratoire.');
//Vérification que le joueur ait bien un labo avant d'afficher la page
if ($planete->batiments[6] == 0) erreur('Vous devez d\'abord construire un '.strtolower($batiment[6]), "red", '?p=batiments', 4000);
if ($planete->batiments[6] <= 0) erreur('Vous devez d\'abord construire un '.strtolower($batiment[6]), "red", '?p=batiments', 4000);
//Lancement d'une nouvelle recherche
if (isset($_GET['t']) && isset($_GET['f']) ) {
@ -12,7 +16,7 @@ if (isset($_GET['t']) && isset($_GET['f']) ) {
if ($planete->file_exist(6, 'file_bat')) erreur('Votre laboratoire est en travaux, vous ne pouvez pas faire de recherches pour le moment !');
//Récupération des erreurs de la mise en file d'attente pour traitement
$construction = $planete->file_addObjet("technologies", intval(gpc('t')), intval(gpc('f')));
$construction = $planete->file_addTechno(intval(gpc('f')), intval(gpc('t')));
switch($construction){
case 1: erreur('Vous n\'avez pas les bâtiments et/ou technologies nécessaires pour effectuer cette recherche.'); break;
@ -29,7 +33,7 @@ if (isset($_GET['a'])) {
$i = intval(gpc('a'));
//Vérification de la présence du batiment dans la file d'attente
if(!empty($planete->file_tech[$i+1])) {
$planete->file_delObjet("technologies", $i);
$planete->file_delTechno($i);
header('Location: ?p=laboratoire');
exit;
}
@ -41,7 +45,7 @@ foreach ($planete->technologies as $key => $technologie){
foreach ($technologiesCALC[$key] as $i => $calc){
//On affiche uniquement les technologies
if (($technologie & $calc[1]) == $calc[1] && !($technologie & $calc[0] && $technologie != 0)) {
if ($planete->file_exist($i, $key)) $enFile = true;
if ($planete->file_existTech($key, $i)) $enFile = true;
else $enFile = false;
//On applique les bonus de test

View file

@ -1,5 +1,87 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$titre = 'Marché';
$titre = 'Bourse';
$a = gpc('a');
$v = gpc('v');
if(is_numeric($a) && is_numeric(gpc('a'.$a, 'post'))){
$nb = gpc('a'.$a, 'post');
if ($nb <= 0 || $nb > 99999999) erreur("Nombre de ressources invalide !");
if ($a == 0) $var = 'metal';
elseif ($a == 1) $var = 'cristal';
elseif ($a == 2) $var = 'hydrogene';
$bdd->connexion();
$action = $bdd->unique_query("SELECT dispo, graph FROM $table_bourse_ressources WHERE id = $a;");
$bdd->deconnexion();
//On vérifie que la bourse ait suffisament de ressources à distribuer :
if ($action['dispo'] <= $nb) erreur("Il n'y a pas assez de ressources dans la galaxie pour que vous puissiez en acheter autant.");
//On vérifie qu'il reste suffisamment de place dans les silos du joueur
if ($planete->cap < $planete->$var + $nb) $nb = $planete->cap - $planete->$var;
if ($nb <= 0) erreur("Vous n'avez pas assez de place pour stocker ces ressources !");
$prix = ceil(pow($action['dispo'], -0.1) * $nb * 2.20)/10;
//On vérifie que le joueur ait assez de crédits pour acheter
if ($prix <= $planete->credits) {
$planete->credits -= $prix;
$planete->$var += $nb;
if (empty($action['graph'])) $action['graph'] = array();
else $action['graph'] = unserialize($action['graph']);
$action['graph'][date('w')] = $action['dispo'];
$graph = serialize($action['graph']);
$bdd->connexion();
$bdd->escape($graph);
$bdd->query("UPDATE $table_bourse_ressources SET dispo = dispo - $nb, graph = '$graph' WHERE id = $a;");
$bdd->deconnexion();
}
else erreur("Vous n'avez pas assez de crédits pour faire cet achat !");
}
elseif(is_numeric($v) && is_numeric(gpc('a'.$v, 'post'))){
$nb = gpc('a'.$v, 'post');
if ($nb <= 1000 || $nb > 99999999) erreur("Nombre de ressources invalide !<br />Vous pouvez vendre au minimum 1000 ressources !");
if ($v == 0) $var = 'metal';
elseif ($v == 1) $var = 'cristal';
elseif ($v == 2) $var = 'hydrogene';
//On vérifie que le joueur ait assez de ressources pour vendre, sinon, on ajuste à son maximum
if ($nb > $planete->$var) $nb = $planete->$var;
$bdd->connexion();
$action = $bdd->unique_query("SELECT dispo, graph FROM $table_bourse_ressources WHERE id = $v;");
$bdd->deconnexion();
$prix = ceil(pow($action['dispo'], -0.1) * $nb * 1.8)/10;
$planete->credits += $prix;
$planete->$var -= $nb;
if (empty($action['graph'])) $action['graph'] = array();
else $action['graph'] = unserialize($action['graph']);
$action['graph'][date('w')] = $action['dispo'];
$graph = serialize($action['graph']);
$bdd->connexion();
$bdd->escape($graph);
$bdd->query("UPDATE $table_bourse_ressources SET dispo = dispo + $nb, graph = '$graph' WHERE id = $v;");
$bdd->deconnexion();
}
$bdd->connexion();
$bourse = $bdd->query("SELECT id, dispo FROM $table_bourse_ressources;");
$bdd->deconnexion();
foreach($bourse as $key => $action){
$bourse[$key]['prix'] = pow($action['dispo'], -0.1) * 200;
$bourse[$key]['prixV'] = $bourse[$key]['prix'] * 0.9;
$bourse[$key]['prixA'] = $bourse[$key]['prix'] * 1.07;
}
$page = 'bourse_ressources';
$template->assign('bourse', $bourse);
?>

View file

@ -37,14 +37,14 @@ if ((isset($_POST['HB_pseudo']) && isset($_POST['HB_mail']) && isset($_POST['HB_
$erreur .= '<p style="color: #FF0000"><b>Pseudo ou adresse électronique vide :</b><br />Veuillez compléter tous les champs de ce formulaire avant de le valider.</p><br />';
}
if (isset($_GET['m']) && is_numeric('0x'.$_GET['m'])) $_GET['m'] = cxor(hexstr($_GET['m']), date('WYDj'));
if (!isset($_POST['HB_captcha'])) $_POST['HB_captcha'] = '';
if (strtolower($_POST['HB_captcha']) != strtolower($_SESSION['aleat_nbr']) && gpc('a') != hash_var($_GET['ps'].'☻♫☼'.date('W!Y¨D@j').'Ņ♂↨'.$_GET['m'], "sha512")) {
if (isset($_GET['m']) && is_numeric('0x'.$_GET['m'])) $_GET['m'] = cxor(hexstr($_GET['m']), date('WYDj'));
elseif (strtolower($_POST['HB_captcha']) != strtolower($_SESSION['aleat_nbr']) && gpc('a') != hash_var($_GET['ps'].'☻♫☼'.date('W!Y¨D@j').'Ņ♂↨'.$_GET['m'], "sha512")) {
$ok = false;
$erreur .= '<p style="color: #FF0000"><b>Code de vérification incorrect :</b><br />Le texte que vous avez recopier ne correspondait pas au texte de l\'image, veuillez recommencer.</p><br />';
}
if ($ok) {
if (strtolower($_POST['HB_captcha']) == strtolower($_SESSION['aleat_nbr'])) {
if (isset($_SESSION['aleat_nbr']) && strtolower($_POST['HB_captcha']) == strtolower($_SESSION['aleat_nbr'])) {
$HB_pseudo = gpc('HB_pseudo', 'post');
$HB_mail = gpc('HB_mail', 'post');
}

304
game/jeu/~flotte.php Normal file
View file

@ -0,0 +1,304 @@
<?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';
}
?>