Version 1.13a

This commit is contained in:
nemunaire 2020-11-15 16:12:30 +01:00
commit ba8f323879
1634 changed files with 10080 additions and 213021 deletions

View file

@ -17,6 +17,7 @@ class Alliance extends Surface{
$tag,
$galaxie,
$ss,
$wing,
$nom_asteroide,
$image_asteroide,
$debris_met,
@ -51,6 +52,7 @@ class Alliance extends Surface{
$this->tag = $alli["tag"];
$this->galaxie = $alli["galaxie"];
$this->ss = $alli["ss"];
$this->wing = $alli["wing"];
$this->nom_asteroide = $alli["nom_asteroide"];
$this->image_asteroide = $alli["image_asteroide"];
$this->debris_met = $alli["debris_met"];

View file

@ -15,9 +15,15 @@ class Asteroide extends Surface
$sante,
$nom_alliance,
$tag,
$wing,
$nom_asteroide,
$image_asteroide,
$credits_alliance;
$position = 5,
$cap = 123456789,
$credits_alliance,
$url_chat,
$url_forum,
$details = array();
/**
* Constructeur
@ -53,12 +59,20 @@ class Asteroide extends Surface
parent::User($SESS->values['id']); //On utilise le numéro d'utilisateur enregistré en session
$this->galaxie = $plan["galaxie"];
$this->ss = $plan["ss"];
$this->nom_asteroide = $plan["nom_asteroide"];
$this->image = $this->image_asteroide = $plan["image_asteroide"];
$this->debris_met = $plan["debris_met"];
$this->debris_cri = $plan["debris_cri"];
$this->metal = $plan["metal"];
$this->cristal = $plan["cristal"];
$this->hydrogene = $plan["hydrogene"];
$this->credits_alliance = $plan["credits_alliance"];
$this->fondateur = $plan["fondateur"];
$this->nom_alliance = $plan["nom_alliance"];
$this->wing = $plan["wing"];
$this->tag = $plan["tag"];
$this->url_forum = $plan["url_forum"];
$this->url_chat = $plan["url_chat"];
foreach($alli_batimentVAR as $bat)
$this->batiments[] = $plan[$bat];
@ -78,419 +92,107 @@ class Asteroide extends Surface
}
}
/**
* Actualise les ressources de la planète en fonction de la production et termine les files d'attentes.
*
* @return void
* @access public
*/
function loadDetails()
{
global $table_alliances;
$bdd = new bdd();
$this->details = $bdd->unique_query("SELECT presentation, message_inscription, texte_interne, port_chat, chan_chat, image, etat_inscription, defcon, defcon_txt FROM $table_alliances WHERE id = ".$this->id.";");
$bdd->deconnexion();
}
function actualiser($actuFile = true, $first = false)
{
//Actualisation des files d'attentes
if ($actuFile)
{
$this->file_ready("batiments");
$this->file_readyTechno("technologies");
$this->file_ready("casernes");
$this->file_ready("terrestres");
$this->file_ready("vaisseaux");
}
//Calcul de la capacité de stockage maximale
if (!empty($timestamp_lastSilo))
{
$this->cap = pow(2, $this->batiments[10]-1) * 100000;
$capnouv = pow(2, $this->batiments[10]) * 100000;
}
else
$this->cap = pow(2, $this->batiments[10]) * 100000;
//Calcul du temps écoulé depuis la dernière mise à jour de la planète
$temps_ecoule = time() - $this->timestamp;
$ressources = $this->production($temps_ecoule);
if ($this->metal + $ressources[0] < $this->cap)
$this->metal += $ressources[0];
else
{
//Si les capacité de stockage ont changé depuis la dernière actualisation
if (isset($capnouv))
{
$ressources = $this->production(time() - $this->timestamp_lastSilo);
if ($this->metal + $ressources[0] < $capnouv)
$this->metal += $ressources[0];
}
else
{
$this->alert_ressources[0] = true;
$this->metal = $this->cap;
}
}
if ($this->cristal + $ressources[1] < $this->cap)
$this->cristal += $ressources[1];
else
{
//Si les capacité de stockage ont changé depuis la dernière actualisation
if (isset($capnouv))
{
$ressources = $this->production(time() - $this->timestamp_lastSilo);
if ($this->cristal + $ressources[1] < $capnouv)
$this->cristal += $ressources[1];
}
else
{
$this->alert_ressources[1] = true;
$this->cristal = $this->cap;
}
}
if ($this->hydrogene + $ressources[2] < $this->cap)
$this->hydrogene += $ressources[2];
else
{
//Si les capacité de stockage ont changé depuis la dernière actualisation
if (isset($capnouv))
{
$ressources = $this->production(time() - $this->timestamp_lastSilo);
if ($this->hydrogene + $ressources[2] < $capnouv)
$this->hydrogene += $ressources[2];
}
else
{
$this->alert_ressources[2] = true;
$this->hydrogene = $this->cap;
}
}
//Vérification de la date pour faire les actions journalières
if (date('zya') != date('zya', $this->timestamp))
{
//On évalue le moral
$this->evalMoral($first);
//Si la population est à 0, on ajoute des habitants
if ($this->population <= 0)
$this->population = 1000;
$popPlus = $this->population * 0.0153^max(1, floor((time()-$this->timestamp)/86400));
if ($this->politique == 2)
$popPlus *= 1.1; //Communisme : 10 % de population qui arrive en plus.
elseif ($this->politique == 3)
$popPlus *= 1.05; //Démocratie : 5 % de population qui arrive en plus.
if ($this->technologies[2] & 4)
$popPlus *= 1.15;
elseif ($this->technologies[2] & 2)
$popPlus *= 1.10;
elseif ($this->technologies[2] & 1)
$popPlus *= 1.05;
$this->population += $popPlus;
$this->credits += $this->population/100*exp(0.01)*25;
$this->modif[] = 'population';
}
$this->timestamp = time();
//Calcul du nombre de cases restantes
$this->casesRest = $this->cases;
foreach($this->batiments as $bat)
$this->casesRest -= $bat;
}
function setMoral($difference)
{
$this->moral += $difference;
//Ajustement du moral
if ($this->moral > 1)
$this->moral = 1;
elseif ($this->moral < 0)
$this->moral = 0;
if (!in_array("moral", $this->modif))
$this->modif[] = "moral";
}
function evalMoral($first = false)
{
//Cas de sous-production
if (($this->coeff_bat[0] + $this->coeff_bat[1] + $this->coeff_bat[2])/3 < 0.9)
{
if ($this->politique == 2)
$this->moral -= 0.10; //Communisme : démoralise 2x plus
else
$this->moral -= 0.05;
if (!in_array('moral', $this->modif))
$this->modif[] = 'moral';
}
//Surpopulation
//Surlogement
//Ajustement du moral en fonction de la politique
if ($this->politique == 1 && $this->moral > 0.7)
$this->moral = 0.7;
//On vérifie qu'on ne dépasse pas le maximum
if ($this->moral > 1)
$this->moral = 1;
if ($this->moral < 0)
$this->moral = 0;
//Isolement si besoin
if ($this->moral < 0.1)
{
//On vérifie qu'il ne s'agit pas de la planète mère
global $bdd, $table_planete;
$bdd->connexion();
$res = $bdd->unique_query("SELECT id FROM $table_planete WHERE id_user = ".$this->id_user." ORDER BY id LIMIT 1;");
$bdd->deconnexion();
if ($res['id'] != $this->id)
{
if ($this->moral <= 0.01 || $this->moral <= 0.04)
{
if ($this->moral <= 0.01)
$rand = rand(0,4);
else
$rand = rand(0,20);
//Perte de la planète
if ($rand == 1)
{
$bdd->connexion();
$bdd->query("DELETE FROM $table_planete WHERE id = ".$this->id.";");
$bdd->deconnexion();
send_mp($this->id_user, 'Perte de contrôle de '.$this->nom_planete, "Suite à une démoralisation percistante de la population sur la planète ".$this->nom_planete." [".$this->galaxie.":".$this->ss.":".$this->position."], la population a renversé votre gouvernement en tuant tous vos gouverneurs. Vous perdez donc définitivement le contrôle de cette planète.");
if (!$first)
{
$SESS->values['idPlan'] = $res['id'];
erreur('La population de cette planète est tellement démoralisée qu\'elle s\'est révolté contre vous. Vous ne contrôlez plus cette planète.');
}
}
}
elseif ($this->moral <= 0.06 || $this->moral <= 0.1)
{
if ($this->moral <= 0.06)
$rand = rand(0,2);
else
$rand = rand(0,10);
//Perte de contrôle temporaire
if ($rand == 1)
{
$debut = time() - rand(0, 3600)*4;
$fin = $debut + 86400;
$this->isolement = array($debut, $fin);
if (!in_array('isolement', $this->modif)) $this->modif[] = 'isolement';
send_mp($this->id_user, 'Perte de contrôle temporaire de '.$this->nom_planete, "Suite à une démoralisation percistante de la population sur la planète ".$this->nom_planete." [".$this->galaxie.":".$this->ss.":".$this->position."], la population a pris le contrôle de votre planète. Vous perdez le contrôle de cette planète le temps que vos gouverneurs reprennent le pouvoir.");
if (!$first)
{
$SESS->values['idPlan'] = $res['id'];
erreur('La population de cette planète est tellement démoralisée qu\'elle s\'est révoltée contre vous. Vous perdez temporairement le contrôle de cette planète.');
}
}
}
}
$this->file_bat->batiment_ready($this);
$this->file_vais->vaisseaux_ready($this);
}
}
/**
* Vérifie si la planète est isolée ou non
*
* @return boolean
* @access public
*/
function isolement()
function checkAndRetireRessources($metal, $cristal, $hydrogene, $credits)
{
return false;
if ($this->metal >= $metal && $this->cristal >= $cristal && $this->hydrogene >= $hydrogene && $this->credits_alliance >= $credits)
{
$this->metal -= $metal;
$this->cristal -= $cristal;
$this->hydrogene -= $hydrogene;
$this->credits -= $credits;
$this->addModif("force");
$this->addModif("credits_alliance");
return true;
}
else
return false;
}
/**
* Calcul les ressources produites en fonction de $temps_ecoule
* @param int $temps_ecoule Temps écoulé depuis la dernière actualisation
*
* @return array
* @access public
*/
function production($temps_ecoule, $retarray = false)
function addRessources($metal, $cristal, $hydrogene, $credits)
{
//Accélération de la production
$temps_ecoule *= VITESSE;
$perte = 0;
//Calcul de la consomation d'énergie
if ($this->batiments[0] > 0)
$energie_m = ceil(exp(0.28*$this->batiments[0])*10);
else
$energie_m = 0;
if ($this->batiments[1] > 0)
$energie_c = ceil(exp(0.28*$this->batiments[1])*10);
else
$energie_c = 0;
if ($this->batiments[2] > 0)
$energie_h = ceil(exp(0.2849*$this->batiments[2])*13);
else
$energie_h = 0;
if ($this->batiments[3] > 0)
$energie_s = ceil(exp(0.28*$this->batiments[3])*22);
else
$energie_s = 0;
if ($this->batiments[4] > 0)
$energie_f = ceil(exp(0.297*$this->batiments[4])*25);
else
$energie_f = 0;
//Calcul de la consomation d'énergie
$this->energieConso = $energie_m * $this->coeff_bat[0] + $energie_c * $this->coeff_bat[1] + $energie_h * $this->coeff_bat[2];
$nrjmx = $energie_m + $energie_c + $energie_h;
//Calcul de la production d'énergie
$this->energie = $energie_s * $this->coeff_bat[3] + $energie_f * $this->coeff_bat[4];
if ($this->energieConso == 0)
$coeff = 0;
else
$coeff = $this->energie / $this->energieConso;
if ($coeff < 0)
$coeff = 0;
elseif ($coeff > 1)
$coeff = 1;
$Ncoeff = array();
for($i = 0; $i < 3; $i++)
$this->metal += $metal;
if ($this->metal > $this->cap)
{
$Ncoeff[$i] = $coeff * $this->coeff_bat[$i];
if ($Ncoeff[$i] > 1)
$Ncoeff[$i] = 1;
if ($Ncoeff[$i] < $this->coeff_bat[$i] && $this->batiments[$i] != 0)
{
$this->coeff_bat[$i] = $Ncoeff[$i];
if (!in_array('coeff_bat', $this->modif))
$this->modif[] = 'coeff_bat';
}
$perte += $this->metal - $this->cap;
$this->metal = $this->cap;
}
//Calcul de la consomation d'hydrogène
if ($this->batiments[4] > 0)
$conso_h = ((ceil(pow(1.34,($this->batiments[4]-1))*9)/3600)*$temps_ecoule) * $this->coeff_bat[4];
else
$conso_h = 0;
//Calcul des production de ressources
if ($this->batiments[0] <= 0 || $this->batiments[3] <= 0)
$prod_met = 0.011 * $temps_ecoule;
else
$prod_met = ((ceil(pow(1.1, $this->batiments[0]) * 35 * $this->batiments[0]) / 3600) * $temps_ecoule) * $this->coeff_bat[0] * 1.5;
if ($this->batiments[1] <= 0 || $this->batiments[3] <= 0)
$prod_cri = 0.0055 * $temps_ecoule;
else
$prod_cri = ((ceil(pow(1.1, $this->batiments[1]) * 23 * $this->batiments[1]) / 3600) * $temps_ecoule) * $this->coeff_bat[1] * 1.5;
if ($this->batiments[2] <= 0)
$prod_hy = 0;
else
$prod_hy = ((ceil(pow(1.1, $this->batiments[2]) * 14 * ($this->batiments[2] + 0.7)) / 3600) * $temps_ecoule) * $this->coeff_bat[2] * 1.5;
//Augmentation de la production en fonction des technologies
if ($this->technologies[0] &4)
$this->cristal += $cristal;
if ($this->cristal > $this->cap)
{
$prod_met *= 1.15;
$prod_cri *= 1.15;
$prod_hy *= 1.15;
}
elseif ($this->technologies[0] &2)
{
$prod_met *= 1.10;
$prod_cri *= 1.10;
$prod_hy *= 1.10;
}
elseif ($this->technologies[0] &1)
{
$prod_met *= 1.05;
$prod_cri *= 1.05;
$prod_hy *= 1.05;
$perte += $this->cristal - $this->cap;
$this->cristal = $this->cap;
}
//Augmentation de la production en fonction du moral
if ($this->moral > 0.9)
$this->hydrogene += $hydrogene;
if ($this->hydrogene > $this->cap)
{
$prod_met *= 1.05;
$prod_cri *= 1.05;
$prod_hy *= 1.05;
}
elseif ($this->moral > 0.75)
{
$prod_met *= 1.02;
$prod_cri *= 1.02;
$prod_hy *= 1.02;
}
elseif ($this->moral < 0.45)
{
$prod_met *= 0.97;
$prod_cri *= 0.97;
$prod_hy *= 0.97;
}
elseif ($this->moral < 0.25)
{
$prod_met *= 0.94;
$prod_cri *= 0.94;
$prod_hy *= 0.94;
$perte += $this->hydrogene - $this->cap;
$this->hydrogene = $this->cap;
}
//Augmentation de la production en fonction de la politique
if ($this->politique == 2)
{
$prod_met *= 1.10;
$prod_cri *= 1.10;
$prod_hy *= 1.10;
}
$this->hydrogecredits_alliancene += $credits;
//On enlève la consomation d'hydrogène
$prod_hy -= $conso_h;
$this->addModif("force");
$this->addModif("credits_alliance");
if ($retarray)
return array(array(ceil($this->coeff_bat[0]*100), ceil($this->coeff_bat[1]*100), ceil($this->coeff_bat[2]*100), ceil($this->coeff_bat[3]*100), ceil($this->coeff_bat[4]*100)), array($prod_met, $prod_cri, $prod_hy + $conso_h, $energie_s*$this->coeff_bat[3], $energie_f*$this->coeff_bat[4]), array($energie_m*$this->coeff_bat[0], $energie_c*$this->coeff_bat[1], $energie_h*$this->coeff_bat[2], $conso_h, ($energie_s*$this->coeff_bat[3] + $energie_f*$this->coeff_bat[4])-($energie_m*$this->coeff_bat[0] + $energie_c*$this->coeff_bat[1] + $energie_h*$this->coeff_bat[2])));
else
return array($prod_met, $prod_cri, $prod_hy);
return $perte;
}
function creer($id_user)
function addCreditsAlliance($credits)
{
//Définition des paramètres de l'utilisateur pour la planète
$this->id_user = $id_user;
$this->credits_alliance += $credits;
$this->addModif("credits_alliance");
return 0;
}
function creer($fondateur, $mere = false)
{
global $VAR, $table_alliances_creation;
$bdd = new BDD();
$alliance = $bdd->unique_query("SELECT * FROM $table_alliances_creation WHERE fondateur = ".$fondateur->id_user." LIMIT 1;");
$bdd->deconnexion();
//On vérifie que l'alliance n'a pas déjà été créée
if (empty($alliance))
return 1;
//Définition des paramètres de l'utilisateur pour l'astéroide
$this->fondateur = $alliance["fondateur"];
$this->race = $fondateur->race;
//Génération du nombre de case et de l'image en fonction de la position dans le système
if ($this->position > MAX_PLANETE*0.75)
{
$this->cases = mt_rand(200,255);
$this->image = mt_rand(1,19);
}
elseif ($this->position > MAX_PLANETE/2)
{
$this->cases = mt_rand(250,300);
$this->image = mt_rand(1,19);
}
elseif ($this->position > MAX_PLANETE/4)
{
$this->cases = mt_rand(175,260);
$this->image = mt_rand(1,19);
}
else
{
$this->cases = mt_rand(150,220);
$this->image = mt_rand(1,19);
}
$this->sante = 1;
$this->nom_alliance = $alliance["nom_alliance"];
$this->tag = $alliance["tag"];
$this->nom_asteroide = $alliance["nom_alliance"];
$this->image_asteroide = mt_rand(1,3);
//Définition des principaux paramètres de la planète
$this->nom_planete = 'Planète colonisée';
$this->timestamp = time();
$this->metal = 1000;
$this->cristal = 700;
$this->hydrogene = 0;
$this->modif = array("id_user", "nom_planete", "galaxie", "ss", "position", "image", "cases", "timestamp", "metal", "cristal", "hydrogene");
$this->modif = array("fondateur", "race", "nom_alliance", "galaxie", "ss", "tag", "nom_asteroide", "image_asteroide");
}
/**
@ -501,12 +203,10 @@ class Asteroide extends Surface
*/
function __destruct()
{
if (empty($this->ss) || empty($this->id_user))
if (empty($this->ss) || empty($this->fondateur))
return;
if ($this->id_user == 1)
var_dump($this);
global $var___db, $config, $table_planete;
global $table_alliances;
if (empty($this->id))
{
$out1 = array(); $out2 = array();
@ -559,7 +259,7 @@ class Asteroide extends Surface
}
}
}
$bdd->query("INSERT INTO $table_planete (".implode(', ', $out1).", hash_planete) VALUES (".implode(', ', $out2).", SHA1(CONCAT('g',planete.galaxie,'s',planete.ss,'p',planete.position)))");
$bdd->query("INSERT INTO $table_alliances (".implode(', ', $out1).") VALUES (".implode(', ', $out2).")");
$bdd->deconnexion();
}
else
@ -570,7 +270,7 @@ class Asteroide extends Surface
for($i = 0; $i < $nb; $i++)
{
if ($this->modif[$i] == "force")
$out[] = "timestamp = timestamp";
$out[] = "metal = ".$this->metal.", cristal = ".$this->cristal.", hydrogene = ".$this->hydrogene;
elseif ($this->modif[$i] == 'technologies')
$this->modifUser[] = $this->modif[$i];
elseif (is_object($this->{$this->modif[$i]}))
@ -598,7 +298,7 @@ class Asteroide extends Surface
else
{
if ($this->modif[$i] == "batiments")
$calc = "batiment";
$calc = "alli_batiment";
elseif ($this->modif[$i] == "technologies")
$calc = "technolo";
elseif ($this->modif[$i] == "casernes")
@ -624,7 +324,7 @@ class Asteroide extends Surface
}
if (!empty($out))
{
$sql = "UPDATE $table_planete SET timestamp = ".time().", metal = ".$this->metal.", cristal = ".$this->cristal.", hydrogene = ".$this->hydrogene.", ".implode(', ', $out)." WHERE id = ".$this->id.";";
$sql = "UPDATE $table_alliances SET ".implode(', ', $out)." WHERE id = ".$this->id.";";
if (DEBUG) echo '<br /><br />'.$sql;
$bdd->query($sql);
}

View file

@ -10,7 +10,7 @@
***************************************************************************/
class Donnee
{
static function tailleFile(Planete $planete)
static function tailleFile(Surface $planete)
{
//On calcul la taille maximale de la file d'attente
if (!empty($planete->technologies[1]))
@ -24,7 +24,7 @@ class Donnee
}
static function neededCheck($tableau, Planete $planete)
static function neededCheck($tableau, Surface $planete)
{
if (!is_array($tableau)) return true;
else
@ -61,7 +61,7 @@ class Donnee
}
}
static function print_neededCheck($tableau, Planete $planete, $race)
static function print_neededCheck($tableau, Surface $planete, $race)
{
global $LANG;
if (!is_array($tableau)) return 'Débloqué';
@ -451,6 +451,174 @@ class Donnee
}
static function metalAlli_Batiments($batiment, $niveau, Surface $planete)
{
switch($batiment)
{
case 0:
$metal = ceil(pow(1.5, $niveau)*68);
break;
case 1:
$metal = ceil(pow(1.6, $niveau)*53);
break;
case 2:
$metal = ceil(pow(1.5, $niveau)*242);
break;
case 3:
$metal = ceil(pow(1.5, $niveau)*92);
break;
case 4:
$metal = ceil(pow(1.73, $niveau)*800);
break;
case 5:
$metal = ceil(pow(2, $niveau)*750);
break;
default:
trigger_error("Batiment d'alliance ".$batiment." introuvable dans les données", E_USER_ERROR);
}
return $metal;
}
static function cristalAlli_Batiments($batiment, $niveau, Surface $planete)
{
switch($batiment)
{
case 0:
$cristal = ceil(pow(1.5, $niveau)*17);
break;
case 1:
$cristal = ceil(pow(1.6, $niveau)*27);
break;
case 2:
$cristal = ceil(pow(1.5, $niveau)*72);
break;
case 3:
$cristal = ceil(pow(1.5, $niveau)*37);
break;
case 4:
$cristal = ceil(pow(1.73, $niveau)*420);
break;
case 5:
$cristal = ceil(pow(2, $niveau)*500);
break;
default:
trigger_error("Batiment d'alliance ".$batiment." introuvable dans les données", E_USER_ERROR);
}
return $cristal;
}
static function hydrogeneAlli_Batiments($batiment, $niveau, Surface $planete)
{
switch($batiment)
{
case 0:
$hydrogene = 0;
break;
case 1:
$hydrogene = 0;
break;
case 2:
$hydrogene = 0;
break;
case 3:
$hydrogene = 0;
break;
case 4:
$hydrogene = ceil(pow(1.68, $niveau)*285);
break;
case 5:
$hydrogene = 0;
break;
default:
trigger_error("Batiment d'alliance ".$batiment." introuvable dans les données", E_USER_ERROR);
}
return $hydrogene;
}
static function creditsAlli_Batiments($batiment, $niveau, Surface $planete)
{
switch($batiment)
{
case 0:
$credits = ceil(pow(1.68, $niveau)*25);
break;
case 1:
$credits = ceil(pow(1.68, $niveau)*85);
break;
case 2:
$credits = ceil(pow(1.68, $niveau)*185);
break;
case 3:
$credits = ceil(pow(1.68, $niveau)*285);
break;
case 4:
$credits = ceil(pow(1.68, $niveau)*385);
break;
case 5:
$credits = ceil(pow(1.68, $niveau)*485);
break;
default:
trigger_error("Batiment d'alliance ".$batiment." introuvable dans les données", E_USER_ERROR);
}
return $credits;
}
static function tempsAlli_Batiments($batiment, $niveau, Surface $planete)
{
switch($batiment)
{
case 0:
$sec = pow(1.5, $niveau)*6;
break;
case 1:
$sec = pow(1.55, $niveau)*6;
break;
case 2:
$sec = pow(1.624, $niveau)*6;
break;
case 3:
$sec = pow(1.597, $niveau)*6;
break;
case 4:
$sec = pow(1.7, $niveau)*6;
break;
case 5:
$sec = ceil(pow(2, $niveau)*720);
break;
default:
trigger_error("Batiment d'alliance ".$batiment." introuvable dans les données", E_USER_ERROR);
}
//Accélération du temps de construction
$sec /= VITESSE;
return $sec;
}
static function neededAlli_Batiments($batiment, Surface $planete)
{
//Maximum 5 niveaux
if ($planete->batiments[$batiment] >= 5)
return false;
global $neededAlli_Batiments;
return Donnee::neededCheck($neededAlli_Batiments[$batiment], $planete);
}
static function print_neededAlli_Batiments($batiment, Surface $planete, $race)
{
global $neededAlli_Batiments;
return Donnee::print_neededCheck($neededAlli_Batiments[$batiment], $planete, $race);
}
static function donneeTechnologie($branche, $idTechnologie, $retour, Planete $planete)
{
//TODO : Faire un switch pour ne renvoyer le tableau que de la branche plutôt que ce tableau avec l'intégralité des branches.
@ -1198,7 +1366,7 @@ class Donnee
}
static function metalVaisseaux($vaisseau, Planete $planete, $nombre = 1)
static function metalVaisseaux($vaisseau, Surface $planete, $nombre = 1)
{
switch($vaisseau)
{
@ -1255,7 +1423,7 @@ class Donnee
return $metal * $nombre;
}
static function cristalVaisseaux($vaisseau, Planete $planete, $nombre = 1)
static function cristalVaisseaux($vaisseau, Surface $planete, $nombre = 1)
{
switch($vaisseau)
{
@ -1312,7 +1480,7 @@ class Donnee
return $cristal * $nombre;
}
static function hydrogeneVaisseaux($vaisseau, Planete $planete, $nombre = 1)
static function hydrogeneVaisseaux($vaisseau, Surface $planete, $nombre = 1)
{
switch($vaisseau)
{
@ -1369,7 +1537,7 @@ class Donnee
return $hydrogene * $nombre;
}
static function tempsVaisseaux($vaisseau, Planete $planete, $nombre = 1)
static function tempsVaisseaux($vaisseau, Surface $planete, $nombre = 1)
{
switch($vaisseau)
{
@ -1437,13 +1605,23 @@ class Donnee
$temps /= VITESSE;
//On tient compte des bonus
return ceil($temps/pow(1.25, ($planete->batiments[8] - $moins))) * $nombre;
if (SURFACE == "planete")
return ceil($temps/pow(1.25, ($planete->batiments[8] - $moins))) * $nombre;
else
return ($temps * $nombre);
}
static function neededVaisseaux($vaisseau, Planete $planete)
static function neededVaisseaux($vaisseau, Surface $planete)
{
global $neededVaisseaux;
return Donnee::neededCheck($neededVaisseaux[$vaisseau], $planete);
if (SURFACE == "asteroide")
{
return true;
}
else
{
global $neededVaisseaux;
return Donnee::neededCheck($neededVaisseaux[$vaisseau], $planete);
}
}
static function print_neededVaisseaux($vaisseau, Planete $planete, $race)

View file

@ -1,12 +1,13 @@
<?php
//Gestion des dépendances, on importe les classes nécessaires à la classe en cours
include_once("game/Class/class.exceptionHB.php");
include_once("game/Class/class.donnee.php");
/***************************************************************************
* class.file.php
* ----------------
* begin : Samedi 11 octobre 2008
* update : Jeudi 26 février 2009
* update : Vendredi 1e mai 2009
* email : nemunaire@gmail.com
*
*
@ -27,7 +28,9 @@ class File
function reajusteVacances($timeVac)
{
if (isset($this->file[0]))
$this->file[0] += time() - $timeVac;
$this->time += time() - $timeVac;
return serialize($this);
}
function refreshTime()
@ -69,6 +72,27 @@ class File
}
}
}
elseif ($this->type == "alli_batiments")
{
$batiments = $planete->batiments;
foreach ($this->file as $key => $element)
{
if ($element[1]) //Cas d'une démolition
{
$temps = Donnee::tempsAlli_Batiments($element[0], $batiments[$element[0]]--, $planete) * 0.6;
if (count($out) == 0)
$temps -= time() - $this->time;
$out[$key] = array($element[0], $element[1], ceil($temps));
}
else //Cas d'une construction
{
$temps = Donnee::tempsAlli_Batiments($element[0], ++$batiments[$element[0]], $planete);
if (count($out) == 0)
$temps -= time() - $this->time;
$out[$key] = array($element[0], $element[1], ceil($temps));
}
}
}
elseif ($this->type == "technologies")
{
foreach ($this->file as $key => $element)
@ -181,6 +205,14 @@ class File
return false;
}
function hasObject()
{
if (empty($this->file[0]))
return false;
else
return true;
}
function objectInFile($objet)
{
if ($this->file)
@ -194,18 +226,27 @@ class File
return false;
}
function batiment_addObjet($objet, Planete $planete)
function batiment_addObjet($objet, Surface $planete)
{
//On vérifie que l'on ne dépasse pas la taille maximale de la file
if (Donnee::tailleFile($planete) <= count($this->file))
throw new ExceptionHB(1, 1);
//Validation des conditions de construction
if (!Donnee::neededBatiments($objet, $planete))
throw new ExceptionHB(1, 2);
if (is_a($planete, "Asteroide"))
{
if (!Donnee::neededAlli_Batiments($objet, $planete))
throw new ExceptionHB(1, 2);
}
else
{
if (!Donnee::neededBatiments($objet, $planete))
throw new ExceptionHB(1, 2);
}
//On vérifie qu'il reste suffisamment de place sur la planète
if ($planete->casesRest < count($this->file))
if (!is_a($planete, "Asteroide") && $planete->casesRest < count($this->file))
{
foreach($this->file as $argh)
throw new ExceptionHB(1, 0);
@ -219,12 +260,12 @@ class File
//Calcul du prochain niveau du batiment
if (in_array(array($objet, false), $this->file)) //Si le batiment est déjà en file d'attente, on recherche le prochain niveau à construire
{
$nbOccurence = 0;
$nbOccurence = 1;
foreach($this->file as $obj)
{
if ($obj[0] == $objet) $nbOccurence++;
}
$nextLvl = $planete->batiments[$objet] + 1 + $nbOccurence;
$nextLvl = $planete->batiments[$objet] + $nbOccurence;
}
else
$nextLvl = $planete->batiments[$objet] + 1;
@ -233,7 +274,7 @@ class File
$this->refreshTime();
//On vérifie qu'il y ait assez de ressources sur la planète
if ($planete->checkAndRetireRessources(Donnee::metalBatiments($objet, $nextLvl, $planete), Donnee::cristalBatiments($objet, $nextLvl, $planete), Donnee::hydrogeneBatiments($objet, $nextLvl, $planete), 0))
if ((!is_a($planete, "Asteroide") && $planete->checkAndRetireRessources(Donnee::metalBatiments($objet, $nextLvl, $planete), Donnee::cristalBatiments($objet, $nextLvl, $planete), Donnee::hydrogeneBatiments($objet, $nextLvl, $planete), 0)) || (is_a($planete, "Asteroide") && $planete->checkAndRetireRessources(0, 0, 0, Donnee::creditsAlli_Batiments($objet, $nextLvl, $planete))))
{
$this->file[] = array($objet, false);
$planete->addModif("file_bat");
@ -243,7 +284,7 @@ class File
throw new ExceptionHB(1, 4);
}
function batiment_addDemolition($objet, Planete $planete)
function batiment_addDemolition($objet, Surface $planete)
{
//On vérifie que l'on ne dépasse pas la taille maximale de la file
if (Donnee::tailleFile($planete) <= count($this->file))
@ -267,7 +308,7 @@ class File
return true;
}
function batiment_delObjet($id, Planete $planete)
function batiment_delObjet($id, Surface $planete)
{
//Vérification de l'existance de l'objet en file d'attente
if (empty($this->file[$id]))
@ -292,7 +333,7 @@ class File
$id = $key;
}
}
$lvlAnnule = $planete->batiments[$objet] + 1 + $occurence;
$lvlAnnule = $planete->batiments[$objet] + $occurence;
}
//On met à jour le temps si on vient d'annuler le premier batiment en lice
@ -301,8 +342,10 @@ class File
$planete->addModif("file_bat");
if (is_a($planete, "Asteroide") && !$this->file[$id][1])
$planete->addRessources(0, 0, 0, Donnee::creditsAlli_Batiments($objet, $lvlAnnule, $planete));
//On redonne 60% des ressources au joueur si c'est la première construction dans la file d'attente
if ($id == 0 && !$this->file[$id][1])
elseif ($id == 0 && !$this->file[$id][1])
$planete->addRessources(Donnee::metalBatiments($objet, $lvlAnnule, $planete)*0.6, Donnee::cristalBatiments($objet, $lvlAnnule, $planete)*0.6, Donnee::hydrogeneBatiments(abs($objet), $lvlAnnule, $planete)*0.6);
elseif (!$this->file[$id][1])
$planete->addRessources(Donnee::metalBatiments($objet, $lvlAnnule, $planete), Donnee::cristalBatiments($objet, $lvlAnnule, $planete), Donnee::hydrogeneBatiments($objet, $lvlAnnule, $planete));
@ -313,7 +356,7 @@ class File
return true;
}
function batiment_ready(Planete $planete)
function batiment_ready(Surface $planete)
{
//On vérifie qu'il existe un bâtiment en construction
if (count($this->file) < 1)
@ -332,13 +375,19 @@ class File
$lvl = $planete->batiments[$element[0]];
//Récupération de 60% du temps nécessaire
$temps = Donnee::tempsBatiments($element[0], $lvl, $planete) * 0.6;
if (is_a($planete, "Asteroide"))
$temps = Donnee::tempsAlli_Batiments($element[0], $lvl, $planete) * 0.6;
else
$temps = Donnee::tempsBatiments($element[0], $lvl, $planete) * 0.6;
//Si le temps écoulé est suffisant
if ($tempsEcoule >= $temps)
{
//On redonne 70% des ressources du batiment au joueur
$planete->addRessources(Donnee::metalBatiments($element[0], $lvl, $planete)*0.7, Donnee::cristalBatiments($element[0], $lvl, $planete)*0.7, Donnee::hydrogeneBatiments($element[0], $lvl, $planete)*0.7);
if (is_a($planete, "Asteroide"))
$planete->addRessources(Donnee::metalAlli_Batiments($element[0], $lvl, $planete)*0.7, Donnee::cristalAlli_Batiments($element[0], $lvl, $planete)*0.7, Donnee::hydrogeneAlli_Batiments($element[0], $lvl, $planete)*0.7, Donnee::creditsAlli_Batiments($element[0], $lvl, $planete)*0.7);
else
$planete->addRessources(Donnee::metalBatiments($element[0], $lvl, $planete)*0.7, Donnee::cristalBatiments($element[0], $lvl, $planete)*0.7, Donnee::hydrogeneBatiments($element[0], $lvl, $planete)*0.7);
//On retire un niveau au batiment
$planete->batiments[$element[0]]--;
@ -361,7 +410,10 @@ class File
$lvl = $planete->batiments[$element[0]] + 1;
//Récupération du temps nécessaire
$temps = Donnee::tempsBatiments($element[0], $lvl, $planete);
if (is_a($planete, "Asteroide"))
$temps = Donnee::tempsAlli_Batiments($element[0], $lvl, $planete);
else
$temps = Donnee::tempsBatiments($element[0], $lvl, $planete);
//Si le temps écoulé est suffisant
if ($tempsEcoule >= $temps)
@ -659,6 +711,9 @@ class File
//On demande la mise à jour des champs modifiés
$planete->addModif("casernes");
$planete->addModif("file_cas");
if ($nbUnitee < $element[1])
return false;
}
//Si le temps écoulé n'est pas suffisant pour cette unité, on annule toutes les suivantes
else
@ -689,6 +744,9 @@ class File
//On demande la mise à jour des champs modifiés
$planete->addModif("casernes");
$planete->addModif("file_cas");
if ($nbUnitee < $element[1])
return false;
}
//Si le temps écoulé n'est pas suffisant pour ce batiment, on annule tous les suivants
else
@ -879,6 +937,9 @@ class File
//On demande la mise à jour des champs modifiés
$planete->addModif("terrestres");
$planete->addModif("file_ter");
if ($nbUnitee < $element[1])
return false;
}
//Si le temps écoulé n'est pas suffisant pour cette unité, on annule toutes les suivantes
else
@ -909,6 +970,9 @@ class File
//On demande la mise à jour des champs modifiés
$planete->addModif("terrestres");
$planete->addModif("file_ter");
if ($nbUnitee < $element[1])
return false;
}
//Si le temps écoulé n'est pas suffisant pour ce batiment, on annule tous les suivants
else
@ -918,7 +982,7 @@ class File
}
function vaisseaux_addObjet($objet, $nombre, Planete $planete)
function vaisseaux_addObjet($objet, $nombre, Surface $planete)
{
//Vérification du nombre passé en entrée
if (!is_numeric($nombre) || $nombre < 0 || $nombre > 99999)
@ -979,7 +1043,7 @@ class File
throw new ExceptionHB(3, 4);
}
function vaisseaux_addDemolition($objet, $nombre, Planete $planete)
function vaisseaux_addDemolition($objet, $nombre, Surface $planete)
{
//On vérifie que l'on ne dépasse pas la taille maximale de la file
if (Donnee::tailleFile($planete) <= count($this->file))
@ -1018,7 +1082,7 @@ class File
return true;
}
function vaisseaux_delObjet($id, $nombre, Planete $planete)
function vaisseaux_delObjet($id, $nombre, Surface $planete)
{
//Vérification de l'existance de l'objet en file d'attente
if (empty($this->file[$id]))
@ -1036,10 +1100,10 @@ class File
if ($id == 0 && $nombreMax == $nombre)
$this->time = time();
$planete->addModif("file_ter");
$planete->addModif("file_vais");
if (!$this->file[$id][2])
$planete->addRessources(Donnee::metalVaisseaux($objet, $planete, $nombre), Donnee::cristalVaisseaux($objet, $planete, $nombre), Donnee::hydrogeneVaisseaux($objet, $planete, $nombre));
$planete->addRessources(Donnee::metalVaisseaux($objet, $planete, $nombre), Donnee::cristalVaisseaux($objet, $planete, $nombre), Donnee::hydrogeneVaisseaux($objet, $planete, $nombre), 0);
//Effacement de la file
if ($nombre >= $nombreMax)
@ -1051,7 +1115,7 @@ class File
return true;
}
function vaisseaux_ready(Planete $planete)
function vaisseaux_ready(Surface $planete)
{
//On vérifie qu'il existe une unité en construction
if (count($this->file) < 1)
@ -1084,7 +1148,7 @@ class File
if ($nbUnitee > 0)
{
//On redonne 70% des ressources de l'unité au joueur
$planete->addRessources(Donnee::metalVaisseaux($element[0], $planete, $nbUnitee)*0.7, Donnee::cristalVaisseaux($element[0], $planete, $nbUnitee)*0.7, Donnee::hydrogeneVaisseaux($element[0], $planete, $nbUnitee)*0.7);
$planete->addRessources(Donnee::metalVaisseaux($element[0], $planete, $nbUnitee)*0.7, Donnee::cristalVaisseaux($element[0], $planete, $nbUnitee)*0.7, Donnee::hydrogeneVaisseaux($element[0], $planete, $nbUnitee)*0.7, 0);
//On retire les unités
$planete->vaisseaux[$element[0]] -= $nbUnitee;
@ -1099,6 +1163,9 @@ class File
//On demande la mise à jour des champs modifiés
$planete->addModif("vaisseaux");
$planete->addModif("file_vais");
if ($nbUnitee < $element[1])
return false;
}
//Si le temps écoulé n'est pas suffisant pour cette unité, on annule toutes les suivantes
else
@ -1129,6 +1196,9 @@ class File
//On demande la mise à jour des champs modifiés
$planete->addModif("vaisseaux");
$planete->addModif("file_vais");
if ($nbUnitee < $element[1])
return false;
}
//Si le temps écoulé n'est pas suffisant pour ce batiment, on annule tous les suivants
else

View file

@ -15,10 +15,12 @@ class Flotte
$nom,
$start_planete,
$start_time,
$start_type,
$end_planete,
$end_time,
$end_type,
$ret_planete,
$ret_type,
$ret_time,
$nb_vais,
$vaisseaux = array(),
@ -45,24 +47,26 @@ class Flotte
{
global $table_flottes;
global $nomvaisnVAR, $ressoVAR;
$id = intval($id);
$bdd = new BDD();
$flotte = $bdd->unique_query("SELECT * FROM $table_flottes WHERE id = $id;");
if ($verrou)
$bdd->query("UPDATE $table_flottes SET last = ".time()." WHERE id = $id;"); //Obtention d'un vérrou de 10 seconde sur la flotte
$bdd->deconnexion();
if (!empty($flotte))
{
$this->id_flotte = $flotte["id"];
$this->nom = $flotte["nom"];
$this->start_planete = $flotte["start_planete"];
$this->start_type = $flotte["start_type"];
$this->start_time = $flotte["start_time"];
$this->end_planete = $flotte["end_planete"];
$this->end_type = $flotte["end_type"];
$this->end_time = $flotte["end_time"];
$this->ret_planete = $flotte["ret_planete"];
$this->ret_type = $flotte["ret_type"];
$this->ret_time = $flotte["ret_time"];
$this->tactique = $flotte["tactique"];
$this->mission = $flotte["mission"];
@ -70,12 +74,12 @@ class Flotte
$this->statut = $flotte["statut"];
$this->last = $flotte["last"];
$this->nb_vais = $flotte["nb_vais"];
foreach($nomvaisnVAR as $vais)
$this->vaisseaux[] = $flotte[$vais];
$this->contenu = array($flotte["contenu_metal"], $flotte["contenu_cristal"], $flotte["contenu_hydrogene"]);
$this->calculer();
}
}
@ -99,71 +103,181 @@ class Flotte
function load_planete()
{
if (is_numeric($this->start_planete) && !empty($this->start_planete))
if (!empty($this->start_planete) && is_numeric($this->start_planete))
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if ($planete->id == $this->start_planete)
$this->start_planete = $planete;
else
$this->start_planete = new Planete($this->start_planete);
//On traite l'importation en fonction des types fournis
if ($this->start_type == 0)
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "planete" && $planete->id == $this->start_planete)
$this->start_planete = $planete;
else
$this->start_planete = new Planete($this->start_planete);
}
elseif ($this->start_type == 2)
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "asteroide" && $planete->id == $this->start_planete)
$this->start_planete = $planete;
else
$this->start_planete = new Asteroide($this->start_planete);
}
}
if (is_numeric($this->end_planete) && !empty($this->end_planete))
if (!empty($this->end_planete) && is_numeric($this->end_planete))
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if ($planete->id == $this->end_planete)
$this->end_planete = $planete;
else
$this->end_planete = new Planete($this->end_planete);
//On traite l'importation en fonction des types fournis
if ($this->end_type == 0 || $this->ret_type == 1)
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "planete" && $planete->id == $this->end_planete)
$this->end_planete = $planete;
else
$this->end_planete = new Planete($this->end_planete);
}
elseif ($this->end_type == 2)
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "asteroide" && $planete->id == $this->end_planete)
$this->end_planete = $planete;
else
$this->end_planete = new Asteroide($this->end_planete);
}
}
if (is_numeric($this->ret_planete) && !empty($this->ret_planete))
if (!empty($this->ret_planete) && is_numeric($this->ret_planete))
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if ($planete->id == $this->ret_planete)
$this->ret_planete = $planete;
else
$this->ret_planete = new Planete($this->ret_planete);
//On traite l'importation en fonction des types fournis
if ($this->ret_type == 0)
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "planete" && $planete->id == $this->ret_planete)
$this->ret_planete = $planete;
else
$this->ret_planete = new Planete($this->ret_planete);
}
elseif ($this->ret_type == 2)
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "asteroide" && $planete->id == $this->ret_planete)
$this->ret_planete = $planete;
else
$this->ret_planete = new Asteroide($this->ret_planete);
}
}
}
function calc_deplacement($start_galaxie, $start_systeme, $start_position, $end_galaxie, $end_systeme, $end_position, $vitesse, $returnArray = false, $returnConso = false)
function creer(Surface $start_planete, $tableau, $resultat)
{
//Si la planète de départ n'est pas chargée, on charge les planètes
if (is_numeric($this->start_planete))
$this->load_planete();
global $config, $nomvais_vitesseP, $nomvais_vitesseS, $nomvais_vitesseG, $nomvais_rs;
$this->vitesse = $vitesse;
$sauv = $start_planete->vaisseaux; //Sauvegarde les vaisseaux de la planète avant le lancement
foreach ($tableau['vaisseaux'] as $key => $vaisseau)
{
$this->vaisseaux[$key] = $vaisseau;
$sauv[$key] -= $vaisseau;
if ($sauv[$key] < 0)
erreur('Vous n\'avez pas assez de vaisseaux sur cette planète pour envoyer cette flotte !', "red", $VAR["menu"]["flotte"]);
}
//Définition des paramètres de la flotte en fonction des données enregistrées en session
$this->nom = $tableau["nom"];
$this->vitesse = $tableau["vitesse"];
$this->mission = $tableau["mission"];
$this->start_planete = $start_planete;
if (SURFACE == "planete")
$this->start_type = 0;
elseif (SURFACE == "asteroide")
$this->start_type = 2;
$this->start_time = time();
//On traite le cas des planètes qui n'existent pas (dans le cas de la mission colonisation)
if ($tableau["mission"] == 2)
{
//On traite le cas des colonisation d'astéroïdes
if ($tableau["end_position"] == "A")
$this->end_type = 3;
else
$this->end_type = 1;
$this->end_planete = $tableau["end_galaxie"].':'.$tableau["end_systeme"].':'.$tableau["end_position"];
}
//On traite le cas des envoie vers les alliances
elseif ($tableau["end_position"] == "A")
{
$this->end_type = 2;
$this->end_planete = $resultat['id'];
}
else
{
$this->end_type = 0;
$this->end_planete = $resultat['id'];
}
if (empty($this->end_planete))
erreur("Planète d'arriver incorrecte !");
//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
$this->calculer();
$calc = Flotte::calc_deplacement($start_planete, $tableau["end_galaxie"], $tableau["end_systeme"], $tableau["end_position"], $tableau["vitesse"]/100, $tableau["vaisseaux"], $this->contenuMax - $tableau["embarquer"][0] - $tableau["embarquer"][1] - $tableau["embarquer"][2], false, true);
$this->end_time = $calc[0];
//On double la consomation si on fait un aller-retour
if ($tableau["mission"] == 1 || $tableau["mission"] == 2 || $tableau["mission"] == 4 || $tableau["mission"] == 5)
$calc[1] *= 2;
if ($this->contenuMax < $tableau["embarquer"][0] + $tableau["embarquer"][1] + $tableau["embarquer"][2] + $calc[1])
erreur('Vous ne pouvez pas embarquer autant de ressources, les cales débordent. '.$this->contenuMax, "red", '?p=flotte', 3500);
elseif ($start_planete->metal < $tableau["embarquer"][0] || $start_planete->cristal < $tableau["embarquer"][1] || $start_planete->hydrogene < $tableau["embarquer"][2] + $calc[1])
erreur('Vous n\'avez pas assez de ressources sur cette planète pour envoyer cette flotte.', "red", '?p=flotte', 3500);
$this->contenu = $tableau["embarquer"];
$this->modifFlotte = "INSERT";
//On actualise la planète
$start_planete->metal -= $tableau["embarquer"][0];
$start_planete->cristal -= $tableau["embarquer"][1];
$start_planete->hydrogene -= floor($tableau["embarquer"][2] + $calc[1]);
$start_planete->vaisseaux = $sauv;
$start_planete->addModif("vaisseaux");
$start_planete->addModif("force");
}
static function calc_deplacement($start_planete, $end_galaxie, $end_systeme, $end_position, $vitesse, $vaisseaux, $contenuDispo, $returnArray = false, $returnConso = false)
{
global $VAR, $nomvais_vitesseP, $nomvais_vitesseS, $nomvais_vitesseG, $nomvais_rs;
//Calcul de la longueur du déplacement
$diff_galaxie = abs($start_galaxie - $end_galaxie);
$diff_systeme = abs($start_systeme - $end_systeme);
$diff_position = abs($start_position - $end_position);
$diff_galaxie = abs($start_planete->galaxie - $end_galaxie);
$diff_systeme = abs($start_planete->ss - $end_systeme);
$diff_position = abs($start_planete->position - $end_position);
$diff_centre_position_start = abs(ceil($config['nb_amas']/2) - $start_position);
$diff_centre_systeme_start = abs(ceil($config['nb_systeme']/2) - $start_systeme);
$diff_centre_position_start = abs(ceil($VAR['nb_amas']/2) - $start_planete->position);
$diff_centre_systeme_start = abs(ceil($VAR['nb_systeme']/2) - $start_planete->ss);
$diff_centre_position_end = abs(ceil($config['nb_amas']/2) - $end_position);
$diff_centre_systeme_end = abs(ceil($config['nb_systeme']/2) - $end_systeme);
$diff_centre_position_end = abs(ceil($VAR['nb_amas']/2) - $end_position);
$diff_centre_systeme_end = abs(ceil($VAR['nb_systeme']/2) - $end_systeme);
//Calcul du temps de déplacement pour chaque vaisseau
$temps = array(); $conso = array(0, 0, 0);
foreach($this->vaisseaux as $key => $vais)
foreach($vaisseaux as $key => $vais)
{
//S'il n'y a pas de vaisseaux de ce type, on ne calcul pas leur vitesse
if ($vais == 0)
continue;
//Calcul du temps de déplacement entre planètes
if ($start_systeme == $end_systeme && $start_galaxie == $end_galaxie)
if ($start_planete->ss == $end_systeme && $start_planete->galaxie == $end_galaxie)
{
$temps[0][$key] = (10/$nomvais_vitesseP[$key]) * (1 + 0.1 * $diff_position);
$temps[1][$key] = $temps[2][$key] = 0;
}
//Calcul du temps de déplacement entre système
elseif ($start_galaxie == $end_galaxie)
elseif ($start_planete->galaxie == $end_galaxie)
{
$temps[0][$key] = (10/$nomvais_vitesseP[$key]) * (1 + 0.1 * ($diff_centre_position_start + $diff_centre_position_end));
$temps[1][$key] = (20/$nomvais_vitesseS[$key]) * (2 + 1 * $diff_systeme);
@ -178,7 +292,7 @@ class Flotte
}
//Calcul du bonus pour le réacteur à combustion
$techR = $this->start_planete->technologies[1];
$techR = $start_planete->technologies[1];
if ($techR & 56)
$bonus = 0.7;
elseif ($techR & 24)
@ -191,7 +305,7 @@ class Flotte
$conso[0] += $vais * $temps[0][$key] * $bonus / exp($vitesse/5);
//Calcul du bonus pour le réacteur à fusion
$techR = $this->start_planete->technologies[1];
$techR = $start_planete->technologies[1];
if ($techR &448)
$bonus = 0.7;
elseif ($techR &192)
@ -204,7 +318,7 @@ class Flotte
$conso[1] += $vais * $temps[1][$key] * $bonus / exp($vitesse/7.5);
//Calcul du bonus pour le réacteur à fusion de type II
$techR = $this->start_planete->technologies[1];
$techR = $start_planete->technologies[1];
if ($techR &3584)
$bonus = 0.7;
elseif ($techR &1536)
@ -217,13 +331,13 @@ class Flotte
$conso[2] += $vais * $temps[2][$key] * $bonus / exp($vitesse/10);
}
if (!isset($this->vaisseaux[4]))
$this->vaisseaux[4] = 0;
if (!isset($this->vaisseaux[5]))
$this->vaisseaux[5] = 0;
if (!isset($vaisseaux[4]))
$vaisseaux[4] = 0;
if (!isset($vaisseaux[5]))
$vaisseaux[5] = 0;
//Si les chasseurs peuvent rentrer dans les cales des vaisseaux, on les enlèves
if ($this->contenuMax - ($this->contenu[0] + $this->contenu[1] + $this->contenu[2]) - ($this->vaisseaux[4] * $nomvais_rs[4] + $this->vaisseaux[5] * $nomvais_rs[5]) >= ($this->vaisseaux[4] + $this->vaisseaux[5]) * 200)
if ($contenuDispo - ceil($conso[0]+$conso[1]+$conso[2]) - ($vaisseaux[4] * $nomvais_rs[4] + $vaisseaux[5] * $nomvais_rs[5]) >= ($vaisseaux[4] + $vaisseaux[5]) * 200)
$temps[2][4] = $temps[2][5] = $temps[1][4] = $temps[1][5] = $temps[0][4] = $temps[0][5] = 0;
//On calcul le temps de déplacement maximal
@ -248,7 +362,8 @@ class Flotte
{
switch($this->mission)
{
case 0:
case 6:
case 7:
$this->stationner();
break;
case 1:
@ -271,7 +386,7 @@ class Flotte
if ($this->statut == 1 && ($this->ret_time > time() || $this->start_time + $this->end_time * 2 <= time()))
$this->retourner();
return true;
}
@ -309,7 +424,7 @@ class Flotte
function coloniser()
{
//On vérifie que les coordonnées de la planètes sont bien enregistrée
if (empty($this->end_planete) || is_object($this->end_planete) || !preg_match('#^\[?([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})\]?$#', $this->end_planete))
if (empty($this->end_planete) || is_object($this->end_planete) || !preg_match('#^\[?([0-9]{1,2}):([0-9]{1,2}):([A0-9]{1,2})\]?$#', $this->end_planete))
{
$this->load_planete();
file_log("Erreur de colonisation de la planète : ".$this->end_planete." pour le joueur : ".$this->start_planete->id_user, 2);
@ -318,16 +433,25 @@ class Flotte
}
//On vérifie que la planète ne soit pas déjà colonisée
global $table_planete;
preg_match('#^\[?([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})\]?$#', $this->end_planete, $position);
$bdd = new BDD();
$p = $bdd->query("SELECT * FROM $table_planete WHERE galaxie = ".$position[1]." AND ss = ".$position[2]." AND position = ".$position[3].";");
$bdd->deconnexion();
global $table_planete, $table_alliances, $table_alliances_creation, $table_user;
preg_match('#^\[?([0-9]{1,2}):([0-9]{1,2}):([A0-9]{1,2})\]?$#', $this->end_planete, $position);
if (is_numeric($position[3]))
{
$bdd = new BDD();
$p = $bdd->query("SELECT * FROM $table_planete WHERE galaxie = ".$position[1]." AND ss = ".$position[2]." AND position = ".$position[3].";");
$bdd->deconnexion();
}
else
{
$bdd = new BDD();
$p = $bdd->query("SELECT * FROM $table_alliances WHERE galaxie = ".$position[1]." AND ss = ".$position[2].";");
$bdd->deconnexion();
}
$this->load_planete();
if ($p)
{
$this->load_planete();
$rapport = new Rapport(2, $this->start_planete, 0, $this->start_time + $this->end_time);
$rapport->addInfo(array($position[1], $position[2], $position[3]), 0);
$rapport->addInfo(false, 1);
@ -338,22 +462,31 @@ class Flotte
}
else
{
$this->load_planete();
if (is_numeric($position[3]))
{
//On crée la planète
$this->end_planete = new Planete(false);
$this->end_planete->galaxie = $position[1];
$this->end_planete->ss = $position[2];
$this->end_planete->position = $position[3];
$this->end_planete->creer($this->start_planete->id_user);
//On crée la planète
$this->end_planete = new Planete(false);
$this->end_planete->galaxie = $position[1];
$this->end_planete->ss = $position[2];
$this->end_planete->position = $position[3];
$this->end_planete->creer($this->start_planete->id_user);
//On définit la limite de ressources pour permettre le déchargement de celles contenues dans les vaisseaux
$this->end_planete->cap = 100000;
}
else
{
//On crée l'astéroide
$this->end_planete = new Asteroide(false);
$this->end_planete->galaxie = $position[1];
$this->end_planete->ss = $position[2];
$this->end_planete->creer($this->start_planete);
}
//Rembousement du carburant non utilisé (la colonisation prévois au départ un allé/retour)
$conso = $this->calc_deplacement($this->start_planete->galaxie, $this->start_planete->ss, $this->start_planete->position, $position[1], $position[2], $position[3], $this->vitesse, false, true);
$conso = $this->calc_deplacement($this->start_planete, $position[1], $position[2], $position[3], $this->vitesse, $this->vaisseaux, 0, false, true);
$this->end_planete->hydrogene += $conso[1];
//On définit la limite de ressources pour permettre le déchargement de celles contenues dans les vaisseaux
$this->end_planete->cap = 100000;
//On enlève un vaisseau de colonisation de la liste
$this->vaisseaux[2]--;
@ -366,6 +499,19 @@ class Flotte
$rapport->addInfo(array($position[1], $position[2], $position[3]), 0);
$rapport->addInfo(true, 1);
$rapport->send();
if (!is_numeric($position[3]))
{
unset($this->end_planete);
$bdd = new BDD();
$alliance = $bdd->unique_query("SELECT signatures FROM $table_alliances_creation WHERE fondateur = ".$this->start_planete->id_user.";");
$p = $bdd->unique_query("SELECT id FROM $table_alliances WHERE galaxie = ".$position[1]." AND ss = ".$position[2]." AND fondateur = ".$this->start_planete->id_user.";");
$signaturesExport = implode(' OR id = ', explode(';', substr($alliance["signatures"], 1), -1));
print "UPDATE $table_user SET alliance = '".$p['id']."' WHERE id = $signaturesExport OR id = ".$this->start_planete->id_user.";";
$bdd->query("UPDATE $table_user SET id_alliance = '".$p['id']."' WHERE id = $signaturesExport OR id = ".$this->start_planete->id_user.";");
//$bdd->query("DELETE FROM $table_alliances_creation WHERE fondateur = ".$this->start_planete->id_user.";");
$bdd->deconnexion();
}
}
}
@ -548,12 +694,59 @@ class Flotte
$this->modifFlotte = "DELETE";
}
function addModifFlotte($modif)
{
if (!in_array($modif, $this->modifFlotte))
$this->modifFlotte[] = $modif;
}
function printTime_end()
{
return $this->start_time + $this->end_time;
}
function printTime_ret()
{
if (!empty($this->ret_time))
return $this->ret_time;
elseif ($this->mission == 1 || $this->mission == 4 || $this->mission == 5 || (($this->mission == 3 || $this->mission == 2) && $this->statut != 0))
return $this->start_time + $this->end_time*2;
else
return 0;
}
static function txtMission($mission)
{
switch($mission)
{
case 1:
return "Transporter";
break;
case 2:
return "Coloniser";
break;
case 3:
return "Attaquer";
break;
case 4:
return "Recycler";
break;
case 5:
return "Espionner";
break;
case 6:
case 7:
return "Stationner";
break;
default:
return "Inconnu";
break;
}
}
/**
* Destructeur
*
@ -563,7 +756,7 @@ class Flotte
function __destruct()
{
global $table_flottes;
if ($this->modifFlotte === "DELETE")
{
$bdd = new BDD();
@ -572,23 +765,23 @@ class Flotte
}
else
{
if (empty($this->id_flotte))
if (empty($this->id_flotte) && $this->modifFlotte == "INSERT")
{
if ($this->modifFlotte == "INSERT")
$out1 = ''; $out2 = '';
global $nomvaisnVAR;
foreach ($this->vaisseaux as $key => $vais)
{
$out1 = ''; $out2 = '';
global $nomvaisnVAR;
foreach ($this->vaisseaux as $key => $vais)
{
$out1 .= ', '.$nomvaisnVAR[$key];
$out2 .= ', '.$vais;
}
$sql = "INSERT INTO $table_flottes (id_user, mission, start_time, start_planete, end_time, end_type, end_planete, vitesse, contenu_metal, contenu_cristal, contenu_hydrogene, tactique, nom, nb_vais$out1) VALUES ('".$this->start_planete->id_user."', '".$this->mission."', '".$this->start_time."', '".$this->start_planete->id."', '".$this->end_time."', '".$this->end_type."', '".$this->end_planete."', '".$this->vitesse."', '".$this->contenu[0]."', '".$this->contenu[1]."', '".$this->contenu[2]."', '".$this->tactique."', '".$this->nom."', ".$this->nb_vais."$out2);";
if (DEBUG) var_dump($sql);
$bdd = new BDD();
$bdd->query($sql);
$bdd->deconnexion();
$out1 .= ', '.$nomvaisnVAR[$key];
$out2 .= ', '.$vais;
}
if (SURFACE == "asteroide")
$sql = "INSERT INTO $table_flottes (id_user, id_alliance, mission, start_time, start_type, start_planete, end_time, end_type, end_planete, vitesse, contenu_metal, contenu_cristal, contenu_hydrogene, tactique, nom, nb_vais$out1) VALUES (0, ".$this->start_planete->id.", '".$this->mission."', '".$this->start_time."', '".$this->start_type."', '".$this->start_planete->id."', '".$this->end_time."', '".$this->end_type."', '".$this->end_planete."', '".$this->vitesse."', '".$this->contenu[0]."', '".$this->contenu[1]."', '".$this->contenu[2]."', '".$this->tactique."', '".$this->nom."', ".$this->nb_vais."$out2);";
else
$sql = "INSERT INTO $table_flottes (id_user, mission, start_time, start_type, start_planete, end_time, end_type, end_planete, vitesse, contenu_metal, contenu_cristal, contenu_hydrogene, tactique, nom, nb_vais$out1) VALUES ('".$this->start_planete->id_user."', '".$this->mission."', '".$this->start_time."', '".$this->start_type."', '".$this->start_planete->id."', '".$this->end_time."', '".$this->end_type."', '".$this->end_planete."', '".$this->vitesse."', '".$this->contenu[0]."', '".$this->contenu[1]."', '".$this->contenu[2]."', '".$this->tactique."', '".$this->nom."', ".$this->nb_vais."$out2);";
if (DEBUG) echo $sql;
$bdd = new BDD();
$bdd->query($sql);
$bdd->deconnexion();
}
elseif(isset($this->modifFlotte[0]))
{

View file

@ -0,0 +1,186 @@
<?php
/***************************************************************************
* class.flotteGroupee.php
* -------------------------
* begin : Samedi 21 mars 2009
* update : Samedi 21 mars 2009
* email : nemunaire@gmail.com
*
*
***************************************************************************/
class FlotteGroupee
{
var $id_flotte = 0,
$nom,
$end_planete,
$time_end,
$end_type,
$ret_planete,
$flottes = array(),
$mission,
$modifFlotte = array();
/**
* Constructeur
* @param int $id id de la flotte à importer
* @param bool $verrou Booléen disant si la classe doit obtenir préalablement un verrou pour la flotte.
*
* @return void
* @access public
*/
function __construct($id = 0, $verrou = true)
{
if (!empty($id))
{
global $table_flottes_preparation;
global $nomvaisnVAR, $ressoVAR;
$id = intval($id);
$bdd = new BDD();
$flotte = $bdd->unique_query("SELECT * FROM $table_flottes_preparation WHERE id = $id;");
$bdd->deconnexion();
if (!empty($flotte))
{
$this->id_flotte = $flotte["id"];
$this->nom = $flotte["nom"];
$this->end_planete = $flotte["end_planete"];
$this->end_type = $flotte["end_type"];
$this->time_end = $flotte["time_end"];
$this->mission = $flotte["mission"];
if (empty($this->flottes)
$this->flottes = array();
else
$this->flottes = unserialize($flotte["flottes"]);
}
}
}
function load_planete()
{
if (is_numeric($this->end_planete) && !empty($this->end_planete))
{
//On traite l'importation en fonction des types fornis
if ($this->end_type == 0 || $this->end_type == 1)
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "planete" && $planete->id == $this->end_planete)
$this->end_planete = $planete;
else
$this->end_planete = new Planete($this->end_planete);
}
else
{
global $planete;
//Si la planète est la même que celle du joueur actuel, on l'utilise, sinon, on la crée
if (SURFACE == "asteroide" && $planete->id == $this->end_planete)
$this->end_planete = $planete;
else
$this->end_planete = new Asteroide($this->end_planete);
}
}
}
function addFlotte($start_planete, $vitesse, $vaisseaux, $contenu_metal, $contenu_cristal, $contenu_hydrogene)
{
$this->flottes[] = array($start_planete->id_user, $start_planete->id, $vitesse, $vaisseaux, $contenu_metal, $contenu_cristal, $contenu_hydrogene);
addModifFlotte("flottes");
}
function lancer()
{
}
function addModifFlotte($modif)
{
if (!in_array($modif, $this->modifFlotte))
$this->modifFlotte[] = $modif;
}
/**
* Destructeur
*
* @return void
* @access public
*/
function __destruct()
{
global $table_flottes;
if ($this->modifFlotte === "DELETE")
{
$bdd = new BDD();
$bdd->query("DELETE FROM $table_flottes WHERE id = ".$this->id_flotte.";");
$bdd->deconnexion();
}
else
{
if (empty($this->id_flotte))
{
if ($this->modifFlotte == "INSERT")
{
$out1 = ''; $out2 = '';
global $nomvaisnVAR;
foreach ($this->vaisseaux as $key => $vais)
{
$out1 .= ', '.$nomvaisnVAR[$key];
$out2 .= ', '.$vais;
}
$sql = "INSERT INTO $table_flottes (id_user, mission, start_time, start_type, start_planete, end_time, end_type, end_planete, vitesse, contenu_metal, contenu_cristal, contenu_hydrogene, tactique, nom, nb_vais$out1) VALUES ('".$this->start_planete->id_user."', '".$this->mission."', '".$this->start_time."', '".$this->start_type."', '".$this->start_planete->id."', '".$this->end_time."', '".$this->end_type."', '".$this->end_planete."', '".$this->vitesse."', '".$this->contenu[0]."', '".$this->contenu[1]."', '".$this->contenu[2]."', '".$this->tactique."', '".$this->nom."', ".$this->nb_vais."$out2);";
if (DEBUG) echo $sql;
$bdd = new BDD();
$bdd->query($sql);
$bdd->deconnexion();
}
}
elseif(isset($this->modifFlotte[0]))
{
$out = array();
$bdd = new BDD();
foreach($this->modifFlotte as $modif)
{
if (!is_array($this->{$modif}))
{
if (is_int($this->{$modif}) || is_float($this->{$modif}))
$out[] .= $modif." = ".$this->{$modif};
else
{
$bdd->escape($this->{$modif});
$out[] .= $modif." = '".$this->{$modif}."'";
}
}
else
{
if ($modif == "contenu")
$calc = "resso";
elseif ($modif == "vaisseaux")
$calc = "nomvaisn";
if (!isset(${$calc.'VAR'}))
global ${$calc.'VAR'};
foreach(${$calc.'VAR'} as $key => $var)
{
$bdd->escape($this->{$modif}[$key]);
$out[] = ${$calc.'VAR'}[$key]." = ".$this->{$modif}[$key];
}
}
}
if (!empty($out))
{
$sql = "UPDATE $table_flottes SET ".implode(', ', $out).", last = 0 WHERE id = ".$this->id_flotte.";";
if (DEBUG) var_dump($sql);
$bdd->query($sql);
}
$bdd->deconnexion();
}
}
}
}
?>

View file

@ -140,6 +140,8 @@ class Planete extends Surface
//Calcul de la population logée
$this->population_max = (pow($this->batiments[12],1.5)+pow($this->batiments[13],2.1))*1000+3000;
//Détermination des capacités maximales
$this->cap = pow(2, $this->batiments[10]) * 100000;
}
}
@ -151,9 +153,6 @@ class Planete extends Surface
*/
function actualiser($actuFile = true, $first = false)
{
//Détermination des capacités maximales
$this->cap = pow(2, $this->batiments[10]) * 100000;
//Actualisation des files d'attentes
if ($actuFile)
{
@ -220,13 +219,13 @@ class Planete extends Surface
$this->cristal += $ressources[0];
else
{
$this->alert_ressources[0] = true;
$this->alert_ressources[1] = true;
$this->cristal = $capnouv;
}
}
else
{
$this->alert_ressources[0] = true;
$this->alert_ressources[1] = true;
$this->cristal = $this->cap;
}
}
@ -248,13 +247,13 @@ class Planete extends Surface
$this->hydrogene += $ressources[0];
else
{
$this->alert_ressources[0] = true;
$this->alert_ressources[2] = true;
$this->hydrogene = $capnouv;
}
}
else
{
$this->alert_ressources[0] = true;
$this->alert_ressources[2] = true;
$this->hydrogene = $this->cap;
}
}
@ -413,7 +412,7 @@ class Planete extends Surface
return false;
}
function addRessources($metal, $cristal, $hydrogene)
function addRessources($metal, $cristal, $hydrogene, $credits = 0)
{
$perte = 0;
@ -438,6 +437,12 @@ class Planete extends Surface
$this->hydrogene = $this->cap;
}
if (!empty($credits))
{
$this->credits += $credits;
$this->addModifUser("credits");
}
return $perte;
}
@ -681,14 +686,19 @@ class Planete extends Surface
return array($prod_met, $prod_cri, $prod_hy);
}
function creer($id_user)
function creer($id_user, $mere = false)
{
global $VAR;
//Définition des paramètres de l'utilisateur pour la planète
$this->id_user = $id_user;
//Génération du nombre de case et de l'image en fonction de la position dans le système
if ($this->position > $VAR['nb_planete']*0.75)
if ($mere)
{
$this->cases = 225;
$this->image = mt_rand(1,19);
}
elseif ($this->position > $VAR['nb_planete']*0.75)
{
$this->cases = mt_rand(200,255);
$this->image = mt_rand(1,19);
@ -710,7 +720,11 @@ class Planete extends Surface
}
//Définition des principaux paramètres de la planète
$this->nom_planete = 'Planète colonisée';
if ($mere)
$this->nom_planete = 'Planète mère';
else
$this->nom_planete = 'Planète colonisée';
$this->metal = 1000;
$this->cristal = 700;
$this->hydrogene = 0;
@ -718,12 +732,6 @@ class Planete extends Surface
$this->modif = array("id_user", "nom_planete", "galaxie", "ss", "position", "image", "cases");
}
function addModif($modif)
{
if (!in_array($modif, $this->modif))
$this->modif[] = $modif;
}
/**
* Destructeur
*

View file

@ -21,7 +21,7 @@ class Rapport{
{
global $table_mail;
$this->table = $table_mail;
$this->type = $type;
$this->utilA = $utilA;
$this->utilB = $utilB;
@ -55,8 +55,16 @@ class Rapport{
{
global $LANG;
$titreA = 'Rapport d\'espionnage de '.$this->var[0]->nom_planete.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']';
$rapportA = '<b>Espionnage de '.$this->var[0]->pseudo.' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
if (!isset($this->var[0]->nom_planete))
{
$titreA = 'Rapport d\'espionnage de '.$this->var[0]->nom_asteroide.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A]';
$rapportA = '<b>Espionnage de '.$this->var[0]->pseudo.' sur '.$this->var[0]->nom_asteroide.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A]</b><br /><br />';
}
else
{
$titreA = 'Rapport d\'espionnage de '.$this->var[0]->nom_planete.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']';
$rapportA = '<b>Espionnage de '.$this->var[0]->pseudo.' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
}
if ($this->var[2] < 1) $rapportA .= '<i>Nos sondes n\'ont pas pu récolter d\'informations sur cette planète.</i>';
else {
@ -78,7 +86,7 @@ class Rapport{
//Flottes en orbite
if ($this->var[2] > 3)
{
}
//Flottes au sol
@ -105,7 +113,10 @@ class Rapport{
}
$titreB = 'Rapport de contre-espionnage';
$rapportB = 'Nous venons d\'apprendre que notre planète : '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.'] a été la cible d\'un espionnage de la part de '.$this->utilA->pseudo;
if (!isset($this->var[0]->nom_planete))
$rapportB = 'Nous venons d\'apprendre que notre planète : '.$this->var[0]->nom_asteroide.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A] a été la cible d\'un espionnage de la part de '.$this->utilA->pseudo;
else
$rapportB = 'Nous venons d\'apprendre que notre planète : '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.'] a été la cible d\'un espionnage de la part de '.$this->utilA->pseudo;
$temps = $this->timestamp;
$db = new BDD();
@ -123,10 +134,19 @@ class Rapport{
function sendTransport()
{
global $LANG;
$titre = 'Transport vers '.$this->var[0]->nom_planete.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']';
if (!isset($this->var[0]->nom_planete))
{
$titre = 'Transport vers '.$this->var[0]->nom_asteroide.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A]';
$rapportA = 'Vos vaisseaux ont déposé '.$this->var[1][0].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["metal"].', '.$this->var[1][1].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["cristal"].' et '.$this->var[1][2].' d\''.$LANG[$this->utilA->race]["ressources"]["noms"]["hydrogene"].' sur '.$this->var[0]->nom_asteroide.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A]</b><br /><br />';
$rapportB = 'Les vaisseaux de '.$this->utilA->pseudo.' ont déposé '.$this->var[1][0].' de '.$LANG[$this->utilB->race]["ressources"]["noms"]["metal"].', '.$this->var[1][1].' de '.$LANG[$this->utilB->race]["ressources"]["noms"]["cristal"].' et '.$this->var[1][2].' d\''.$LANG[$this->utilB->race]["ressources"]["noms"]["hydrogene"].' sur '.$this->var[0]->nom_asteroide.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A]</b><br /><br />';
}
else
{
$titre = 'Transport vers '.$this->var[0]->nom_planete.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']';
$rapportA = 'Vos vaisseaux ont déposé '.$this->var[1][0].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["metal"].', '.$this->var[1][1].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["cristal"].' et '.$this->var[1][2].' d\''.$LANG[$this->utilA->race]["ressources"]["noms"]["hydrogene"].' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
$rapportB = 'Les vaisseaux de '.$this->utilA->pseudo.' ont déposé '.$this->var[1][0].' de '.$LANG[$this->utilB->race]["ressources"]["noms"]["metal"].', '.$this->var[1][1].' de '.$LANG[$this->utilB->race]["ressources"]["noms"]["cristal"].' et '.$this->var[1][2].' d\''.$LANG[$this->utilB->race]["ressources"]["noms"]["hydrogene"].' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
$rapportA = 'Vos vaisseaux ont déposé '.$this->var[1][0].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["metal"].', '.$this->var[1][1].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["cristal"].' et '.$this->var[1][2].' d\''.$LANG[$this->utilA->race]["ressources"]["noms"]["hydrogene"].' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
$rapportB = 'Les vaisseaux de '.$this->utilA->pseudo.' ont déposé '.$this->var[1][0].' de '.$LANG[$this->utilB->race]["ressources"]["noms"]["metal"].', '.$this->var[1][1].' de '.$LANG[$this->utilB->race]["ressources"]["noms"]["cristal"].' et '.$this->var[1][2].' d\''.$LANG[$this->utilB->race]["ressources"]["noms"]["hydrogene"].' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
}
$temps = $this->timestamp;
$db = new BDD();
@ -142,9 +162,21 @@ class Rapport{
function sendColonisation()
{
$titre = 'Colonisation de ['.$this->var[0][0].':'.$this->var[0][1].':'.$this->var[0][2].']';
if ($this->var[1]) $rapport = 'Votre vaisseau a atteint la planète ['.$this->var[0][0].':'.$this->var[0][1].':'.$this->var[0][2].'] et commence la colonisation.';
else $rapport = 'Nous n\'avons pas pu coloniser la planète ['.$this->var[0][0].':'.$this->var[0][1].':'.$this->var[0][2].'] car lorsque nous sommes arrivé sur place, elle était déjà colonisée.';
if (is_numeric($this->var[0][2]))
{
if ($this->var[1])
$rapport = 'Votre vaisseau a atteint la planète ['.$this->var[0][0].':'.$this->var[0][1].':'.$this->var[0][2].'] et commence la colonisation.';
else
$rapport = 'Nous n\'avons pas pu coloniser la planète ['.$this->var[0][0].':'.$this->var[0][1].':'.$this->var[0][2].'] car lorsque nous sommes arrivé sur place, elle était déjà colonisée.';
}
else
{
if ($this->var[1])
$rapport = 'Votre vaisseau a atteint l\'astéroide ['.$this->var[0][0].':'.$this->var[0][1].':'.$this->var[0][2].'] et commence la colonisation.';
else
$rapport = 'Nous n\'avons pas pu coloniser la planète ['.$this->var[0][0].':'.$this->var[0][1].':'.$this->var[0][2].'] car lorsque nous sommes arrivé sur place, elle était déjà colonisée.';
}
$temps = $this->timestamp;
$db = new BDD();
$db->escape($titre);
@ -156,11 +188,19 @@ class Rapport{
function sendRecyclage()
{
global $LANG;
$titre = 'Recyclage de '.$this->var[0]->nom_planete.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']';
$rapport = 'Vos vaisseaux récoltent '.$this->var[1][0].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["metal"].' et '.$this->var[1][1].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["cristal"].' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
if (!isset($this->var[0]->nom_planete))
{
$titre = 'Recyclage de '.$this->var[0]->nom_asteroide.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A]';
$rapport = 'Vos vaisseaux récoltent '.$this->var[1][0].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["metal"].' et '.$this->var[1][1].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["cristal"].' sur '.$this->var[0]->nom_asteroide.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':A]</b><br /><br />';
}
else
{
$titre = 'Recyclage de '.$this->var[0]->nom_planete.' ['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']';
$rapport = 'Vos vaisseaux récoltent '.$this->var[1][0].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["metal"].' et '.$this->var[1][1].' de '.$LANG[$this->utilA->race]["ressources"]["noms"]["cristal"].' sur '.$this->var[0]->nom_planete.'['.$this->var[0]->galaxie.':'.$this->var[0]->ss.':'.$this->var[0]->position.']</b><br /><br />';
}
$temps = $this->timestamp;
$db = new BDD();
$db->escape($titre);
$db->escape($rapport);

View file

@ -28,5 +28,16 @@ class Surface extends User
$batiments = array(),
$vaisseaux = array(),
$modif = array();
function isolement()
{
return false;
}
function addModif($modif)
{
if (!in_array($modif, $this->modif))
$this->modif[] = $modif;
}
}
?>

View file

@ -1,4 +1,4 @@
<?php
<?php
class TinyAsteroide
{
var $id = 0,

View file

@ -19,6 +19,7 @@ class User{
$alliance,
$id_alliance,
$id_grade_alliance,
$permissions_alliance,
$mv,
$mail,
$envoyerMail,
@ -44,8 +45,7 @@ class User{
*/
function User($id = 0){
if (!empty($id)) {
global $var___db, $config, $table_user;
global $technologiesVAR;
global $technologiesVAR, $table_user;
$bdd = new bdd();
$bdd->escape($id);
$user = $bdd->unique_query("SELECT * FROM $table_user WHERE id = $id;");
@ -84,7 +84,22 @@ class User{
else die('Erreur #01 : Utilisateur recherché introuvable dans la base de données. Contactez le support technique ('.$config['mail_support'].') au plus vite en précisant le code d\'erreur.');
}
}
function loadPermissions($fondateur = 0)
{
if ($fondateur == $this->id_user)
$this->permissions_alliance = 1023;
else
{
global $table_alliances_grade;
$bdd = new BDD();
$grade = $bdd->unique_query("SELECT * FROM $table_alliances_grade WHERE id = ".$this->id_grade_alliance.";");
$bdd->deconnexion();
$this->permissions_alliance = intval($grade['auth']);
}
}
function addCredits($credits)
{
$this->credits += $credits;

View file

@ -9,34 +9,31 @@ $bdd->reconnexion();
//On regarde si le joueur a une flotte en vue
$radar = array();
$nbPlan = count($queryPlanetes);
//$detect = $planete->technologies[1]*1800;
/*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']));
}*/
$detect = 86400;
foreach($queryPlanetes as $planeteJoueur)
{
$end_id = $planeteJoueur['id'];
$radar[] = array($bdd->query("SELECT F.mission, F.start_planete, F.start_time, F.end_time, F.start_time + F.end_time - ".time()." AS arrive_time, P.nom_planete, P.galaxie as start_galaxie, P.ss as start_ss, P.position as start_position, U.pseudo FROM $table_flottes F INNER JOIN $table_planete P ON P.id = F.start_planete INNER JOIN $table_user U ON U.id = P.id_user WHERE F.statut != '1' AND F.end_planete = '$end_id' AND F.id_user != $id_user AND F.start_time + F.end_time - ".time()." <= $detect;"), array($planeteJoueur['nom_planete'], $planeteJoueur['galaxie'], $planeteJoueur['ss'], $planeteJoueur['position']));
}
$bdd->deconnexion();
unset($nbPlan);
$template->assign('radar',$radar);
//$template->assign('alliance', $alli);
unset($nbPlan, $end_id, $radar, $alli);
if (SURFACE == "planete") {
//Affichage des informations sur la planète
$template->assign('diametre', $planete->cases * 92);
$template->assign('points', $planete->points);
$template->assign('fileBat', $planete->file_bat->printFile($planete));
$template->assign('fileCas', $planete->file_cas->printFile($planete));
$template->assign('fileVais', $planete->file_vais->printFile($planete));
$template->assign('fileTer', $planete->file_ter->printFile($planete));
$template->assign('fileTech', $planete->file_tech->printFile($planete));
}
else
{
//On charge l'utilisateur pour récupérer son pseudo et l'afficher sur la page d'accueil
$planete->fondateur = new User($planete->fondateur);
$planete->loadDetails();
}
$template->assign('radar',$radar);
//$template->assign('alliance', $alli);
if (SURFACE == "planete")
{
$template->assign('fileBat', $planete->file_bat->printFile($planete));
$template->assign('fileCas', $planete->file_cas->printFile($planete));
$template->assign('fileVais', $planete->file_vais->printFile($planete));
$template->assign('fileTer', $planete->file_ter->printFile($planete));
$template->assign('fileTech', $planete->file_tech->printFile($planete));
}
unset($radar, $alli)
?>

View file

@ -0,0 +1,20 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if (!empty($_GET['v']))
include('game/jeu/alliances/voir.php');
elseif (!empty($_GET['signer']))
include('game/jeu/alliances/signer.php');
elseif (!empty($planete->id_alliance))
{
$SESS->values['idPlan'] = 0;
$SESS->values['idAsteroide'] = $planete->id_alliance;
$SESS->values['isolement'] = 0;
$SESS->put();
redirection("?p=accueil");
}
elseif (!empty($_GET['postuler']))
include('game/jeu/alliances/postuler.php');
else
include('game/jeu/alliances/sans.php');
?>

View file

@ -0,0 +1,17 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$planete->loadDetails();
if (!empty($planete->url_chat))
{
//On vérifie que le joueur ait les permissions requises
if ($planete->permissions_alliance &256)
$page = "alliance/chat_irc";
else
erreur("Vous n'avez pas le grade requis pour accéder au chat de l'alliance.");
}
else
{
$page = "alliance/chat_ajax";
}
?>

View file

@ -0,0 +1,310 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$gestion = strtolower(gpc("g"));
if ($gestion == "grades")
{
$page = 'alliance/gestion_grades';
//On vérifie que le joueur ait les permissions pour modifier les grades
if (!($planete->permissions_alliance &128))
erreur("Vous n'avez pas le grade nécessaire pour modifier les grades !");
$id = intval(gpc("i"));
$del = intval(gpc("d"));
if (!empty($id) && gpc("nom", "post"))
{
$nom = gpc("nom", "post");
$auth = intval(gpc("gbats", "post")) + intval(gpc("gvais", "post"))*2 + intval(gpc("gflot", "post"))*4 + intval(gpc("gdipl", "post"))*8 + intval(gpc("gcred", "post"))*16 + intval(gpc("gmemb", "post"))*32 + intval(gpc("gwing", "post"))*64 + intval(gpc("galli", "post"))*128 + intval(gpc("gchat", "post"))*256 + intval(gpc("gmess", "post"))*512;
$bdd->reconnexion();
$bdd->escape($nom);
$bdd->query("UPDATE $table_alliances_grade SET nom = '$nom', auth = $auth WHERE id = $id AND id_alliance = ".$planete->id.";");
$bdd->deconnexion();
header('Location: ?p=gestion&g=grades');
exit;
}
elseif (gpc("nom", "post"))
{
$nom = gpc("nom", "post");
$auth = intval(gpc("gbats", "post")) + intval(gpc("gvais", "post"))*2 + intval(gpc("gflot", "post"))*4 + intval(gpc("gdipl", "post"))*8 + intval(gpc("gcred", "post"))*16 + intval(gpc("gmemb", "post"))*32 + intval(gpc("gwing", "post"))*64 + intval(gpc("galli", "post"))*128;
$bdd->reconnexion();
$bdd->escape($nom);
$bdd->query("INSERT INTO $table_alliances_grade (id_alliance, nom, auth) VALUES (".$planete->id.", '$nom', $auth);");
$bdd->deconnexion();
header('Location: ?p=gestion&g=grades');
exit;
}
elseif (!empty($id))
{
$bdd->reconnexion();
$grade = $bdd->unique_query("SELECT id, nom, auth FROM $table_alliances_grade WHERE id_alliance = ".$planete->id." AND id = $id;");
$bdd->deconnexion();
$template->assign("grade_mod", $grade);
}
elseif (!empty($del))
{
$bdd->reconnexion();
$grade = $bdd->query("DELETE FROM $table_alliances_grade WHERE id_alliance = ".$planete->id." AND id = $del;");
$bdd->deconnexion();
header('Location: ?p=gestion&g=grades');
exit;
}
$bdd->reconnexion();
$grades = $bdd->query("SELECT id, id_alliance, nom, auth FROM $table_alliances_grade WHERE id_alliance = ".$planete->id.";");
$bdd->deconnexion();
$template->assign("grades", $grades);
unset($grades, $id, $del);
}
elseif ($gestion == "alliance" || ($gestion == "wings" && !empty($planete->wing)))
{
$page = 'alliance/gestion_alliance';
//On vérifie que le joueur ait les permissions pour modifier les grades
if (!($planete->permissions_alliance &128))
erreur("Vous n'avez pas le grade nécessaire pour modifier les paramètres de l'alliance !");
if (isset($_POST["asteroide_name"]))
{
$asteroide_name = gpc("asteroide_name", "post");
$planete->nom_asteroide = $asteroide_name;
$planete->modif[] = "nom_asteroide";
}
elseif (isset($_POST["texte_interne"]))
{
$texte_interne = gpc("texte_interne", "post");
$defcon = intval(gpc("defcon", "post"));
$defcon_txt = gpc("defcon_txt", "post");
$bdd->reconnexion();
$bdd->escape($texte_interne);
$bdd->escape($defcon_txt);
$bdd->query("UPDATE $table_alliances SET texte_interne = '$texte_interne', defcon = $defcon, defcon_txt = '$defcon_txt' WHERE id = ".$planete->id.";");
$bdd->deconnexion();
}
elseif (isset($_POST["url_forum"]))
{
$url_forum = gpc("url_forum", "post");
$url_chat = gpc("url_chat", "post");
$port_chat = intval(gpc("port_chat", "post"));
$chan_chat = gpc("chan_chat", "post");
$pass_chat = gpc("pass_chat", "post");
$bdd->reconnexion();
$bdd->escape($url_forum);
$bdd->escape($url_chat);
$bdd->escape($chan_chat);
$bdd->escape($pass_chat);
$bdd->query("UPDATE $table_alliances SET url_forum = '$url_forum', url_chat = '$url_chat', port_chat = $port_chat, chan_chat = '$chan_chat', pass_chat = '$pass_chat' WHERE id = ".$planete->id.";");
$bdd->deconnexion();
}
elseif (isset($_POST["message_inscription"]))
{
$etatinscriptions = intval(gpc("etatinscriptions", "post"));
$message_inscription = gpc("message_inscription", "post");
$presentation = gpc("presentation", "post");
$bdd->reconnexion();
$bdd->escape($url_forum);
$bdd->escape($url_chat);
$bdd->escape($chan_chat);
$bdd->query("UPDATE $table_alliances SET etatinscriptions = '$etatinscriptions', message_inscription = '$message_inscription', presentation = '$presentation' WHERE id = ".$planete->id.";");
$bdd->deconnexion();
}
elseif (isset($_POST["newfondateur"]) && $planete->fondateur == $planete->id_user)
{
//On vérifie que le joueur demandé existe bien et fasse bien parti de l'alliance
$bdd->reconnexion();
$membre = $bdd->unique_query("SELECT id_alliance FROM $table_user WHERE id != ".intval(gpc('newfondateur', 'post')).";");
$bdd->deconnexion();
if (!empty($membre))
{
$planete->fondateur = intval(gpc('newfondateur', 'post'));
$planete->modif[] = "fondateur";
erreur("Fondateur changé avec succès.", "green");
}
else
erreur("Impossible de donner les droits de fondateur à ce joueur !");
}
$planete->loadDetails();
//On charge la liste des utilisateurs de l'alliance si besoin
$bdd->reconnexion();
$membres = $bdd->query("SELECT id, pseudo FROM $table_user WHERE id_alliance = ".$planete->id." AND id != ".$planete->fondateur.";");
$bdd->deconnexion();
$template->assign("membres", $membres);
unset($membres);
}
elseif ($gestion == "wings")
{
$page = 'alliance/gestion_wing';
//On vérifie que le joueur ait les permissions pour modifier les grades
if (!($planete->permissions_alliance &64))
erreur("Vous n'avez pas le grade nécessaire pour gérer les wings !");
if (!empty($_POST["nom"]))
{
$fondateur = gpc("fondateur", "post");
$nom = gpc("nom", "post");
$tag = strtoupper(gpc("tag", "post"));
$bdd->reconnexion();
$bdd->escape($fondateur);
$bdd->escape($nom);
$bdd->escape($tag);
$user = $bdd->unique_query("SELECT id, pseudo FROM $table_user WHERE pseudo = '$fondateur' AND id_alliance = 0;");
$alliances = $bdd->query("SELECT id FROM $table_alliances WHERE nom_alliance = 'nom' OR tag = '$tag';");
$wings = $bdd->query("SELECT COUNT(id) AS nb FROM $table_alliances WHERE galaxie = ".$planate->galaxie." AND ss = ".$planate->ss.";");
$bdd->deconnexion();
if (!empty($alliances))
erreur("Une alliance porte déjà ce nom ou ce tag. Veuillez en choisir un autre.");
elseif (!empty($user))
{
$race = gpc("race", "post");
if (!preg_match("#^[A-Za-z0-9èéàùûüôöç'_ -]{5,24}$#ui", $nom))
erreur("Le nom d'alliance que vous avez choisi n'est pas valide :<br />il doit avoir entre 5 et 24 caractères (certains accents sont autorisés, mais aucun caractères spéciaux) !", "red");
elseif (!preg_match("#^[A-Za-z0-9]{3,5}$#ui", $tag))
erreur("Le tag de wing que vous avez choisi n'est pas valide :<br />il doit avoir entre 3 et 5 lettres (sans accents) ou chiffres !", "red");
elseif ($race != "humain" && $race != "covenant")
erreur("La race de la wing est incorrecte !");
$bdd->reconnexion();
$bdd->escape($race);
$bdd->query("INSERT INTO $table_alliances (race, sante, nom_alliance, tag, galaxie, ss, wing) VALUES ('$race', 1, '$nom', '$tag', ".$planate->galaxie.", ".$planate->ss.", ".$wings['nb'].")");
$affected = $bdd->affected();
$bdd->deconnexion();
if ($affected)
{
send_mp($user['id'], "Création d'une wing pour l'alliance [".$planete->tag."] ".$planete->nom_alliance, "L'alliance [".$planete->tag."] ".$planete->nom_alliance." vous propose de devenir capitaine de la wing [".$tag."] ".$nom.".<br /><br />Si vous acceptez le poste, cliquez sur le lien suivant : <a href=\"\">ce lien</a>");
erreur("Un message vient d'être envoyé à ".$user["pseudo"].". Lorsqu'il aura accepté son poste, la création de la wing sera terminée et les premiers membres pourront s'y inscrire.", "green");
}
else
erreur("Une erreur s'est produite lors de la création de la wing. Si le problème percisite, contacter un opérateur.");
}
else
erreur("Impossible de trouver le nom de ce joueur. Vérifiez que celui-ci n'appartient actuellement à aucune alliance.<br />Impossible de créer une wing sans fondateur valide.");
}
//On charge la liste des wings
$bdd->reconnexion();
$wings = $bdd->query("SELECT id, race, nom_alliance, tag FROM $table_alliances WHERE galaxie = ".$planete->galaxie." AND ss = ".$planete->ss." AND wing != 0;");
$bdd->deconnexion();
$template->assign("wings", $wings);
unset($wings);
}
else
{
$page = 'alliance/gestion_membres';
$gestion = "membres";
//On vérifie que le joueur ait les permissions pour modifier les grades
if (!($planete->permissions_alliance &32))
erreur("Vous n'avez pas le grade nécessaire pour modifier les membres !");
//Acceptation ou refus des postulants
if (!empty($_GET["pa"]))
{
$id = intval(gpc("pa"));
$bdd->reconnexion();
$user = $bdd->unique_query("SELECT U.id_alliance, U.pseudo, U.id AS id_user FROM $table_alliances_attente A INNER JOIN $table_user U ON A.id_user = U.id WHERE A.id_alliance = ".$planete->id." AND A.id = $id;");
if (empty($user))
{
$bdd->deconnexion();
erreur("Impossible de trouver la candidature. Si le problème perciste, contactez un opérateur.");
}
elseif (!empty($user['id_alliance']))
{
$bdd->deconnexion();
erreur("Le joueur pour lequel vous souhaitez valider la condidature est actuellement dans une autre alliance. Vous ne pouvez donc pas l'accepter immédiatement.");
}
else
{
$bdd->query("UPDATE $table_user SET id_alliance = ".$planete->id.", id_grade_alliance = 0 WHERE id = ".$user["id_user"].";");
if ($bdd->affected())
{
$bdd->query("DELETE FROM $table_alliances_attente WHERE id_alliance = ".$planete->id." AND id = $id;");
$bdd->deconnexion();
send_mp($user["id_user"], "Candidature pour l'alliance [".$planete->tag."] ".$planete->nom_alliance, "Félicitations vous faites maintenant parti de l'alliance [".$planete->tag."] ".$planete->nom_alliance.".<br /><br />Après examen de votre candidature, le responsable du recrutement a jugé bon de vous accepter au sein de l'alliance.<br />Vous en faites donc désormais parti. Il ne vous reste plus qu'à vous démarquer pour monter dans les grades.<br /><br />Bon jeu !");
erreur("Membre ajouté à l'alliance avec succès.<br />Un message privé vient de lui être envoyé afin de l'informer de la nouvelle.", "green");
}
else
{
$bdd->deconnexion();
erreur("Une erreur s'est produite lors de l'ajout du joueur dans les membres de l'alliance.<br />Si le problème perciste, contactez un opérateur.");
}
}
}
elseif (!empty($_GET["pr"]))
{
$id = intval(gpc("pr"));
$bdd->reconnexion();
$user = $bdd->unique_query("SELECT U.id AS id_user FROM $table_alliances_attente A INNER JOIN $table_user U ON A.id_user = U.id WHERE A.id_alliance = ".$planete->id." AND A.id = $id;");
$bdd->query("DELETE FROM $table_alliances_attente WHERE id_alliance = ".$planete->id." AND id = $id;");
$bdd->deconnexion();
send_mp($user["id_user"], "Candidature pour l'alliance [".$planete->tag."] ".$planete->nom_alliance, "Nous avons le regret de vous annoncer que l'alliance [".$planete->tag."] ".$planete->nom_alliance." a refusé votre candidature.<br /><br />Après examen de votre candidature, le responsable du recrutement a jugé bon de vous écarter de l'alliance.<br />Pour plus d'informations, veuillez contacter directement le responsable du recrutement.");
erreur("Candidature refusée.<br />Un message privé vient d'être envoyé au joueur afin de l'informer de la nouvelle.", "orange");
}
//Gestion des exclusions de l'alliance
elseif (!empty($_GET["u"]))
{
$id = intval(gpc("u"));
if ($planete->fondateur == $id)
erreur("Vous ne pouvez pas exclure le fondateur de sa propre alliance.<br />En cas de problème avec le fondateur, veuillez contacter un opérateur.");
$bdd->reconnexion();
$bdd->query("UPDATE $table_user SET id_alliance = 0, id_grade_alliance = 0 WHERE id_alliance = ".$planete->id." AND id = $id;");
$bdd->deconnexion();
if ($bdd->affected())
{
send_mp($id, "Exclusion de votre alliance [".$planete->tag."] ".$planete->nom_alliance, "Vous vennez d'être exclus de votre alliance [".$planete->tag."] ".$planete->nom_alliance."<br />Pour plus d'informations, veuillez contacter directement le responsable du recrutement.");
erreur("Membre renvoyé.<br />Un message privé vient de lui être envoyé afin de l'informer de la nouvelle.", "orange");
}
else
erreur("Membre introuvable !");
}
$id = intval(gpc("i"));
if (!empty($id))
{
$grade = intval(gpc('grade', 'post'));
$bdd->reconnexion();
$gradet = $bdd->unique_query("SELECT id FROM $table_alliances_grade WHERE id_alliance = ".$planete->id." AND id = $grade;");
if (!empty($gradet) || $grade == 0)
$bdd->query("UPDATE $table_user SET id_grade_alliance = $grade WHERE id_alliance = ".$planete->id." AND id = $id;");
$bdd->deconnexion();
header('Location: ?p=gestion&g=membres');
exit;
}
$bdd->reconnexion();
$membres = $bdd->query("SELECT id, pseudo, race, last_visite, id_grade_alliance FROM $table_user WHERE id_alliance = ".$planete->id.";");
$grades = $bdd->query("SELECT id, id_alliance, nom, auth FROM $table_alliances_grade WHERE id_alliance = ".$planete->id.";");
$postulants = $bdd->query("SELECT A.id, A.timestamp, A.message, U.pseudo, U.id AS id_user FROM $table_alliances_attente A INNER JOIN $table_user U ON A.id_user = U.id WHERE A.id_alliance = ".$planete->id.";");
$bdd->deconnexion();
$template->assign("membres", $membres);
$template->assign("grades", $grades);
$template->assign("postulants", $postulants);
unset($membres, $grades, $grade, $id, $postulants);
}
$template->assign("onglet", $gestion);
unset($gestion);
?>

View file

@ -0,0 +1,171 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'messagerie';
$titre = 'Messagerie d\'alliance';
$template->assign("link_P", "alli_messagerie");
$template->assign("titreR", $titre);
//On interdit l'accès à la messagerie en cas de prise de contrôle d'un joueur
if (!empty($sess->values['souscontrole'][0]))
erreur('Vous êtes en mode prise de contrôle, vous ne pouvez pas accèder aux messages privés des joueurs.');
if ($id = intval(gpc('avertir')))
{
$bdd->reconnexion();
$bdd->query("UPDATE $table_alliances_mail SET statut = 1 WHERE destinataire = ".$planete->id." AND id = $id;");
if ($bdd->affected())
erreur('La demande de vérification de contenu par les opérateurs a été transmise avec succès.', 'green', '?p=messagerie');
else
erreur('Une demande est déjà en cours ou vous n\'êtes pas autorisé à avertir ce message.', 'red', '?p=messagerie');
$bdd->deconnexion();
}
//On récupére l'onglet demandé
$onglet = gpc('n');
$template->assign('onglet', $onglet);
if ($onglet == "rapports")
{
//Demande de supression des messages
if (!empty($_POST))
{
$bdd->reconnexion();
foreach($_POST as $value)
$bdd->query("UPDATE $table_alliances_mail SET vu = 's' WHERE destinataire = ".$planete->id." AND id = ".intval($value).";");
$bdd->deconnexion();
header('Location: ?p=messagerie&n='.$onglet);
exit;
}
$bdd->reconnexion();
$data = $bdd->query("SELECT * FROM $table_alliances_mail WHERE destinataire = ".$planete->id." AND expediteur = false AND vu != 's' ORDER BY id DESC;");
$bdd->query("UPDATE $table_alliances_mail SET vu = 0 WHERE destinataire = ".$planete->id." AND expediteur = false AND vu != 's';");
$bdd->deconnexion();
$template->assign('messages', $data);
}
elseif ($onglet == "send")
{
$bdd->reconnexion();
$data = $bdd->query("SELECT M.*, U.pseudo AS destinataire FROM $table_alliances_mail M INNER JOIN $table_user U ON U.id = M.destinataire WHERE M.expediteur = ".$planete->id." ORDER BY M.id DESC;");
$bdd->deconnexion();
$template->assign('messages', $data);
}
elseif ($onglet == "envoyer")
{
$page = 'envoyer';
$titre = 'Envoyer un message';
if (!empty($_POST['objet']) && !empty($_POST['destinataire']) && !empty($_POST['message']))
{
$utils = explode(';', gpc('destinataire', 'post'));
$nbutil = count($utils);
$time = time();
$message = htmlspecialchars(gpc('message', 'post'));
$objet = htmlspecialchars(gpc('objet', 'post'));
if (strlen($message) > 99999)
erreur('Le contenu de votre message est trop long. Limite : 99 999 caractères.');
if (empty($utils))
erreur('Aucun utilisateur sélectionné.');
$bdd->reconnexion();
$bdd->escape($message);
$bdd->escape($objet);
$introuv = array();
foreach($utils as $util)
{
if (empty($util))
continue;
$util = trim($util);
$bdd->escape($util);
if ($util != $planete->pseudo && $env = $bdd->unique_query("SELECT id, pseudo, mail, envoyerMail FROM $table_user WHERE pseudo = '$util';"))
{
$bdd->query("INSERT INTO $table_alliances_mail (destinataire, expediteur, sujet, contenu, temps) VALUES(".$env['id'].", ".$planete->id_user.", '$objet', '$message', $time);");
if ($env["envoyerMail"]& 2 && !empty($env["mail"]))
send_mail($env["mail"], "Halo-Battle :: Nouveau message privé", 'Bonjour '.$env["pseudo"].',
Vous recevez ce courriel suite à l\'arrivée d\'un nouveau message privé reçu sur votre compte de jeu du serveur '.$VAR['serveur_name'].'. Le sujet de ce message est : "'.$objet.'" et a été envoyé par '.$planete->pseudo.'. Vous pouvez utiliser le lien suivant pour voir le message ou vous connecter.
http://'.$_SERVER['HTTP_HOST'].'/'.$VAR['first_page'].'?p=messagerie
Vous pouvez désactiver ses notifications via les options de votre compte dans l\'onglet "notifications"
A bientôt dans Halo-Battle,
Le Staff');
}
else
$introuv[] = htmlentities($util);
}
$bdd->deconnexion();
if (!empty($introuv[0]))
erreur('Impossible de trouver le/les destinataire(s) suivant(s) : '.implode(', ', $introuv).'.<br />Les autres ont bien reçu votre message.', "red", '?p=messagerie&n=envoyer');
else
erreur('Votre message a été envoyé avec succès.', "green", '?p=messagerie');
}
$amis = array();
$amisn = array();
$bdd->reconnexion();
foreach($planete->amis as $ami) {
$res = $bdd->unique_query("SELECT pseudo FROM $table_user WHERE id = ".$ami.";");
if ($res != false) {
$amis[] = $res['pseudo'];
$amisn[] = $ami;
}
}
$bdd->deconnexion();
$template->assign('amis', $amis);
$template->assign('amisn', $amisn);
if (isset($_GET['d'])) $template->assign('destinataire', gpc('d'));
if (isset($_GET['o'])) $template->assign('objet', gpc('o'));
}
else
{
//Demande de supression des messages
if (!empty($_POST))
{
$bdd->reconnexion();
foreach($_POST as $value)
$bdd->query("DELETE FROM $table_alliances_mail WHERE destinataire = ".$planete->id_user." AND id = ".intval($value).";");
$bdd->deconnexion();
header('Location: ?p=messagerie&n='.$onglet);
exit;
}
if ($SESS->level >= 3)
{
$bdd->reconnexion();
$data = $bdd->query("SELECT M.*, U.pseudo AS expediteur FROM $table_alliances_mail M INNER JOIN $table_user U ON U.id = M.expediteur WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC;");
$bdd->query("UPDATE $table_alliances_mail M SET vu = 0 WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC;");
$bdd->deconnexion();
}
else
{
$bdd->reconnexion();
//Calcul du nombre total de message enregistré
$nbmax = $bdd->query("SELECT COUNT(id) as nb FROM $table_alliances_mail M WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC;");
$data = $bdd->query("SELECT M.*, U.pseudo AS expediteur FROM $table_alliances_mail M INNER JOIN $table_user U ON U.id = M.expediteur WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC LIMIT 50;");
$bdd->query("UPDATE $table_alliances_mail M SET vu = 0 WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC LIMIT 50;");
$bdd->deconnexion();
}
if ($SESS->level < 3 && $nbmax > $bdd->num_rows)
$template->assign('avertissement', '<p style="color: red;"><b>Vous avez des messages en attente de réception. Libérez de la place dans votre messagerie pour les afficher.</b></p>');
$template->assign('messages', $data);
}
unset($onglet, $data, $nbmax);
if ($bdd->num_rows)
$template->assign('IM', $bdd->num_rows);
?>

View file

@ -0,0 +1,37 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$id = intval(gpc('postuler'));
$message = gpc('motivation', 'post');
$page = 'alliance/nm_postuler';
if (!empty($message))
{
$bdd->reconnexion();
$bdd->escape($message);
$postul = $bdd->unique_query("SELECT id FROM $table_alliances_attente WHERE id_alliance = $id AND id_membre = ".$planete->id_user." LIMIT 1;");
if (empty($postul))
$bdd->query("INSERT INTO $table_alliances_attente (id_alliance, id_membre, timestamp, message) VALUES ($id, ".$planete->id_user.", ".time().", '$message');");
$bdd->deconnexion();
if (empty($postul))
erreur("Votre demande d'adhésion a été envoyée avec succès, vous aurez une réponse dès qu'un dirigeant de l'alliance se connectera.", "green", $VAR["menu"]["alliance"]."&v=".$id, 5000);
else
redirection($VAR["menu"]["alliance"]."&postuler=".$id);
}
else
{
$bdd->reconnexion();
$alliance = $bdd->unique_query("SELECT * FROM $table_alliances WHERE id = $id;");
$postul = $bdd->unique_query("SELECT id FROM $table_alliances_attente WHERE id_alliance = $id AND id_membre = ".$planete->id_user." LIMIT 1;");
$bdd->deconnexion();
if (!empty($postul))
erreur("Vous avez déjà une candidature en cours pour cette alliance !", "red", $VAR["menu"]["alliance"]."&v=".$id, 3000);
elseif (!empty($alliance))
$template->assign("alliance", $alliance);
else
redirection($VAR["menu"]["alliance"]);
}
?>

View file

@ -0,0 +1,129 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$act = gpc('q');
if ($act == "fonder")
{
$bdd->reconnexion();
//On regarde si le joueur n'est pas déjà en train de fonder une alliance
if (!$alli = $bdd->query("SELECT id FROM $table_alliances_creation WHERE fondateur = ".$planete->id_user." OR signatures LIKE '%;".$planete->id_user.";%';"))
{
$bdd->deconnexion();
$page = 'alliance/nm_fonder';
$nom = gpc('nom', 'post');
$tag = gpc('tag', 'post');
if (!empty($nom) || !empty($tag))
{
//Vérifications
if (!preg_match("#^[A-Za-z0-9èéàùûüôöç'_ -]{5,42}$#ui", $nom))
erreur("Le nom d'alliance que vous avez choisi n'est pas valide :<br />il doit avoir entre 5 et 42 caractères (certains accents sont autorisés, mais aucun caractères spéciaux) !", "red");
elseif (!preg_match("#^[A-Za-z0-9]{3,5}$#ui", $tag))
erreur("Le tag d'alliance que vous avez choisi n'est pas valide :<br />il doit avoir entre 3 et 5 lettres (sans accents) ou chiffres !", "red");
$lien = sha1($tag.'Hb$'.$nom.'☺Ø'.$planete->id_user.'‘«'.$planete->race);
$bdd->reconnexion();
$bdd->escape($nom);
$bdd->escape($tag);
$utilise = $bdd->query("SELECT id FROM $table_alliances WHERE nom_alliance = '$nom' OR tag = '$tag' OR fondateur = ".$planete->id_user." UNION SELECT id FROM $table_alliances_creation WHERE nom_alliance = '$nom' OR tag = '$tag' OR fondateur = ".$planete->id_user.";");
if (empty($utilise))
$bdd->query("INSERT INTO $table_alliances_creation (tag, nom_alliance, fondateur, lien) VALUES ('$tag', '$nom', ".$planete->id_user.", '$lien');");
$bdd->deconnexion();
if (!empty($utilise))
erreur("Le nom ou le tag que vous avez choisi est déjà utilisé par une alliance.", "red");
else
{
send_mp($planete->id_user, "Fondation de votre alliance !", 'Pour terminer la création de votre alliance, trouvez au moins 4 joueurs de cette galaxie sans alliance pour leur faire signer votre traité de fondation d\'alliance.<br /><br />Lien de signature :<br /><a href="'.$VAR["menu"]["alliance"].'&amp;signer='.$lien.'">http://'.$_SERVER['HTTP_HOST'].'/'.$VAR["first_page"].''.$VAR["menu"]["alliance"].'&amp;signer='.$lien.'</a>');
erreur('Votre alliance a bien &eacute;t&eacute; cr&eacute;&eacute;e.<br />Il ne vous reste plus qu\'à trouver au moins 4 signatures pour finir la création de votre alliance.<br /><br />Le lien permettant à vos quatres personnes de signer est <a href="'.$VAR["menu"]["alliance"].'&amp;signer='.$lien.'">http://'.$_SERVER['HTTP_HOST'].'/'.$VAR["first_page"].''.$VAR["menu"]["alliance"].'&amp;signer='.$lien.'</a>', "green");
}
}
unset($nom, $tag);
}
else
{
$page = 'alliance/nm_statut';
$alliance = $bdd->unique_query("SELECT * FROM $table_alliances_creation WHERE id = ".$alli[0]["id"].";");
$signatures = explode(';', substr($alliance["signatures"], 1), -1);
$signaturesExport = implode(' OR id = ', $signatures);
$pseudos = $bdd->query("SELECT pseudo FROM $table_user WHERE id = ".$signaturesExport.";");
$bdd->deconnexion();
if (gpc('r') == "quit")
{
if ($alliance["fondateur"] == $planete->id_user)
{
$bdd->reconnexion();
$bdd->query("DELETE FROM $table_alliances_creation WHERE id = ".$alli[0]["id"].";");
$bdd->deconnexion();
foreach ($signatures as $id_user)
{
send_mp($id_user, "Annulation de la fondation de votre alliance !", "Le fondateur de l'alliance pour laquelle vous avez signée vient d'annuler sa création.");
}
send_mp($planete->id_user, "Annulation de la fondation de votre alliance !", "Vous vennez d'annuler la création de votre alliance.");
erreur("Votre alliance vient d'être supprimée", "green");
}
else
{
$keys = array_keys($signatures, $planete->id_user);
foreach ($keys as $key)
unset($signatures[$key]);
$signatures = ";".implode(';', $signatures).";";
$bdd->reconnexion();
$bdd->escape($signatures);
$bdd->query("UPDATE $table_alliances_creation SET signatures = '$signatures' WHERE id = ".$alliance["id"].";");
$bdd->deconnexion();
send_mp($planete->id_user, "Annulation de la signature pour votre alliance !", "Vous vennez d'annuler votre signature pour l'alliance ".$alliance["nom"]);
erreur("Votre signature a été rayée.", "green");
}
}
$template->assign("alliance", $alliance);
$template->assign("signatures", $signatures);
$template->assign("pseudos", $pseudos);
$template->assign("nbSignatures", count($signatures));
}
}
elseif (!empty($_POST['search_tag']) || !empty($_POST['search_nom']))
{
$page = 'alliance/nm_search';
$tag = gpc('search_tag', 'post');
$nom = str_replace("*", "%", gpc('search_nom', 'post'));
$bdd->reconnexion();
$bdd->escape($tag);
$bdd->escape($nom);
$rech1 = $bdd->query("SELECT id, tag, nom_alliance, race, etat_inscription FROM $table_alliances WHERE tag LIKE '$tag%' AND nom_alliance LIKE '%$nom%';");
$rech2 = $bdd->query("SELECT lien AS id, tag, nom_alliance, 0 AS race, 2 AS etat_inscription FROM $table_alliances_creation WHERE tag LIKE '$tag%' AND nom_alliance LIKE '%$nom%';");
$bdd->deconnexion();
if (!empty($rech1) && !empty($rech2))
$recherche = array_merge($rech1, $rech2);
elseif (!empty($rech2))
$recherche = $rech2;
else
$recherche = $rech1;
if ($bdd->num_rows == 1)
redirection($VAR["menu"]["alliance"]."&v=".$recherche[0]['id']);
elseif ($bdd->num_rows == 0)
erreur("Aucune alliance ne correspond à ces critères de recherche", "", $VAR["menu"]["alliance"]);
$template->assign("recherches", $recherche);
unset($nom, $tag, $recherche);
}
else
{
$bdd->reconnexion();
$template->assign("fondation", $bdd->query("SELECT id FROM $table_alliances_creation WHERE fondateur = ".$planete->id_user." OR signatures LIKE '%;".$planete->id_user.";%';"));
$page = 'alliance/nm_accueil';
}
?>

View file

@ -0,0 +1,101 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
//Constante pour savoir si l'on offre ou pas un vaisseau de colonisation et s'il est possible de se désangager d'une signature
define("debut_d_univers", true);
$hash = gpc('signer');
$page = 'alliance/nm_signer';
if (!empty($planete->id_alliance))
erreur("Vous êtes déjà dans une alliance, vous ne pouvez pas ratifier d'alliance !", "red");
elseif (!empty($_POST["sign"]))
{
if (trim(strtolower(gpc("sign", "post"))) == "oui")
{
$hash = intval($hash);
$bdd->reconnexion();
$ratifier = $bdd->unique_query("SELECT id, fondateur, signatures FROM $table_alliances_creation WHERE signatures LIKE '%;".$planete->id_user.";%' LIMIT 1;");
if (!empty($ratifier))
{
$ratifier["signatures"] = explode(';', substr($ratifier["signatures"], 1), -1);
unset($ratifier["signatures"][array_search($planete->id_user, $ratifier["signatures"])]);
if (count($ratifier["signatures"]) == 0)
$ratifier["signatures"] = "";
else
$ratifier["signatures"] = ';'.implode(';', $ratifier["signatures"]).';';
$bdd->escape($ratifier["signatures"]);
$bdd->query("UPDATE $table_alliances_creation SET signatures = '".$ratifier["signatures"]."' WHERE id = ".$ratifier["id"].";");
}
$alliance = $bdd->unique_query("SELECT * FROM $table_alliances_creation WHERE id = $hash;");
if (!empty($alliance["signatures"]))
$alliance["signatures"] = explode(';', substr($alliance["signatures"], 1), -1);
else
$alliance["signatures"] = array();
$alliance["signatures"][] = $planete->id_user;
$newnb = count($alliance["signatures"]);
$alliance["signatures"] = ';'.implode(';', $alliance["signatures"]).';';
$bdd->escape($alliance["signatures"]);
$bdd->query("UPDATE $table_alliances_creation SET signatures = '".$alliance["signatures"]."' WHERE id = $hash;");
if (debut_d_univers) //Si on est en début d'univers, on recherche une planète du joueur fondateur
$planete_fondateur = $bdd->unique_query("SELECT id FROM $table_planete WHERE id_user = ".$alliance["fondateur"]." ORDER BY id ASC LIMIT 1;");
$bdd->deconnexion();
if ($newnb >= 4)
{
if (debut_d_univers && $newnb == 4)
{
//On donne un vaisseau de colonisation au fondateur
$planete_fondateur = new Planete($planete_fondateur["id"]);
$planete_fondateur->vaisseaux[2]++;
unset($planete_fondateur);
send_mp($alliance["fondateur"], "Nouvelle signature pour votre alliance !", $planete->pseudo." vient de ratifier votre alliance, portant ainsi à ".$newnb." le nombre de signatures.<br /><br />Vous avez suffisamment de signatures pour coloniser un astéroïde. Pour vous féliciter, le conseil intergalactique a décidé de vous offrir un vaisseau de colonisation pour aller coloniser un astéroide afin d'implanter votre alliance.");
}
else
//TODO refaire un message plus RP
send_mp($alliance["fondateur"], "Nouvelle signature pour votre alliance !", $planete->pseudo." vient de ratifier votre alliance, portant ainsi à ".$newnb." le nombre de signatures.<br /><br />Vous avez suffisamment de signatures pour coloniser un astéroïde. Envoyez-en un dès maintenant !");
}
else
send_mp($alliance["fondateur"], "Nouvelle signature pour votre alliance !", $planete->pseudo." vient de ratifier votre alliance, portant ainsi à ".$newnb." le nombre de signatures.");
erreur("Votre signature a bien été prise en compte !", "green");
}
else
redirection($VAR["menu"]["alliance"]);
}
else
{
$bdd->reconnexion();
$bdd->escape($hash);
$fonder = $bdd->unique_query("SELECT * FROM $table_alliances_creation WHERE fondateur = ".$planete->id_user." LIMIT 1;");
if (!empty($fonder))
{
$bdd->deconnexion();
erreur("Vous ne pouvez pas ratifier d'alliance car vous en fonder actuellement une !", "red");
}
$alliance = $bdd->unique_query("SELECT * FROM $table_alliances_creation WHERE lien = '$hash';");
$ratifier = $bdd->unique_query("SELECT * FROM $table_alliances_creation WHERE signatures LIKE '%;".$planete->id_user.";%' LIMIT 1;");
$bdd->deconnexion();
if (!empty($alliance) && sha1($alliance['tag'].'Hb$'.$alliance['nom_alliance'].'☺Ø'.$alliance['fondateur'].'‘«'.$planete->race) == $hash)
{
if (!empty($alliance["signatures"]))
{
$alliance["signatures"] = explode(';', substr($alliance["signatures"], 1), -1);
if (in_array($planete->id_user, $alliance["signatures"]))
erreur("Vous avez déjà ratifier cette alliance !");
$alliance["nbsignatures"] = count($alliance["signatures"]);
}
else
$alliance["nbsignatures"] = 0;
$template->assign("alliance", $alliance);
$template->assign("ratifier", $ratifier);
}
elseif (!empty($alliance))
erreur("Impossible de ratifier cette alliance.<br />Vous n'êtes peut-être pas de la même race que le fondateur.", 'red', $VAR["menu"]["alliance"], 4000);
else
erreur("Vous ne pouvez plus signer pour cette alliance !", 'red', $_SERVER["HTTP_REFERER"], 4000);
}
?>

View file

@ -0,0 +1,25 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$id = intval(gpc('v'));
$page = 'alliance/view';
$bdd->reconnexion();
$alliance = $bdd->unique_query("SELECT * FROM $table_alliances WHERE id = $id;");
$nbmembres = $bdd->unique_query("SELECT COUNT(id) AS nbmembres FROM $table_user WHERE id_alliance = $id;");
if ($planete->id_alliance == $id)
$grade = $bdd->unique_query("SELECT nom FROM $table_alliances_grade WHERE id = ".$planete->id_grade_alliance.";");
$bdd->deconnexion();
if (!empty($alliance))
{
$template->assign("alliance", $alliance);
$template->assign("nbmembres", $nbmembres['nbmembres']);
if (empty($grade))
$template->assign("grade", "Invité");
else
$template->assign("grade", $grade["nom"]);
}
else
redirection($VAR["menu"]["alliance"]);
?>

View file

@ -1,29 +1,46 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX')) { header('Location: ./'.$VAR['first_page']); exit; }
$page = 'arbre';
$titre = 'Arbre des technologies';
if (empty($_GET['q']))
$_GET['q'] = '';
$template->assign('defaut',$_GET['q']);
$template->assign('defaut', gpc('q'));
//Récupération et vérification de la race voulue ou définition d'une race par défaut
if (empty($_GET['r']) || ($_GET['r'] != 'humain' && $_GET['r'] != 'covenant'))
if (empty($_GET['r']) || (gpc('r') != 'humain' && gpc('r') != 'covenant'))
$_GET['r'] = $planete->race;
$race = $_GET['r'];
$race = gpc('r');
$template->assign('raceAff', $race);
$TEMP_liste = array();
foreach($planete->batiments as $id => $batiment)
if (SURFACE == "asteroide")
{
if (!empty($LANG[$race]["batiments"]["noms_sing"][$id]))
$TEMP_liste[$id] = array(
'niveau' => $batiment,
'etat' => Donnee::print_neededBatiments($id, $planete, $race)
);
$TEMP_liste = array();
foreach($planete->batiments as $id => $batiment)
{
if (!empty($LANG[$race]["alli_batiments"]["noms_sing"][$id]))
$TEMP_liste[$id] = array(
'niveau' => $batiment,
'etat' => Donnee::print_neededAlli_Batiments($id, $planete, $race)
);
}
$template->assign('batiments', $TEMP_liste);
}
$template->assign('batiments', $TEMP_liste);
else
{
$TEMP_liste = array();
foreach($planete->batiments as $id => $batiment)
{
if (!empty($LANG[$race]["batiments"]["noms_sing"][$id]))
$TEMP_liste[$id] = array(
'niveau' => $batiment,
'etat' => Donnee::print_neededBatiments($id, $planete, $race)
);
}
$template->assign('batiments', $TEMP_liste);
}
/*
$TEMP_technologies = array();
$nb = count($technolo);
@ -69,4 +86,6 @@ foreach($planete->vaisseaux as $id => $unite)
);
}
$template->assign('vaisseaux', $TEMP_liste);
unset($TEMP_liste, $id, $unite);
?>

View file

@ -1,56 +1,90 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'batiments';
$titre = 'Batiments';
//Si l'on est sur un astéroide, on vérifie que le joueur ait les permissions nécessaire
if (SURFACE == "asteroide" && !($planete->permissions_alliance &1))
erreur("Vous n'avez pas le grade requis pour vous occuper des bâtiments de l'astéroide.");
//Lancement d'une nouvelle construction
if (isset($_GET['c'])) {
//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 !');
$planete->file_bat->batiment_addObjet(intval(gpc('c')), $planete);
redirection($VAR['menu']['batiments']);
}
//Lancement d'une déconstruction
if (isset($_GET['d'])) {
//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['d'] == 6 && !empty($planete->file_tech[1]))
erreur('Une technologie est en cours de recherche dans votre laboratoire, vous ne pouvez pas faire de travaux !');
$planete->file_bat->batiment_addDemolition(intval(gpc('d')), $planete);
redirection($VAR['menu']['batiments']);
}
//Annulation d'une nouvelle construction
if (isset($_GET['a'])) {
$planete->file_bat->batiment_delObjet(intval(gpc('a')), $planete);
redirection($VAR['menu']['batiments']);
}
$TEMP_liste = array();
foreach($planete->batiments as $i => $niveau)
if (isset($_GET['c']))
{
//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;
//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(gpc('c') == 6 && $planete->file_tech->hasObject())
erreur('Une technologie est en cours de recherche dans votre laboratoire, vous ne pouvez pas faire de travaux !');
if (!empty($LANG[$planete->race]['batiments']['noms_sing'][$i]) && Donnee::neededBatiments($i, $planete))
{
$TEMP_liste[] = array (
'id' => $i,
'image' => $batimeni[$i],
'niveau' => $niveau,
'nec_metal' => Donnee::metalBatiments($i, $niveau+1, $planete),
'nec_cristal' => Donnee::cristalBatiments($i, $niveau+1, $planete),
'nec_hydrogene' => Donnee::hydrogeneBatiments($i, $niveau+1, $planete),
'temps' => sec(Donnee::tempsBatiments($i, $niveau+1, $planete)),
'enfile' => $planete->file_bat->batiment_objectInFile($i)
);
}
$planete->file_bat->batiment_addObjet(intval(gpc('c')), $planete);
redirection($VAR['menu']['batiments']);
}
//Lancement d'une déconstruction
if (isset($_GET['d']))
{
//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['d'] == 6 && $planete->file_tech->hasObject())
erreur('Une technologie est en cours de recherche dans votre laboratoire, vous ne pouvez pas faire de travaux !');
$planete->file_bat->batiment_addDemolition(intval(gpc('d')), $planete);
redirection($VAR['menu']['batiments']);
}
//Annulation d'une nouvelle construction
if (isset($_GET['a']))
{
$planete->file_bat->batiment_delObjet(intval(gpc('a')), $planete);
redirection($VAR['menu']['batiments']);
}
if (SURFACE == "planete")
{
$page = 'batiments';
$TEMP_liste = array();
foreach($planete->batiments as $i => $niveau)
{
//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;
if (!empty($LANG[$planete->race]['batiments']['noms_sing'][$i]) && Donnee::neededBatiments($i, $planete))
{
$TEMP_liste[] = array (
'id' => $i,
'image' => $batimeni[$i],
'niveau' => $niveau,
'nec_metal' => Donnee::metalBatiments($i, $niveau+1, $planete),
'nec_cristal' => Donnee::cristalBatiments($i, $niveau+1, $planete),
'nec_hydrogene' => Donnee::hydrogeneBatiments($i, $niveau+1, $planete),
'temps' => sec(Donnee::tempsBatiments($i, $niveau+1, $planete)),
'enfile' => $planete->file_bat->batiment_objectInFile($i)
);
}
}
}
else
{
$page = 'batiments_alli';
$TEMP_liste = array();
foreach($planete->batiments as $i => $niveau)
{
if (!empty($LANG[$planete->race]['alli_batiments']['noms_sing'][$i]) && Donnee::neededAlli_Batiments($i, $planete))
{
$TEMP_liste[] = array (
'id' => $i,
'image' => $alli_batimeni[$i],
'niveau' => $niveau,
'nec_metal' => Donnee::metalAlli_Batiments($i, $niveau+1, $planete),
'nec_cristal' => Donnee::cristalAlli_Batiments($i, $niveau+1, $planete),
'nec_hydrogene' => Donnee::hydrogeneAlli_Batiments($i, $niveau+1, $planete),
'nec_credits' => Donnee::creditsAlli_Batiments($i, $niveau+1, $planete),
'temps' => sec(Donnee::tempsAlli_Batiments($i, $niveau+1, $planete)),
'enfile' => $planete->file_bat->batiment_objectInFile($i)
);
}
}
}
$template->assign('batiments', $TEMP_liste);
$template->assign('file', $planete->file_bat->printFile($planete));
unset($TEMP_liste, $niveau, $i);
?>

View file

@ -5,7 +5,7 @@ $titre = 'Carte spatiale';
//Récupération d'un numéro d'amas à regarder
if (isset($_GET['galaxie']))
$g = floor($_GET['galaxie']);
$g = intval(gpc('galaxie'));
else
$g = $planete->galaxie;
@ -19,7 +19,7 @@ if ($g > $VAR['nb_amas'])
//Récupération d'un numéro de système à regarder
if (isset($_GET['ss']))
$s = floor($_GET['ss']);
$s = intval(gpc('ss'));
else
$s = $planete->ss;
@ -68,25 +68,15 @@ for ($i = 1; $i <= $VAR['nb_planete']; $i++)
if ($s%5 == 2 && $i == ceil($VAR['nb_planete']/2))
{
$bdd->reconnexion();
$bdd->escape($g);
$bdd->escape($s);
$d = $bdd->unique_query("SELECT race, nom_asteroide, debris_met, debris_cri, nom, tag, fondateur FROM $table_alliances WHERE galaxie = $g AND ss = $s;");
$d = $bdd->unique_query("SELECT race, nom_asteroide, debris_met, debris_cri, nom_alliance, image, tag, fondateur FROM $table_alliances WHERE galaxie = $g AND ss = $s;");
$bdd->deconnexion();
if($d) {
if ($d['race'] == 'covenant') $ra = '(c)';
elseif ($auth_level >= 6 && md5($d['race']) == '34c19b21bd4a3dda389e767d32fe9779') $ra = '(f)';
else $ra = '(h)';
$TEMP_carte[] = array('A', $d['nom_asteroide'], $d['debris_met'], $d['debris_cri'], $ra, $d['nom'], '<a href="?p=envoyer&amp;d='.$d['fondateur'].'" class="msg"><span>Message</span></a>', $d['tag']);//, $eA['tag']);
}
else {
if($d)
$TEMP_carte[] = array('A', $d['nom_asteroide'], $d['debris_met'], $d['debris_cri'], $d['race'], $d['nom_alliance'], $d['tag'], $d['image'], 0);
else
$TEMP_carte[] = array('A');
}
}
$bdd->reconnexion();
$bdd->escape($g);
$bdd->escape($s);
$resultat = $bdd->query("SELECT id FROM $table_planete WHERE galaxie = $g AND ss = $s AND position = $i;");
if($resultat) {
$d = $bdd->unique_query("SELECT P.nom_planete, P.image, P.debris_met, P.debris_cri, U.pseudo, U.race, U.politique, U.id_alliance, A.tag FROM $table_planete P INNER JOIN $table_user U ON U.id = P.id_user LEFT OUTER JOIN $table_alliances A ON A.id = U.id_alliance WHERE P.galaxie = $g AND P.ss = $s AND P.position = $i;");
@ -102,4 +92,6 @@ for ($i = 1; $i <= $VAR['nb_planete']; $i++)
$template->assign('carte', $TEMP_carte);
$template->assign('position', array($g, $s, $Gpu, $Spu, $Gmu, $Smu));
unset($TEMP_carte, $g, $s, $Gpu, $Spu, $Gmu, $Smu, $resultat, $d, $i);
?>

View file

@ -1,5 +1,5 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX') || SURFACE != "planete") { header('Location: ./'.$VAR['first_page']); exit; }
$page = 'caserne';
$titre = $LANG[$planete->race]['batiments']['noms_sing'][9];
@ -8,19 +8,21 @@ $titre = $LANG[$planete->race]['batiments']['noms_sing'][9];
erreur('Vous devez d\'abord construire une '.$LANG[$planete->race]['batiments']['noms_sing'][9], "red", '?p=batiments', 3500);
//Lancement d'une nouvelle construction
if (isset($_GET['v']) && is_numeric($_GET['v']) && $nbv = floor(gpc('nombre', 'post'))) {
$planete->file_cas->caserne_addObjet(intval(gpc('v')), $nbv, $planete);
redirection($VAR['menu']['caserne']);
}
if (isset($_GET['c']) && ($id = intval(gpc('c'))) >= 0 && $nbc = floor(gpc('cas'.$id, 'post')))
{
$planete->file_cas->caserne_addObjet($id, $nbc, $planete);
redirection($VAR['menu']['caserne']);
}
//Annulation d'une nouvelle construction
if (isset($_GET['a'])) {
$n = intval(gpc('n'));
if (empty($n)) $n = 1;
$planete->file_cas->caserne_delObjet(intval(gpc('a')), $n, $planete);
redirection($VAR['menu']['caserne']);
}
if (isset($_GET['a']))
{
$n = intval(gpc('s'));
if (empty($n)) $n = 1;
$planete->file_cas->caserne_delObjet(intval(gpc('a')), $n, $planete);
redirection($VAR['menu']['caserne']);
}
$TEMP_liste = array();
foreach($planete->casernes as $i => $nombre)
@ -42,4 +44,6 @@ $titre = $LANG[$planete->race]['batiments']['noms_sing'][9];
$template->assign('unites', $TEMP_liste);
$template->assign('file', $planete->file_cas->printFile($planete));
unset($TEMP_liste, $i, $n, $niveau);
?>

View file

@ -1,26 +1,38 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX')) { header('Location: ./'.$VAR['first_page']); exit; }
$page = 'chantierspatial';
$titre = ucfirst($LANG[$planete->race]['batiments']['noms_sing'][8]);
if (SURFACE == "planete")
$titre = ucfirst($LANG[$planete->race]['batiments']['noms_sing'][8]);
else
$titre = ucfirst($LANG[$planete->race]['alli_batiments']['noms_sing'][3]);
//Si l'on est sur un astéroide, on vérifie que le joueur ait les permissions nécessaire
if (SURFACE == "asteroide" && !($planete->permissions_alliance &2))
erreur("Vous n'avez pas le grade requis pour vous occuper des vaisseaux de l'astéroide.");
//Vérification que le joueur ait bien un labo avant d'afficher la page
if ($planete->batiments[8] <= 0)
if (SURFACE == "planete" && $planete->batiments[8] <= 0)
erreur('Vous devez d\'abord construire un '.$LANG[$planete->race]['batiments']['noms_sing'][8], "red", '?p=batiments', 3500);
elseif(SURFACE == "asteroide" && $planete->batiments[3] <= 0)
erreur('Vous devez d\'abord construire une '.$LANG[$planete->race]['alli_batiments']['noms_sing'][3], "red", '?p=batiments', 3500);
//Lancement d'une nouvelle construction
if (isset($_GET['v']) && is_numeric($_GET['v']) && $nbv = floor(gpc('nombre', 'post'))) {
$planete->file_vais->vaisseaux_addObjet(intval(gpc('v')), $nbv, $planete);
redirection($VAR['menu']['chantierspatial']);
}
if (isset($_GET['v']) && ($id = intval(gpc('v'))) >= 0 && $nbv = floor(gpc('vais'.$id, 'post')))
{
$planete->file_vais->vaisseaux_addObjet($id, $nbv, $planete);
redirection($VAR['menu']['chantierspatial']);
}
//Annulation d'une nouvelle construction
if (isset($_GET['a'])) {
$n = intval(gpc('n'));
if (empty($n)) $n = 1;
$planete->file_vais->vaisseaux_delObjet(intval(gpc('a')), $n, $planete);
redirection($VAR['menu']['chantierspatial']);
}
if (isset($_GET['a']))
{
$n = intval(gpc('s'));
if (empty($n)) $n = 1;
$planete->file_vais->vaisseaux_delObjet(intval(gpc('a')), $n, $planete);
redirection($VAR['menu']['chantierspatial']);
}
$TEMP_liste = array();
foreach($planete->vaisseaux as $i => $nombre)
@ -42,4 +54,6 @@ $titre = ucfirst($LANG[$planete->race]['batiments']['noms_sing'][8]);
$template->assign('vaisseaux', $TEMP_liste);
$template->assign('file', $planete->file_vais->printFile($planete));
unset($TEMP_liste, $i, $n, $niveau);
?>

View file

@ -1,6 +1,11 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX') || SURFACE != "planete") { header('Location: ./'.$VAR['first_page']); exit; }
$page = $p;
$onglet = gpc('n');
if (!empty($onglet))
$template->assign('onglet', $onglet);
else
$template->assign('onglet', "unites");
$titre = ucfirst($LANG[$planete->race]['batiments']['noms_sing'][7]);
//Vérification que le joueur ait bien un labo avant d'afficher la page
@ -8,26 +13,28 @@ $titre = ucfirst($LANG[$planete->race]['batiments']['noms_sing'][7]);
erreur('Vous devez d\'abord construire un '.$LANG[$planete->race]['batiments']['noms_sing'][7], "red", '?p=batiments', 3500);
//Lancement d'une nouvelle construction
if (isset($_GET['v']) && is_numeric($_GET['v']) && $nbv = floor(gpc('nombre', 'post'))) {
$planete->file_ter->terrestre_addObjet(intval(gpc('v')), $nbv, $planete);
redirection($VAR['menu'][$p]);
}
if (isset($_GET['v']) && ($id = intval(gpc('v'))) >= 0 && $nbv = floor(gpc('terr'.$id, 'post')))
{
$planete->file_ter->terrestre_addObjet($id, $nbv, $planete);
redirection($VAR['menu'][$p].'&n='.$onglet);
}
//Annulation d'une nouvelle construction
if (isset($_GET['a'])) {
$n = intval(gpc('n'));
if (empty($n)) $n = 1;
$planete->file_ter->terrestre_delObjet(intval(gpc('a')), $n, $planete);
redirection($VAR['menu'][$p]);
}
if (isset($_GET['a']))
{
$n = intval(gpc('s'));
if (empty($n)) $n = 1;
$planete->file_ter->terrestre_delObjet(intval(gpc('a')), $n, $planete);
redirection($VAR['menu'][$p].'&n='.$onglet);
}
$TEMP_liste = array();
foreach($planete->terrestres as $i => $nombre)
{
$type = Donnee::typeTerrestre($i);
if (!empty($LANG[$planete->race]['terrestre']['noms_sing'][$i]) && (($p == "defenses" && !$type) || ($p == "chantierterrestre" && $type)) && Donnee::neededTerrestre($i, $planete))
if (!empty($LANG[$planete->race]['terrestre']['noms_sing'][$i]) && (($onglet == "defenses" && !$type) || ($onglet != "defenses" && $type)) && Donnee::neededTerrestre($i, $planete))
{
$TEMP_liste[] = array (
'id' => $i,
@ -44,4 +51,6 @@ $titre = ucfirst($LANG[$planete->race]['batiments']['noms_sing'][7]);
$template->assign('unites', $TEMP_liste);
$template->assign('file', $planete->file_ter->printFile($planete));
unset($TEMP_liste, $i, $n, $niveau, $onglet);
?>

View file

@ -1,5 +1,5 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX') || SURFACE != "planete") { header('Location: ./'.$VAR['first_page']); exit; }
$page = 'description';
$titre = 'D&eacute;tails';
@ -78,14 +78,14 @@ function tableauProd($ibat,$nivo)
if (empty($_GET['r']) || ($_GET['r'] != 'humain' && $_GET['r'] != 'covenant'))
$_GET['r'] = $planete->race;
$race = $_GET['r'];
$race = gpc('r');
$template->assign('raceAff', $race);
if (isset($_GET['t']) && is_numeric($_GET['t']) && !empty($LANG[$race]["technologies"]["noms_sing"][$_GET['b']][$_GET['t']]))
{
$template->assign('type', 'technologies');
$b = intval($_GET['b']);
$t = intval($_GET['t']);
$b = intval(gpc('b'));
$t = intval(gpc('t'));
$template->assign('branche', $b);
$template->assign('id', $t);
@ -96,7 +96,7 @@ if (isset($_GET['t']) && is_numeric($_GET['t']) && !empty($LANG[$race]["technolo
elseif (isset($_GET['b']) && is_numeric($_GET['b']) && !empty($LANG[$race]["batiments"]["noms_sing"][$_GET['b']]))
{
$template->assign('type', 'batiments');
$t = intval($_GET['b']);
$t = intval(gpc('b'));
$template->assign('id', $t);
$template->assign('image', $batimeni[$t]);
$template->assign('tableau_prod', tableauProd($t, $planete->batiments[$t]));
@ -109,19 +109,21 @@ elseif (isset($_GET['b']) && is_numeric($_GET['b']) && !empty($LANG[$race]["bati
elseif (isset($_GET['v']) && is_numeric($_GET['v']) && !empty($LANG[$race]["vaisseaux"]["noms_sing"][$_GET['v']]))
{
$template->assign('type', 'vaisseaux');
$t = intval($_GET['v']);
$t = intval(gpc('v'));
$template->assign('id', $t);
$template->assign('image', $nomvaisi[$t]);
$template->assign('ressourcesNext', array(Donnee::metalVaisseaux($t, $planete), Donnee::cristalVaisseaux($t, $planete), Donnee::hydrogeneVaisseaux($t, $planete), Donnee::tempsVaisseaux($t, $planete)));
$template->assign('etat', Donnee::print_neededVaisseaux($t, $planete, $race));
$template->assign('caract', array($nomvais_at[$t], $nomvais_bc[$t], $nomvais_pv[$t], $nomvais_rs[$t]));
}
elseif (isset($_GET['d']) && is_numeric($_GET['d']) && !empty($LANG[$race]["terrestre"]["noms_sing"][$_GET['v']]))
elseif (isset($_GET['d']) && is_numeric($_GET['d']) && !empty($LANG[$race]["terrestre"]["noms_sing"][$_GET['d']]))
{
$template->assign('type', 'terrestre');
$t = $_GET['d'];
$t = gpc('d');
$template->assign('id', $t);
$template->assign('image', $nomterri[$t]);
$template->assign('ressourcesNext', array(Donnee::metalTerrestre($t, $planete), Donnee::cristalTerrestre($t, $planete), Donnee::hydrogeneTerrestre($t, $planete), Donnee::tempsTerrestre($t, $planete)));
@ -134,15 +136,17 @@ elseif (isset($_GET['d']) && is_numeric($_GET['d']) && !empty($LANG[$race]["terr
elseif (isset($_GET['c']) && is_numeric($_GET['c']) && !empty($LANG[$race]["caserne"]["noms_sing"][$_GET['c']]))
{
$template->assign('type', 'caserne');
$t = $_GET['c'];
$t = gpc('c');
$template->assign('id', $t);
$template->assign('image', $casernei[$t]);
$template->assign('ressourcesNext', array(Donnee::metalCaserne($t, $planete), Donnee::cristalCaserne($t, $planete), Donnee::hydrogeneCaserne($t, $planete), Donnee::tempsCaserne($t, $planete)));
$template->assign('etat', Donnee::print_neededCaserne($t, $planete, $race));
$template->assign('caract', array('!!', '!!', '!!'));
}
else {
header('Location: ?p=accueil');
}
else
redirection('?p=accueil');
unset($t, $race);
?>

View file

@ -0,0 +1,199 @@
<?php
if(!defined('INDEX') || SURFACE != "asteroide") { header('Location: ../'); exit; }
$onglet = strtolower(gpc('o'));
if ($onglet == "new")
{
$page = "diplomatie/nouveau";
//On vérifie que le joueur ait les permissions pour modifier les grades
if (!($planete->permissions_alliance &8))
erreur("Vous n'avez pas le grade nécessaire pour créer des pactes !");
$type = intval(gpc("type", 'post'));
$nom_alli = gpc("nom_alli", 'post');
if (isset($_POST["type"]) && !empty($nom_alli) && $type >= 0 && $type < 5)
{
$bdd->reconnexion();
$bdd->escape($nom_alli);
$alli = $bdd->unique_query("SELECT id FROM $table_alliances WHERE nom_alliance LIKE '$nom_alli';");
if (empty($alli))
erreur("Impossible de trouver cette alliance. Vérifiez le nom !");
//On détecte tous les types de pactes en cas de guerre (pour éviter d'attaquer avec un pacte de non agression !
if ($type)
$pacte = $bdd->query("SELECT id FROM $table_alliances_pactes WHERE type = $type AND time_fin = 0 AND (accepte = 0 OR accepte = 1) AND ((id_alliance1 = ".$planete->id." AND id_alliance2 = ".$alli['id'].") OR (id_alliance2 = ".$planete->id." AND id_alliance1 = ".$alli['id']."));");
else
$pacte = $bdd->query("SELECT id FROM $table_alliances_pactes WHERE time_fin = 0 AND (accepte = 0 OR accepte = 1) AND ((id_alliance1 = ".$planete->id." AND id_alliance2 = ".$alli['id'].") OR (id_alliance2 = ".$planete->id." AND id_alliance1 = ".$alli['id']."));");
if (!empty($pacte) && !$type)
erreur("Avant de déclarer une guerre, veuillez abroger tous vos pactes de paix !");
elseif (!empty($pacte))
erreur("Vous avez déjà un pacte similaire avec cette alliance !");
if ($type)
$bdd->query("INSERT INTO $table_alliances_pactes (id_alliance1, id_alliance2, type, time_creation) VALUES (".$planete->id.", ".$alli['id'].", $type, ".time().");");
else
$bdd->query("INSERT INTO $table_alliances_pactes (id_alliance1, id_alliance2, type, time_creation, accepte) VALUES (".$planete->id.", ".$alli['id'].", $type, ".time().", 1);");
$bdd->deconnexion();
if ($type)
erreur("La demande de pacte a bien été enregistrée.", "green");
else
erreur("La déclaration a bien été enregistrée.", "green");
}
elseif(!empty($_GET['c']))
{
$id = intval(gpc('c'));
$bdd->reconnexion();
$demand = $bdd->unique_query("SELECT id_alliance1, id_alliance2, accepte FROM $table_alliances_pactes WHERE id = $id AND (id_alliance2 = ".$planete->id." OR id_alliance1 = ".$planete->id.") AND type = 0;");
if (!isset($demand['accepte']) || ($demand['accepte'] == 1 && $planete->id == $demand['id_alliance2']) || ($demand['accepte'] == 2 && $planete->id == $demand['id_alliance1']))
{
$bdd->deconnexion();
erreur("Impossible de demander le cesser le feu, n'êtes-vous pas dans la position du demandeur !");
}
elseif ($demand['accepte'] == 0)
{
$bdd->deconnexion();
erreur("Une demande de cesser le feu est déjà en cours !");
}
elseif ($demand['accepte'] == 1)
{
$bdd->query("UPDATE $table_alliances_pactes SET accepte = 0 WHERE id = $id AND id_alliance1 = ".$planete->id." AND accepte = 1;");
$bdd->deconnexion();
erreur("La demande de cesser le feu a bien été transmise.", "green");
}
elseif ($demand['accepte'] == 2)
{
$bdd->query("UPDATE $table_alliances_pactes SET accepte = 0, id_alliance2 = id_alliance1, id_alliance1 = ".$planete->id." WHERE id = $id AND id_alliance2 = ".$planete->id." AND accepte = 2;");
$bdd->deconnexion();
erreur("La demande de cesser le feu a bien été transmise.", "green");
}
}
}
elseif ($onglet == "archives")
{
$page = "diplomatie/archives";
$bdd->reconnexion();
$guerres = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 0 AND P.id_alliance1 = ".$planete->id." AND accepte = 1 AND time_fin != 0
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 0 AND P.id_alliance2 = ".$planete->id." AND accepte = 1 AND time_fin != 0 ORDER BY nom_alliance DESC;");
$pna = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 1 AND P.id_alliance1 = ".$planete->id." AND accepte = 1 AND time_fin != 0
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 1 AND P.id_alliance2 = ".$planete->id." AND accepte = 1 AND time_fin != 0 ORDER BY nom_alliance DESC;");
$pc = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 2 AND P.id_alliance1 = ".$planete->id." AND accepte = 1 AND time_fin != 0
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 2 AND P.id_alliance2 = ".$planete->id." AND accepte = 1 AND time_fin != 0 ORDER BY nom_alliance DESC;");
$pm = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 3 AND P.id_alliance1 = ".$planete->id." AND accepte = 1 AND time_fin != 0
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 3 AND P.id_alliance2 = ".$planete->id." AND accepte = 1 AND time_fin != 0 ORDER BY nom_alliance DESC;");
$bdd->deconnexion();
$template->assign("pnas", $pna);
$template->assign("guerres", $guerres);
$template->assign("pcs", $pc);
$template->assign("pms", $pm);
}
elseif ($onglet == "encours")
{
$page = "diplomatie/encours";
$bdd->reconnexion();
$guerres = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 0 AND P.id_alliance1 = ".$planete->id." AND (time_fin = 0 OR time_fin > ".time().")
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 0 AND P.id_alliance2 = ".$planete->id." AND (time_fin = 0 OR time_fin > ".time().")
ORDER BY nom_alliance DESC;");
$pna = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 1 AND P.id_alliance1 = ".$planete->id." AND accepte = 1 AND (time_fin = 0 OR time_fin > ".time().")
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 1 AND P.id_alliance2 = ".$planete->id." AND accepte = 1 AND (time_fin = 0 OR time_fin > ".time().")
ORDER BY nom_alliance DESC;");
$pc = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 2 AND P.id_alliance1 = ".$planete->id." AND accepte = 1 AND (time_fin = 0 OR time_fin > ".time().")
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 2 AND P.id_alliance2 = ".$planete->id." AND accepte = 1 AND (time_fin = 0 OR time_fin > ".time().")
ORDER BY nom_alliance DESC;");
$pm = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.type = 3 AND P.id_alliance1 = ".$planete->id." AND accepte = 1 AND (time_fin = 0 OR time_fin > ".time().")
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.type = 3 AND P.id_alliance2 = ".$planete->id." AND accepte = 1 AND (time_fin = 0 OR time_fin > ".time().")
ORDER BY nom_alliance DESC;");
$bdd->deconnexion();
$template->assign("pnas", $pna);
$template->assign("guerres", $guerres);
$template->assign("pcs", $pc);
$template->assign("pms", $pm);
}
else
{
$onglet = "actus";
$page = "diplomatie/general";
if ($planete->permissions_alliance &8)
{
if (!empty($_GET['a']))
{
$id = intval(gpc('a'));
$bdd->reconnexion();
$demand = $bdd->unique_query("SELECT type FROM $table_alliances_pactes WHERE id = $id AND id_alliance2 = ".$planete->id." AND accepte = 0;");
if (!isset($demand['type']))
{
$bdd->deconnexion();
erreur("Impossible de trouver le pacte !");
}
elseif ($demand['type'] == 0)
{
$bdd->query("UPDATE $table_alliances_pactes SET accepte = 1, time_fin = ".time()." WHERE id = $id AND id_alliance2 = ".$planete->id." AND accepte = 0;");
$bdd->deconnexion();
erreur("C'est la fin de la guerre, vous vennez d'accepter le cesser le feu !", "orange", $VAR['menu']['diplomatie']);
}
else
{
$bdd->query("UPDATE $table_alliances_pactes SET accepte = 1, time_creation = ".time()." WHERE id = $id AND id_alliance2 = ".$planete->id." AND accepte = 0;");
$bdd->deconnexion();
erreur("Le pacte a bien été accepté.", "green", $VAR['menu']['diplomatie']);
}
}
elseif (!empty($_GET['r']))
{
$id = intval(gpc('r'));
$bdd->reconnexion();
$demand = $bdd->unique_query("SELECT type FROM $table_alliances_pactes WHERE id = $id AND id_alliance2 = ".$planete->id." AND accepte = 0;");
if (!isset($demand['type']))
{
$bdd->deconnexion();
erreur("Impossible de trouver le pacte !");
}
elseif ($demand['type'] == 0)
{
$bdd->query("UPDATE $table_alliances_pactes SET accepte = 2 WHERE id = $id AND id_alliance2 = ".$planete->id." AND accepte = 0;");
$bdd->deconnexion();
erreur("La guerre continue, vous vennez de refuser le cesser le feu !<br />Se sera désormais à vous de proposer un cesser le feu à la fin de la guerre.", "orange", $VAR['menu']['diplomatie']);
}
else
{
$bdd->query("UPDATE $table_alliances_pactes SET accepte = 2 WHERE id = $id AND id_alliance2 = ".$planete->id." AND accepte = 0;");
$bdd->deconnexion();
erreur("Le pacte a bien été refusé.", "orange", $VAR['menu']['diplomatie']);
}
}
elseif (!empty($_GET['s']))
{
$id = intval(gpc('s'));
$bdd->reconnexion();
$bdd->query("UPDATE $table_alliances_pactes SET time_fin = ".time()." WHERE id = $id AND (id_alliance2 = ".$planete->id." OR id_alliance1 = ".$planete->id.") AND accepte = 1;");
$bdd->deconnexion();
erreur("Le pacte a bien été abrogé.", "orange", $VAR['menu']['diplomatie']);
}
}
$bdd->reconnexion();
$demand = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.id_alliance2 = ".$planete->id." AND accepte = 0 ORDER BY time_demand DESC;");
$actus_alli = $bdd->query("SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 WHERE P.id_alliance1 = ".$planete->id."
UNION SELECT P.*, A.nom_alliance, A.tag, A.id AS alliance_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance1 WHERE P.id_alliance2 = ".$planete->id." AND P.accepte != 0
ORDER BY time_demand DESC LIMIT 5;");
$actus_world = $bdd->query("SELECT P.*, A.tag AS tag1, A.nom_alliance AS nom_alliance1, A.id AS alliance1_id, B.tag AS tag2, B.nom_alliance AS nom_alliance2, B.id AS alliance2_id FROM $table_alliances_pactes P INNER JOIN $table_alliances A ON A.id = P.id_alliance2 INNER JOIN $table_alliances B ON B.id = P.id_alliance1 WHERE P.accepte = 1 AND P.id_alliance1 != ".$planete->id." AND P.id_alliance2 != ".$planete->id." ORDER BY time_demand DESC LIMIT 5;");
$bdd->deconnexion();
$template->assign("demandes", $demand);
$template->assign("actus_alli", $actus_alli);
$template->assign("actus_world", $actus_world);
unset($demand);
}
$template->assign("onglet", $onglet);
unset($onglet);
?>

View file

@ -5,367 +5,18 @@ $page = 'flotte'; //Définition d'un nom de page inexistant, mais permet de pass
include_once("game/Class/class.flotte.php");
//Création de flotte : envoi final
if (!empty($_POST['cds']))
{
//Récupération des informations envoyées
$end_galaxie = floor(gpc('amas', 'post'));
$end_ss = floor(gpc('ss', 'post'));
$end_pos = floor(gpc('pos', 'post'));
$mission = floor(gpc('mission', '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->reconnexion();
$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="'.$VAR["link"]["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 > $VAR['nb_amas'] || $end_ss > $VAR['nb_systeme'] || $end_pos > $VAR['nb_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');
//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->reconnexion();
$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 ou qu'il soit tout jeune
if ($mission == 3)
{
//Récupération de l'ID du joueur cible
$bdd->reconnexion();
$resultatu = $bdd->unique_query("SELECT mv, time_inscription FROM $table_user WHERE id = ".$resultat['id_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');
}
//TODO Autoriser l'espionnage sur les planètes inhabités
elseif ($mission == 5 && !$resultat)
erreur('Impossible d\'espionner des ressources vers la planète ['.$end_galaxie.':'.$end_ss.':'.$end_pos.'] car elle est inhabitée.', "red", '?p=flotte', 4000);
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 == 5 && $resultat['id_user'] == $id_user)
erreur('La planète que vous désirez espionner vous appartient !', "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:'.$VAR['mail_admin'].'">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_type = 1;
$flotte->end_planete = $end_galaxie.':'.$end_ss.':'.$end_pos;
}
else
{
$flotte->end_type = 0;
$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 < $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
{
$flotte->contenu = array($EBmetal, $EBcristal, $EBhydrogene);
$flotte->modifFlotte = "INSERT";
//On actualise la planète
$planete->metal -= $EBmetal;
$planete->cristal -= $EBcristal;
$planete->hydrogene -= floor($EBhydrogene + $conso);
$planete->vaisseaux = $sauv;
$planete->addModif("vaisseaux");
unset($flotte);
unset($SESS->values['vais']);
$SESS->put();
erreur('Votre flotte a été envoyée avec succès.', "green", '?p=flotte', 4000);
}
}
}
}
if (!empty($_POST['cds']) && !empty($SESS->values["prepFlottes"][$_POST['cds']]))
require('game/jeu/flottes/envoyer.php');
//Restauration d'une flotte sauvegardée
elseif (isset($_GET['c']) && !empty($SESS->values["prepFlottes"][$_GET['c']]))
require('game/jeu/flottes/restaure.php');
//Création de flotte : page 2
elseif (!empty($_POST['envoie']))
{
$nombreVaisseau = 0;
foreach ($planete->vaisseaux as $key => $vaisseau){
$v = gpc('v'.$key, 'post');
if (!is_numeric($v))
$v = 0;
else
$v = (int)abs($v);
//On vérifie qu'il y a suffisamment de vaisseaux sur la planète
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'][6] || $SESS->values['vais'][13]) $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>');
//Récupération des destinations favorites et des colonies
$favoris = array();
include_once("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.']';
}
$favorisC = array();
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);
}
elseif (!empty($_POST['envoie']) || !empty($_POST['groupe']))
require('game/jeu/flottes/preparer.php');
//Affichage du détail d'une flotte
elseif (!empty($_GET['n']))
{
$idN = ceil(gpc('n'));
$flotteN = new Flotte($idN, false);
$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
{
//Changement du nom de la flotte
if (!empty($_POST['nomflotte']))
{
$nouvNom = gpc('nomflotte', 'post');
$flotteN->nom = $nouvNom;
$flotteN->addModifFlotte("nom");
redirection("?p=flotte&n=".$idN);
}
//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';");
redirection("?p=flotte&n=".$idN);
}
else
erreur('Impossible d\'annuler la mission, elle a déjà commencée.', "red", '?p=flotte&n='.$idN, 1500);
}
$SESS->values['ret_fleet'] = md5('HB.fleet_'.rand().'☺ß☻');
$SESS->put();
$template->assign('ret_fleet', $SESS->values['ret_fleet']);
$template->assign('flotte', $flotteN);
$page = 'flotten';
}
}
require('game/jeu/flottes/details.php');
//Affichage de la page générale
else
{
//Demande de 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;
$planete->addModifUser('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;
$planete->addModifUser('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->reconnexion();
$flottes = $bdd->query("SELECT * FROM $table_flottes WHERE id_user = $id_user;");
$bdd->deconnexion();
$nbr = $bdd->num_rows;
//Extraction des flottes en cours
$TEMP_flottesEC = array();
if ($flottes)
{
foreach ($flottes as $flotte)
{
if (($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) {
$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['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);
//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" name="envoie" 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));
$page = 'flotte1';
}
require('game/jeu/flottes/principal.php');
?>

View file

@ -0,0 +1,48 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$idN = intval(gpc('n'));
$flotteN = new Flotte($idN, false);
$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
{
//Changement du nom de la flotte
if (!empty($_POST['nomflotte']))
{
$nouvNom = gpc('nomflotte', 'post');
$flotteN->nom = $nouvNom;
$flotteN->addModifFlotte("nom");
redirection("?p=flotte&n=".$idN);
}
//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 = ".$planete->id_user." AND id = $idN;");
redirection("?p=flotte&n=".$idN);
}
else
erreur('Impossible d\'annuler la mission, elle a déjà commencée.', "red", '?p=flotte&n='.$idN, 1500);
}
$SESS->values['ret_fleet'] = md5('HB.fleet_'.rand().'☺ß☻');
$SESS->put();
$template->assign('ret_fleet', $SESS->values['ret_fleet']);
$template->assign('flotte', $flotteN);
$page = 'flotten';
}
unset($idN, $flotteN, $nouvNom, $tpsDD);
?>

View file

@ -0,0 +1,162 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
//Récupération des informations envoyées
$idPrep = gpc("cds", "post");
$SESS->values["prepFlottes"][$idPrep]['nom'] = gpc('nomflotte', 'post');
$SESS->values["prepFlottes"][$idPrep]['end_galaxie'] = $end_galaxie = intval(gpc('amas', 'post'));
$SESS->values["prepFlottes"][$idPrep]['end_systeme'] = $end_ss = intval(gpc('ss', 'post'));
$end_pos = gpc('pos', 'post');
if ($end_pos != "A")
$SESS->values["prepFlottes"][$idPrep]['end_position'] = floor($end_pos);
else
$SESS->values["prepFlottes"][$idPrep]['end_position'] = $end_pos;
$SESS->values["prepFlottes"][$idPrep]['embarquer'] = array($EBmetal = floor(str_replace(' ', '', gpc('metal', 'post'))), $EBcristal = floor(str_replace(' ', '', gpc('cristal', 'post'))), $EBhydrogene = floor(str_replace(' ', '', gpc('hydrogene', 'post'))));
$SESS->values["prepFlottes"][$idPrep]['mission'] = $mission = intval(gpc('mission', 'post'));
$SESS->values["prepFlottes"][$idPrep]['vitesse'] = $vitesse = intval(gpc('vitesse', 'post'));
//On met à jour la session
$SESS->put();
//Vérification du nombre de vaisseaux sur la planète
foreach ($SESS->values["prepFlottes"][$idPrep]['vaisseaux'] as $key => $vaisseau)
{
//On vérifie qu'il y a suffisamment de vaisseaux sur la planète
if ($planete->vaisseaux[$key] < $vaisseau)
erreur('Vous n\'avez pas assez de vaisseaux sur cette planète pour envoyer cette flotte !', "red", $VAR["menu"]["flotte"]);
}
//Vérification des conditions de mission
if ($mission <= 0 || $mission > 7 || ($SESS->values["prepFlottes"][$idPrep]['type'] == 3 && $mission != 3 && $mission != 2))
erreur("La mission sélectionnée est incorrecte !", "red", $VAR["menu"]["flotte"]);
//Vérification que le nombre de slots ne soit pas dépassé
if (slots($planete->id_user) <= 0)
erreur('Vous ne pouvez pas envoyer plus de flottes simultanément.', "red", $VAR["menu"]["flotte"]);
//Vérifications en cas de mission colonisation
if ($mission == 2)
{
//On vérifie la mission, si elle est de coloniser, il faut qu'il y ait des vaisseaux de colonisation
if ($SESS->values["prepFlottes"][$idPrep]['vaisseaux'][2] <= 0)
erreur('Vous ne pouvez pas coloniser sans vaisseau de colonisation !', "red", $VAR["menu"]["flotte"]);
//On vérifie qu'une colonisation d'asteroide soit bien faite par un fondateur d'alliance en cours de création
if ($end_pos == "A")
{
$bdd->reconnexion();
$resultat = $bdd->unique_query("SELECT id FROM $table_alliances_creation WHERE fondateur = ".$planete->id_user.";");
$bdd->deconnexion();
if (!$resultat)
erreur('Fonder d\'abord une alliance avant de coloniser un astéroide !', "red", $VAR["menu"]["flotte"]);
}
}
//On vérifie que les attaques soient bien activées
if ($mission == 3 && !$VAR["attaques"])
erreur('Les attaques sont désactivées pour le moment. Pour plus d\'informations, <a href="'.$VAR["menu"]["forums"].'">consultez le forum</a>.', "red", $VAR["menu"]["flotte"], 5000);
//On vérifie la mission, si elle est de recycler, il faut qu'il y ait des reclycleurs
if ($mission == 4 && $SESS->values["prepFlottes"][$idPrep]['vaisseaux'][3] <= 0)
erreur('Vous ne pouvez pas recycler sans recycleur !', "red", $VAR["menu"]["flotte"]);
//On vérifie la mission, si elle est d'espionner, il faut qu'il y ait des sondes
if ($mission == 5 && $SESS->values["prepFlottes"][$idPrep]['vaisseaux'][6] <= 0 && $SESS->values["prepFlottes"][$idPrep]['vaisseaux'][13] <= 0)
erreur('Vous ne pouvez pas espionner sans sonde d\'espionnage !', "red", '?p=flotte');
//Vérification que la destination ne soit pas en dehors de la galaxie
if ($end_galaxie > $VAR['nb_amas'] || $end_ss > $VAR['nb_systeme'] || $end_galaxie < 0 || $end_ss < 1 || (($end_pos > $VAR['nb_planete'] || $end_pos < 1) && $end_pos != "A") || ($end_galaxie < 1 && $SESS->level < 6))
erreur('La destination de la flotte n\'est pas correcte.', "red", '?p=flotte');
//On vérifie que l'on possède assez de ressources
if ((!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
if ((!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 de la flotte
if (!is_numeric($vitesse) || $vitesse < 0 || $vitesse > 100)
erreur('La vitesse de votre flotte est incorrecte !', "red", '?p=flotte');
//Recherche de la planète ou de l'astéroïde
if ($end_pos == "A")
{
$bdd->reconnexion();
$resultat = $bdd->unique_query("SELECT id, id AS id_user, debris_met, debris_cri FROM $table_alliances WHERE galaxie = $end_galaxie AND ss = $end_ss;");
$bdd->deconnexion();
}
else
{
$bdd->reconnexion();
$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();
}
//On vérifie qu'il n'y ait pas une interaction entre deux multi-comptes
if (count($multi) > 1 && ($mission == 1 || $mission == 6 || $mission == 7))
{
foreach($multi as $test)
{
if ($test['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).');
}
}
if ($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)
{
if ($end_pos != "A")
erreur('La planète que vous voulez coloniser est déjà habitée.', "red", '?p=flotte', 3000);
else
erreur('L\'astéroide que vous voulez coloniser est déjà habitée.', "red", '?p=flotte', 3000);
}
//Si la mission est d'attaquer, on vérifie que le joueur cible ne soit pas ne mode vacances ou qu'il soit tout jeune
elseif ($mission == 3 && $end_pos != "A")
{
$bdd->reconnexion();
$resultatu = $bdd->unique_query("SELECT mv, time_inscription FROM $table_user WHERE id = ".$resultat['id_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'] == $planete->id_user)
erreur('La planète que vous tentez d\'attaquer vous appartient.', "red", '?p=flotte');
}
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");
}
//TODO Autoriser l'espionnage sur les planètes inhabités
elseif ($mission == 5)
{
if (!$resultat)
erreur('Impossible d\'espionner la planète ['.$end_galaxie.':'.$end_ss.':'.$end_pos.'] car elle est inhabitée.', "red", '?p=flotte', 4000);
elseif ($end_pos != "A" && $resultat['id_user'] == $planete->id_user)
erreur('La planète que vous désirez espionner vous appartient !', "red", '?p=flotte', 3000);
}
elseif ($mission == 6 && $resultat['id_user'] != $planete->id_user && $resultat['id_user'] != $planete->id_alliance)
erreur('La planète sur laquelle vous désirez stationner ne vous appartient pas.', "red", '?p=flotte', 3000);
elseif ($mission == 7 && !$resultat)
erreur('La planète sur laquelle vous désirez donner vos vaisseaux n\'existe pas.', "red", '?p=flotte', 3000);
//Création de la flotte
$flotte = new flotte();
$flotte->creer($planete, $SESS->values["prepFlottes"][$idPrep], $resultat);
$SESS->values["prepFlottes"][$idPrep]["statut"] = 2;
$SESS->put();
erreur('Votre flotte a été envoyée avec succès.', "green", '?p=flotte', 4000);
?>

View file

@ -0,0 +1,47 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
//Génération d'un ID unique pour identifier la flotte durant sa création
$idPrep = random();
//Création du tableau de session
$SESS->values["prepFlottes"][$idPrep] = array();
//On récupère les vaisseaux à envoyer
$nombreVaisseau = 0;
foreach ($planete->vaisseaux as $key => $vaisseau)
{
$v = gpc('v'.$key, 'post');
if (!is_numeric($v) || $v < 0)
$v = 0;
$SESS->values["prepFlottes"][$idPrep]['vaisseaux'][$key] = $v;
$nombreVaisseau += $v;
}
//On vérifie que l'utilisateur a bien envoyé plus d'un vaisseau
if ($nombreVaisseau <= 0)
{
unset($SESS->values["prepFlottes"][$idPrep]);
erreur('Vous devez envoyer au moins un vaisseau.', "red", '?p=flotte');
}
//On définit le type de la flotte (utilisateur ou alliance)
if (!empty($_POST['envoie']))
$SESS->values["prepFlottes"][$idPrep]['type'] = 1;
elseif (!empty($_POST['groupe']))
$SESS->values["prepFlottes"][$idPrep]['type'] = 2;
else
die ('Erreur !');
//On enregistre les paramètres en session
$SESS->values["prepFlottes"][$idPrep]['nbVaisseaux'] = $nombreVaisseau;
$SESS->values['forceFlotte'] = false;
$SESS->values["prepFlottes"][$idPrep]['time'] = time();
$SESS->values["prepFlottes"][$idPrep]['statut'] = 1;
$SESS->put();
unset($nombreVaisseau, $key, $vaisseau, $v);
header('Location: ?p=flotte&c='.$idPrep);
exit;
?>

View file

@ -0,0 +1,84 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'flotte1';
//Demande de 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;
$planete->addModifUser('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;
$planete->addModifUser('combatDE_tactique');
$chang = true;
}
if ($chang)
erreur('Tactiques mises à jour avec succès.', 'green', '?p=flotte', 1100);
}
unset($attaque, $defense, $chang);
//Affichage des flottes en cours dans la galaxie
$bdd->reconnexion();
if (SURFACE == "asteroide")
$flottes = $bdd->query("SELECT id FROM $table_flottes WHERE id_alliance = ".$planete->id.";");
else
$flottes = $bdd->query("SELECT id FROM $table_flottes WHERE id_user = ".$planete->id_user.";");
$bdd->deconnexion();
//Extraction des flottes en cours
if ($flottes)
{
foreach ($flottes as $key => $flotte)
{
$flottes[$key] = new Flotte($flotte['id']);
$flottes[$key]->load_planete();
}
$template->assign('flottesEC', $flottes);
}
//Calcul du nombre de slot disponible et vérouillage de l'envoie si besoin
$nbFlottes = count($flottes);
if (SURFACE == "asteroide")
{
if ($planete->batiments[2] == 1)
$slots = 1;
elseif ($planete->batiments[2] == 2)
$slots = 2;
elseif ($planete->batiments[2] == 3)
$slots = 4;
elseif ($planete->batiments[2] == 4)
$slots = 7;
elseif ($planete->batiments[2] == 5)
$slots = 14;
else
$slots = 0;
$slots -= $nbFlottes;
}
else
$slots = count($queryPlanetes)-$nbFlottes;
if ($slots > 0)
//$template->assign('action', '<input class="submit" name="envoie" type="submit" value="Envoyer flotte" /> <input class="submit" name="groupe" type="submit" value="Envoye groupé" />');
$template->assign('action', '<input class="submit" name="envoie" type="submit" value="Ok" />');
else
$template->assign('action', '<span class="lack">Nombre de flottes maximum simultanées atteint</span>');
$template->assign('nbflotte', $nbFlottes);
$template->assign('nbflottemax', $slots + $nbFlottes);
//Affichage des flottes en préparation
if (isset($SESS->values["prepFlottes"]))
$template->assign('flottesEP', $SESS->values["prepFlottes"]);
unset($nbFlottes, $slots, $flottes, $flotte, $key);
?>

View file

@ -0,0 +1,56 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$idPrep = gpc('c');
$template->assign('idPrep', $idPrep);
$template->assign('restaure', $SESS->values["prepFlottes"][$idPrep]);
foreach ($SESS->values["prepFlottes"][$idPrep]['vaisseaux'] as $key => $vaisseau)
{
//On vérifie qu'il y a suffisamment de vaisseaux sur la planète
if ($planete->vaisseaux[$key] < $vaisseau)
erreur('Vous n\'avez pas assez de vaisseaux sur cette planète pour envoyer cette flotte !', "red", '?p=flotte');
}
//Génération de la liste de mission possible avec les vaisseaux de la flotte
$missions = array();
if ($SESS->values["prepFlottes"][$idPrep]['type'] == 1)
$missions = array(6 => "Stationner", 7 => "Donner des vaisseaux", 1 => "Transporter");
if ($SESS->values["prepFlottes"][$idPrep]['vaisseaux'][2])
$missions[2] = "Coloniser";
if ($planete->technologies[7]& 16 && $VAR["attaques"])
$missions[3] = "Attaquer";
if ($SESS->values["prepFlottes"][$idPrep]['type'] == 1 && $SESS->values["prepFlottes"][$idPrep]['vaisseaux'][3])
$missions[4] = "Recycler";
if ($SESS->values["prepFlottes"][$idPrep]['type'] == 1 && ($SESS->values["prepFlottes"][$idPrep]['vaisseaux'][6] || $SESS->values["prepFlottes"][$idPrep]['vaisseaux'][13]))
$missions[5] = "Espionner";
//S'il n'y a aucun choix de mission possible, on abandonne
if (count($missions) == 0)
erreur('Aucune mission disponible !', "red", '?p=flotte');
$template->assign('missions', $missions);
$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>');
$page = 'flotte2';
//Récupération des destinations favorites et des colonies
$favoris = array();
include_once("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.']';
}
$favorisC = array();
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);
unset($idPrep, $missions, $fav, $vaisseau, $key, $favorisC, $favoris);
?>

View file

@ -1,40 +1,56 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'gestion';
$titre = 'Gestion';
//Demande de changement de politique
$politique = gpc('politique', 'post');
if (is_numeric($politique)) {
//On annule le changement politique si le dernier a eu lieu dans la semaine.
if ($planete->politique_lastchange > time() - 604800) erreur("La population de votre empire planètaire vient d'entrer dans une phase de révolution contre le changement de régime.<br />Pour ne pas perdre votre place au sommet de l'empire, le système politique n'a pas été changé.");
if (($planete->technologies[3] & 2048 && ($politique == 3 || $politique == 2 || $politique == 1) || $politique == 0) && $planete->politique != $politique) {
$planete->politique = $politique;
$planete->politique_lastchange = time();
$planete->addModifUser("politique");
$planete->addModifUser("politique_lastchange");
erreur("Le changement politique a bien été pris en compte par la population de vos différentes planètes.", "green");
}
elseif ($planete->politique == $politique) erreur("Ce système politique est actuellement en vigueur.", "orange");
else erreur("Impossible de choisir ce système politique !");
//Si l'on est sur un astéroïde, on charge la page de gestion d'alliance !
if (SURFACE == "asteroide")
include("game/jeu/alliances/gestion.php");
else
{
$page = 'gestion';
$titre = 'Gestion';
//Demande de changement de politique
$politique = gpc('politique', 'post');
if (is_numeric($politique))
{
//On annule le changement politique si le dernier a eu lieu dans la semaine.
if ($planete->politique_lastchange > time() - 604800)
erreur("La population de votre empire planètaire vient d'entrer dans une phase de révolution contre le changement de régime.<br />Pour ne pas perdre votre place au sommet de l'empire, le système politique n'a pas été changé.");
if (($planete->technologies[3] & 2048 && ($politique == 3 || $politique == 2 || $politique == 1) || $politique == 0) && $planete->politique != $politique)
{
$planete->politique = $politique;
$planete->politique_lastchange = time();
$planete->addModifUser("politique");
$planete->addModifUser("politique_lastchange");
erreur("Le changement politique a bien été pris en compte par la population de vos différentes planètes.", "green");
}
elseif ($planete->politique == $politique)
erreur("Ce système politique est actuellement en vigueur.", "orange");
else
erreur("Impossible de choisir ce système politique !");
}
if (SURFACE == "planete")
$template->assign('planeteEC', array(
'id' => $planete->id,
'metal' => $planete->metal,
'cristal' => $planete->cristal,
'hydrogene' => $planete->hydrogene,
'energie' => $planete->energie,
'population' => $planete->population,
)
);
$politiques = array('Anarchie');
if ($planete->technologies[3] & 2048)
{
$politiques[] = 'Fascisme (Mouvement Frieden)';
$politiques[] = 'Communisme (Mouvement Koslovic)';
$politiques[] = 'Démocratie (Administration coloniale)';
}
$template->assign('politiques', $politiques);
$template->assign('moraldetails', $politiques);
unset($politiques, $politiques, $politique);
}
$template->assign('planeteEC', array(
'id' => $planete->id,
'metal' => $planete->metal,
'cristal' => $planete->cristal,
'hydrogene' => $planete->hydrogene,
'energie' => $planete->energie,
'population' => $planete->population,
)
);
$politiques = array('Anarchie');
if ($planete->technologies[3] & 2048) {
$politiques[] = 'Fascisme (Mouvement Frieden)';
$politiques[] = 'Communisme (Mouvement Koslovic)';
$politiques[] = 'Démocratie (Administration coloniale)';
}
$template->assign('politiques', $politiques);
$template->assign('moraldetails', $politiques);
?>

View file

@ -1,5 +1,5 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX') || SURFACE != "planete") { header('Location: ./'.$VAR['first_page']); exit; }
$page = 'laboratoire';
$titre = ucfirst($LANG[$race]['batiments']['noms_sing'][6]);

View file

@ -1,5 +1,5 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX') || SURFACE != "planete") { header('Location: ./'.$VAR['first_page']); exit; }
$titre = 'Bourse';
$a = gpc('a');
@ -27,8 +27,10 @@ if(is_numeric($a) && is_numeric(gpc('a'.$a, 'post'))){
//On vérifie que le joueur ait assez de crédits pour acheter
if ($prix <= $planete->credits) {
$planete->credits -= $prix;
$planete->addCredits(-1*$prix);
$planete->addModifUser('credits');
$planete->$var += $nb;
$planete->addModif('force');
if (empty($action['graph'])) $action['graph'] = array();
else $action['graph'] = unserialize($action['graph']);
@ -58,8 +60,10 @@ elseif(is_numeric($v) && is_numeric(gpc('a'.$v, 'post'))){
$bdd->deconnexion();
$prix = ceil(pow($action['dispo'], -0.1) * $nb * 1.8)/10;
$planete->credits += $prix;
$planete->addCredits($prix);
$planete->addModifUser('credits');
$planete->$var -= $nb;
$planete->addModif('force');
if (empty($action['graph'])) $action['graph'] = array();
else $action['graph'] = unserialize($action['graph']);
@ -84,4 +88,5 @@ foreach($bourse as $key => $action){
$page = 'marche';
$template->assign('bourse', $bourse);
unset($a, $v, $var, $bourse, $graph, $key, $action, $nb, $prix);
?>

View file

@ -1,5 +1,5 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if(!defined('INDEX') || SURFACE != "planete") { header('Location: ./'.$VAR['first_page']); exit; }
$page = 'rename';
$titre = 'Renommer une planète';
@ -21,31 +21,29 @@ if (isset($_POST['planete']))
exit;
//erreur('Le nom de votre planète a été modifié avec succès.', "green", '?p=accueil');
}
unset($nouvNom);
}
elseif(isset($_GET['a']) && isset($_GET['i']) && $_GET['a'] == $SESS->values['abandon'] && !empty($idPlan) && $idPlan == $_GET['i'])
elseif(!empty($_GET['a']) && !empty($SESS->values['abandon']) && isset($_GET['i']) && $_GET['a'] == $SESS->values['abandon'] && $planete->id == $_GET['i'])
{
$galaxie = $planete->galaxie; $ss = $planete->ss; $position = $planete->position;
$bdd->reconnexion();
$bdd->query("DELETE FROM $table_planete WHERE id_user = $id_user AND id = $idPlan AND galaxie = $galaxie AND ss = $ss AND position = $position LIMIT 1;");
$bdd->query("DELETE FROM $table_flottes WHERE id_user = $id_user AND start_galaxie = $galaxie AND start_ss = $ss AND start_position = $position;");
$req = $bdd->unique_query("SELECT * FROM $table_planete WHERE id_user = $id_user LIMIT 1;");
$bdd->query("DELETE FROM $table_planete WHERE id_user = ".$planete->id_user." AND id = ".$planete->id." AND galaxie = ".$planete->galaxie." AND ss = ".$planete->ss." AND position = ".$planete->position." LIMIT 1;");
$bdd->query("DELETE FROM $table_flottes WHERE id_user = ".$planete->id_user." AND start_galaxie = ".$planete->galaxie." AND start_ss = ".$planete->ss." AND start_position = ".$planete->position.";");
$req = $bdd->unique_query("SELECT id FROM $table_planete WHERE id_user = ".$planete->id_user." LIMIT 1;");
$bdd->deconnexion();
$SESS->values['abandon'] = 0;
unset($SESS->values['abandon']);
$SESS->values['idPlan'] = $req['id'];
$SESS->put($planete->id_user);
$SESS->put();
unset($req, $planete);
erreur('Cette planète n\'est désormais plus sous votre contrôle.', "green", '?p=accueil');
}
$bdd->reconnexion();
$reqnb = $bdd->unique_query("SELECT COUNT(id) AS total FROM $table_planete WHERE id_user = $id_user;");
$bdd->deconnexion();
if ($reqnb['total'] > 1) $hashA = md5(rand(123456789,9876543210));
else $hashA = false;
$SESS->values['abandon'] = $hashA;
$SESS->put();
$template->assign('abandonH', $hashA);
if (count($queryPlanetes) > 1)
{
$template->assign('abandonH', $SESS->values['abandon'] = md5(rand(123456789,9876543210)));
$SESS->put();
}
unset($queryPlanetes);
?>

View file

@ -1,27 +1,51 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'ressources';
if(!defined('INDEX')) { header('Location: ./'.$VAR['first_page']); exit; }
$titre = 'Ressources';
if (isset($_POST['coeff_metal']) && isset($_POST['coeff_cs'])) {
if (SURFACE == "planete")
{
$page = 'ressources';
if (isset($_POST['coeff_metal']) && isset($_POST['coeff_cs'])) {
$planete->coeff_bat[0] = floor($_POST['coeff_metal'])/100;
if (isset($_POST['coeff_cristal'])) $planete->coeff_bat[1] = floor($_POST['coeff_cristal'])/100;
if (isset($_POST['coeff_hydrogene'])) $planete->coeff_bat[2] = floor($_POST['coeff_hydrogene'])/100;
$planete->coeff_bat[3] = floor($_POST['coeff_cs'])/100;
if (isset($_POST['coeff_ce'])) $planete->coeff_bat[4] = floor($_POST['coeff_ce'])/100;
$planete->addModif("coeff_bat");
redirection('?p=ressources');
}
$tablo = $planete->production(3600, true);
$template->assign('ressources_prod', $tablo[1]);
$template->assign('ressources_conso', $tablo[2]);
$template->assign('ressources_coef', $tablo[0]);
$template->assign('ressources_silo', array($planete->batiments[10], pow(2, $planete->batiments[10]) * 100000));
$template->assign('ressources_toto', array($tablo[1][2] - $tablo[2][3], '(0)'));
$template->assign('ressources_tab', array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100));
$planete->coeff_bat[0] = floor($_POST['coeff_metal'])/100;
if (isset($_POST['coeff_cristal'])) $planete->coeff_bat[1] = floor($_POST['coeff_cristal'])/100;
if (isset($_POST['coeff_hydrogene'])) $planete->coeff_bat[2] = floor($_POST['coeff_hydrogene'])/100;
$planete->coeff_bat[3] = floor($_POST['coeff_cs'])/100;
if (isset($_POST['coeff_ce'])) $planete->coeff_bat[4] = floor($_POST['coeff_ce'])/100;
$planete->addModif("coeff_bat");
unset($tablo);
}
else
{
$page = 'ressources_alli';
$don_credits = intval(gpc("credits", "post"));
if (!empty($don_credits) && $don_credits > 0)
{
//Si le joueur n'a pas assez de crédits
if ($don_credits > $planete->credits)
erreur('Vous n\'avez pas suffisamment de crédits pour en donner autant.', 'red', $VAR['menu']['ressources']);
redirection('?p=ressources');
}
$planete->addCreditsAlliance($don_credits);
$planete->addCredits(-1 * $don_credits);
$tablo = $planete->production(3600, true);
erreur('Votre don de '.$don_credits.' '.$LANG[$race]["ressources"]["noms"]["credits"].' a été effectué avec succès.', 'green', $VAR['menu']['ressources']);
}
$template->assign('ressources_prod', $tablo[1]);
$template->assign('ressources_conso', $tablo[2]);
$template->assign('ressources_coef', $tablo[0]);
$template->assign('ressources_silo', array($planete->batiments[10], pow(2, $planete->batiments[10]) * 100000));
$template->assign('ressources_toto', array($tablo[1][2] - $tablo[2][3], '(0)'));
$template->assign('ressources_tab', array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100));
unset($don_credits);
}
?>

View file

@ -3,6 +3,7 @@ if (!isset($race)) $race = $sess->values['race'];
if ($race == 'covenant') {
$casernei = array('grunt1.jpg','jackal.jpg','94990342wb4.jpg','98004530fx3.jpg','88091275ja8.jpg','hunter1.jpg','81770345oo4.jpg','88218731ts1.jpg','72188202fg9.jpg');
$alli_batimeni = array('batimentcovieux4.jpg','cristaloo3.png','powersupplycoviejq1.jpg','solaire.jpg','sanstitrevi7.jpg','oeilduprophetewj6.jpg','covielabocn5.jpg','chantierterrestrehg1.jpg','sanstitretruecolor09zn6.jpg','caserncov0ry.jpg','stockagebasement1cs10bl.jpg','ordianteur_hologramme.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg');
$batimeni = array('batimentcovieux4.jpg','cristaloo3.png','powersupplycoviejq1.jpg','solaire.jpg','sanstitrevi7.jpg','oeilduprophetewj6.jpg','covielabocn5.jpg','chantierterrestrehg1.jpg','sanstitretruecolor09zn6.jpg','caserncov0ry.jpg','stockagebasement1cs10bl.jpg','ordianteur_hologramme.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg');
$technoli = array(
array('../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg', '../covenant_na.jpg'),
@ -98,6 +99,7 @@ if (!isset($race)) $race = $sess->values['race'];
}
elseif ($race == 'humain' || $race == "none") {
$casernei = array('marines.jpg','marinehf0.jpg','grenadier.jpg','TCAO2.jpg','sniper.jpg','spartan.jpg','medecin.jpg','ingenieurs.jpg','exosquelettehbpb2.jpg');
$alli_batimeni = array('mine_m.jpg','mine_c.png','synchroniseur.jpg','centrale solaire.jpg','centrale electrique.jpg','baseradardl3.jpg','recherches.jpg','chantierterrestrecopybj8.jpg','chantier spatial.jpg','ecole militaire.jpg','stockage.jpg','search0yp.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg');
$batimeni = array('mine_m.jpg','mine_c.png','synchroniseur.jpg','centrale solaire.jpg','centrale electrique.jpg','baseradardl3.jpg','recherches.jpg','chantierterrestrecopybj8.jpg','chantier spatial.jpg','ecole militaire.jpg','stockage.jpg','search0yp.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg');
$technoli = array(
array('../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg', '../humain_na.jpg'),

View file

@ -1,230 +1,249 @@
<?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'])))
{
if (empty($_SERVER["HTTP_USER_AGENT"]))
$_SERVER["HTTP_USER_AGENT"] = "";
//Récupération des données POST ou GET
if (isset($_POST['HB_login']) && isset($_POST['HB_password']) && gpc('p') == 'connexion')
{
//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', $LANG['badNomMdp']);
$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', $LANG['badAuthConnect'].'<br /><br />'.$LANG['contactAdmin']);
$template->assign('couleur', 'red');
$template->display('cms/erreur.tpl');
exit;
}
else
{
$ip = $_SERVER["REMOTE_ADDR"];
//Connexion à la base de données
if (!isset($bdd)) $bdd = new BDD();
else $bdd->reconnexion();
//Sauvegarde du nombre d'essai pour éviter les brute-force
$bruteforce = $bdd->unique_query("SELECT nombre FROM securite_identification WHERE ip = '$ip';");
if ($bruteforce['nombre'] >= 10)
{
$fichier = fopen(ONYX."ban.xlist",'a+');
fwrite($fichier, $ip."\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 = '$ip';");
else
$bdd->query("INSERT INTO securite_identification VALUES ('$ip', '1', '".time()."');");
$bdd->deconnexion();
$template->assign('message', $LANG['badNomMdp']);
$template->assign('couleur','red');
$template->assign('script','<script type="text/javascript">setTimeout(\'document.location.href="'.$VAR['link']['accueil'].'";\', 2500);</script>');
$template->display('cms/erreur.tpl');
exit;
}
$bdd->deconnexion();
$HB_password = mdp($HB_login, $HB_password, $var['mdp_var']);
//Limiter le nombre de personnes en ligne simutanément
if ($header['count'][2] > 1500)
{
$template->assign('message', $LANG['servSature']);
$template->assign('couleur', 'red');
$template->display('cms/erreur.tpl');
exit;
}
unset($bruteforce, $fichier);
$time = time();
$bdd->reconnexion();
$bdd->escape($HB_password);
$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)
{
$template->assign('message', $LANG['badPlanete']);
$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', sprintf($LANG['banInf'], $resultat['raisonmv']));
elseif ($resultat['mv'] == 2)
$template->assign('message', sprintf($LANG['banVac'], $resultat['raisonmv'], strftime("%A %d %B à %H:%M", $resultat['last_visite']+259200)));
else
$template->assign('message', sprintf($LANG['modVac'], 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("game/vars.php");
include_once("Class/class.file.php");
include_once("Class/class.user.php");
include_once("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->reconnexion();
$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($idPlan, true);
}
}
//On met à jour toutes les planètes si le nombre de joueurs n'est pas trop important
elseif ($header['count'][2] > 400)
{
include_once("game/vars.php");
include_once("Class/class.file.php");
include_once("Class/class.user.php");
include_once("Class/class.planete.php");
foreach ($reqPlan as $plan)
{
$plan = new Planete($plan['id'], true);
}
}
unset($plan);
$bdd->reconnexion();
$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('./'.$VAR['first_page'].'?p=demarrage');
elseif (empty($multi)) redirection('./'.$VAR['first_page'].'?p=avertmulti');
else redirection('./'.$VAR['first_page'].'?p=accueil');
exit;
}
else
{
$bdd->deconnexion();
$template->assign('message', $LANG['badNomMdp']);
$template->assign('couleur', 'red');
$template->assign('script', '<script type="text/javascript">setTimeout(\'document.location.href="'.$VAR['link']['accueil'].'";\', 2500);</script>');
$template->display('cms/erreur.tpl');
exit;
}
}
$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', $LANG['badNomMdp']);
$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', $LANG['badAuthConnect'].'<br /><br />'.$LANG['contactAdmin']);
$template->assign('couleur', 'red');
$template->display('cms/erreur.tpl');
exit;
}
else
{
$ip = $_SERVER["REMOTE_ADDR"];
//Connexion à la base de données
if (!isset($bdd)) $bdd = new BDD();
else $bdd->reconnexion();
//Sauvegarde du nombre d'essai pour éviter les brute-force
$bruteforce = $bdd->unique_query("SELECT nombre FROM securite_identification WHERE ip = '$ip';");
if ($bruteforce['nombre'] >= 10)
{
$fichier = fopen(ONYX."ban.xlist",'a+');
fwrite($fichier, $ip."\n\r");
fclose($fichier);
}
$bdd->escape($HB_login);
if (!($var = $bdd->unique_query("SELECT mdp_var, mdp, auth_level FROM $table_user WHERE pseudo = '$HB_login';")) || ($var["auth_level"] >= 4 && isset($_GET['HB_login'])))
{
if (isset($bruteforce['nombre']))
$bdd->query("UPDATE securite_identification SET nombre = nombre + 1 WHERE ip = '$ip';");
else
$bdd->query("INSERT INTO securite_identification VALUES ('$ip', '1', '".time()."');");
$bdd->deconnexion();
$template->assign('message', $LANG['badNomMdp']);
$template->assign('couleur','red');
$template->assign('script','<script type="text/javascript">setTimeout(\'document.location.href="'.$VAR['link']['accueil'].'";\', 2500);</script>');
$template->display('cms/erreur.tpl');
exit;
}
$enligne = $bdd->unique_query("SELECT COUNT(session) AS enligne FROM sessions WHERE active = true AND var != '0';");
$bdd->deconnexion();
$HB_password = mdp($HB_login, $HB_password, $var['mdp_var']);
//Limiter le nombre de personnes en ligne simutanément
if ($enligne["enligne"] > 1500)
{
$template->assign('message', $LANG['servSature']);
$template->assign('couleur', 'red');
$template->display('cms/erreur.tpl');
exit;
}
//On actualise le nombre de joueur en ligne si besoin
if (abs($enligne["enligne"]-$header['count'][2]) > 6)
Cache::del('headerNB');
unset($bruteforce, $fichier);
$time = time();
$bdd->reconnexion();
$bdd->escape($HB_password);
//On vérifie que la requête ne provienne pas d'un proxy
$proxy = $bdd->unique_query("SELECT ip FROM proxy_list WHERE ip LIKE '$ip' LIMIT 1;");
$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 ($proxy)
{
erreur("Utilisation de proxy détectée !");
}
elseif ($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)
{
$template->assign('message', $LANG['badPlanete']);
$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', sprintf($LANG['banInf'], $resultat['raisonmv']));
elseif ($resultat['mv'] == 2)
$template->assign('message', sprintf($LANG['banVac'], $resultat['raisonmv'], strftime("%A %d %B à %H:%M", $resultat['last_visite']+259200)));
else
$template->assign('message', sprintf($LANG['modVac'], 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("game/vars.php");
include_once("game/Class/class.file.php");
include_once("game/Class/class.user.php");
include_once("game/Class/class.planete.php");
foreach ($reqPlan as $plan)
{
if (!empty($plan['file_bat']))
{
$file = unserialize($plan['file_bat']);
$fileBat = $file->reajusteVacances($plan['timestamp']);
}
else
$fileBat = '';
if (!empty($plan['file_tech']))
{
$file = unserialize($plan['file_tech']);
$fileTech = $file->reajusteVacances($plan['timestamp']);
}
else
$fileTech = '';
if (!empty($plan['file_cas']))
{
$file = unserialize($plan['file_cas']);
$fileCas = $file->reajusteVacances($plan['timestamp']);
}
else
$fileCas = '';
if (!empty($plan['file_vais']))
{
$file = unserialize($plan['file_vais']);
$fileVais = $file->reajusteVacances($plan['timestamp']);
}
else
$fileVais = '';
if (!empty($plan['file_ter']))
{
$file = unserialize($plan['file_ter']);
$fileTer = $file->reajusteVacances($plan['timestamp']);
}
else
$fileTer = '';
$bdd->reconnexion();
$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 = ".$plan['id'].";");
$bdd->deconnexion();
//On met à jour la planète pour tout le reste
$plan = new Planete($plan['id'], true);
$plan->actualiser();
}
}
//On met à jour toutes les planètes si le nombre de joueurs n'est pas trop important
elseif ($enligne["enligne"] > 400)
{
include_once("game/vars.php");
include_once("game/Class/class.file.php");
include_once("game/Class/class.user.php");
include_once("game/Class/class.planete.php");
foreach ($reqPlan as $plan)
{
$plan = new Planete($plan['id'], true);
}
}
unset($plan, $enligne);
$bdd->reconnexion();
$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'];
$SESS->put($resultat['id']);
if (!empty($resultat['last_visite']) && $message['time'] > $resultat['last_visite'])
redirection('./'.$VAR['first_page'].'?p=demarrage');
elseif (empty($multi))
redirection('./'.$VAR['first_page'].'?p=avertmulti');
else
redirection('./'.$VAR['first_page'].'?p=accueil');
}
else
{
$bdd->deconnexion();
$template->assign('message', $LANG['badNomMdp']);
$template->assign('couleur', 'red');
$template->assign('script', '<script type="text/javascript">setTimeout(\'document.location.href="'.$VAR['link']['accueil'].'";\', 2500);</script>');
$template->display('cms/erreur.tpl');
exit;
}
}
}
?>

View file

@ -6,7 +6,7 @@ $bdd->reconnexion();
$message = $bdd->unique_query("SELECT * FROM $table_messages_demarrage ORDER BY time DESC LIMIT 1;");
$bdd->deconnexion();
$titre = $message['titre'];
$template->assign('contenu', '<p style="margin: 0 5px;">'.bbcode(nl2br($message['contenu']), 1).'<br /><br /><a class="submit" href="?p=accueil">Continuer</a></p>');
$template->assign('contenu', '<p style="margin: 0 5px; text-align: center;">'.bbcode(nl2br($message['contenu']), 1).'<br /></p><h3><a class="submit" href="?p=accueil">Continuer</a></h3>');
unset($message);
?>

View file

@ -56,4 +56,5 @@ else {
$bdd->deconnexion();
$template->assign('destins', $destins);
}
unset($a, $amas, $ss, $pos, $destins, $res, $fav);
?>

View file

@ -1,52 +0,0 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'envoyer';
$titre = 'Envoyer un message';
if (!empty($_POST['objet']) && !empty($_POST['nom']) && !empty($_POST['message'])) {
$utils = explode(';', gpc('nom', 'post'));
$nbutil = count($utils);
$time = time();
$message = htmlspecialchars(gpc('message', 'post'));
$objet = htmlspecialchars(gpc('objet', 'post'));
if (strlen($message) > 9999) erreur('Le contenu de votre message est trop long. Limite : 9 999 caractères.');
$bdd->reconnexion();
$bdd->escape($message);
$bdd->escape($objet);
$bdd->escape($pseudo);
$introuv = array();
for($i = 0; $i < $nbutil; $i++){
$util = trim($utils[$i]);
if (empty($util)) continue;
$bdd->escape($util);
if ($util != $planete->pseudo && $env = $bdd->unique_query("SELECT id, pseudo, mail, envoyerMail FROM $table_user WHERE pseudo = '$util';")) {
$bdd->query("INSERT INTO $table_mail (destinataire, expediteur, sujet, contenu, temps) VALUES(".$env['id'].", '$id_user', '$objet', '$message', '$time');");
if ($env["envoyerMail"] >= 1 && !empty($env["mail"])) send_mail($env["mail"], 'Nouveau message privé', 'Bonjour '.$env["pseudo"].',<br /><br />Un nouveau message privé vous a été envoyé dans la galaxie '.$config['serveur_name']);
}
else $introuv[] = htmlentities($util);
}
$bdd->deconnexion();
if (!empty($introuv[0])) erreur('Impossible de trouver le/les destinataire(s) suivant(s) : '.implode(', ', $introuv).'.<br />Les autres ont bien reçu votre message.', "red", '?p=envoyer');
else erreur('Votre message a été envoyé avec succès.', "green", '?p=messagerie');
}
$amis = array();
$amisn = array();
$bdd->reconnexion();
foreach($planete->amis as $ami) {
$res = $bdd->unique_query("SELECT pseudo FROM $table_user WHERE id = ".$ami.";");
if ($res != false) {
$amis[] = $res['pseudo'];
$amisn[] = $ami;
}
}
$bdd->deconnexion();
$template->assign('amis', $amis);
$template->assign('amisn', $amisn);
if (isset($_GET['d'])) $template->assign('destinataire', gpc('d'));
if (isset($_GET['o'])) $template->assign('objet', gpc('o'));
?>

View file

@ -14,4 +14,4 @@ else
redirection($VAR['first_page']);
exit('HALO-BATTLE<br /><br />A bientôt !<br />See you soon !');
}
?>
?>

View file

@ -2,79 +2,158 @@
if(!defined('INDEX')) { header('Location: ../'); exit; }
$page = 'messagerie';
$titre = 'Messagerie';
$template->assign("link_P", "messagerie");
$template->assign("titreR", $titre);
//On interdit l'accès à la messagerie en cas de prise de contrôle d'un joueur
if (!empty($sess->values['souscontrole'][0])) erreur('Vous êtes en mode prise de contrôle, vous ne pouvez pas accèder aux messages privés des joueurs.');
if (!empty($sess->values['souscontrole'][0]))
erreur('Vous êtes en mode prise de contrôle, vous ne pouvez pas accèder aux messages privés des joueurs.');
if (isset($_POST['IM'])) {
$stop = false;
for($i=1 ; $i<=$_POST['IM'] ; $i++) {
if (!empty($_POST['m'.$i])) {
$mes = $_POST['m'.$i];
$bdd->reconnexion();
$bdd->query("DELETE FROM $table_mail WHERE destinataire = $id_user AND id = '$mes';");
$bdd->deconnexion();
$stop = true;
}
if ($id = intval(gpc('avertir')))
{
$bdd->reconnexion();
$bdd->query("UPDATE $table_mail SET statut = 1 WHERE destinataire = ".$planete->id_user." AND id = $id;");
if ($bdd->affected())
erreur('La demande de vérification de contenu par les opérateurs a été transmise avec succès.', 'green', '?p=messagerie');
else
erreur('Une demande est déjà en cours ou vous n\'êtes pas autorisé à avertir ce message.', 'red', '?p=messagerie');
$bdd->deconnexion();
}
if ($stop) { header('Location: ?p=messagerie'); exit; }
}
if (isset($_POST['IR'])) {
$stop = false;
for($i=1 ; $i<=$_POST['IR'] ; $i++) {
if (!empty($_POST['r'.$i])) {
$mes = $_POST['r'.$i];
$bdd->reconnexion();
$bdd->query("UPDATE $table_mail SET vu='s' WHERE destinataire = $id_user AND id = '$mes';");
$bdd->deconnexion();
$stop = true;
}
//On récupére l'onglet demandé
$onglet = gpc('n');
$template->assign('onglet', $onglet);
if ($onglet == "rapports")
{
//Demande de supression des messages
if (!empty($_POST))
{
$bdd->reconnexion();
foreach($_POST as $value)
$bdd->query("UPDATE $table_mail SET vu = 's' WHERE destinataire = ".$planete->id_user." AND id = ".intval($value).";");
$bdd->deconnexion();
header('Location: ?p=messagerie&n='.$onglet);
exit;
}
$bdd->reconnexion();
$data = $bdd->query("SELECT * FROM $table_mail WHERE destinataire = ".$planete->id_user." AND expediteur = false AND vu != 's' ORDER BY id DESC;");
$bdd->query("UPDATE $table_mail SET vu = 0 WHERE destinataire = ".$planete->id_user." AND expediteur = false AND vu != 's';");
$bdd->deconnexion();
$template->assign('messages', $data);
}
if ($stop) { header('Location: ?p=messagerie'); exit; }
}
elseif ($onglet == "send")
{
$bdd->reconnexion();
$data = $bdd->query("SELECT M.*, U.pseudo AS destinataire FROM $table_mail M INNER JOIN $table_user U ON U.id = M.destinataire WHERE M.expediteur = ".$planete->id_user." ORDER BY M.id DESC;");
$bdd->deconnexion();
if (gpc('avertir')) {
$id = gpc('avertir');
$bdd->reconnexion();
$bdd->escape($id);
$bdd->query("UPDATE $table_mail SET statut = 1 WHERE destinataire = $id_user AND id = $id;");
if ($bdd->affected()) erreur('La demande de vérification de contenu par les opérateurs a été transmise avec succès.', 'green', '?p=messagerie');
else erreur('Une demande est déjà en cours ou vous n\'êtes pas autorisé à avertir ce message.', 'red', '?p=messagerie');
$bdd->deconnexion();
}
$template->assign('messages', $data);
}
elseif ($onglet == "envoyer")
{
$page = 'envoyer';
$titre = 'Envoyer un message';
$bdd->reconnexion();
$messcomp = $bdd->query("SELECT M.*, U.pseudo AS expediteur FROM $table_mail M INNER JOIN $table_user U ON U.id = M.expediteur WHERE M.destinataire = $id_user AND M.expediteur != false ORDER BY M.id DESC;");
$nbmax = $bdd->num_rows;
if (!empty($_POST['objet']) && !empty($_POST['destinataire']) && !empty($_POST['message']))
{
$utils = explode(';', gpc('destinataire', 'post'));
$nbutil = count($utils);
$result = $bdd->query("SELECT M.*, U.pseudo AS expediteur FROM $table_mail M INNER JOIN $table_user U ON U.id = M.expediteur WHERE M.destinataire = $id_user AND M.expediteur != false ORDER BY M.id DESC LIMIT 50;");
$time = time();
$message = htmlspecialchars(gpc('message', 'post'));
$objet = htmlspecialchars(gpc('objet', 'post'));
if ($planete->auth_level >= 3 && $nbmax > $bdd->num_rows) $result = $messcomp;
elseif ($nbmax > $bdd->num_rows) $template->assign('avertissement', '<p style="color: red; "><b>Vous avez des messages en attente de réception. Libérez de la place dans votre messagerie pour les afficher.</b></p>');
if (strlen($message) > 99999)
erreur('Le contenu de votre message est trop long. Limite : 99 999 caractères.');
if (empty($utils))
erreur('Aucun utilisateur sélectionné.');
$TEMP_messages = array();
$i=0;
$nbc = count($result);
for ($i=0 ; $i < $nbc ; $i++) {
$TEMP_messages[] = array($result[$i]['sujet'], date("d/m/y H:i:s", $result[$i]['temps']), $result[$i]['expediteur'], bbcode($result[$i]['contenu']), $i+1, $result[$i]['id']);
}
$template->assign('messages', $TEMP_messages);
$template->assign('IM', $i);
$bdd->reconnexion();
$bdd->escape($message);
$bdd->escape($objet);
$introuv = array();
foreach($utils as $util)
{
if (empty($util))
continue;
$util = trim($util);
$bdd->escape($util);
$data = $bdd->query("SELECT * FROM $table_mail WHERE destinataire = $id_user AND expediteur = false AND vu != 's' ORDER BY id DESC;");
$nbres = $bdd->num_rows;
$TEMP_rapport = array();
for($i = 0; $i < $nbres; $i++){
$TEMP_rapport[] = array($data[$i]['sujet'], date("d/m/y H:i:s", $data[$i]['temps']), 0, bbcode($data[$i]['contenu']), $i+1, $data[$i]['id']);
}
$template->assign('rapports', $TEMP_rapport);
$template->assign('IR', $i);
$template->assign('script', '<script>
for (j=2; document.getElementsByName(\'m\'+j)[0]; j++) hide(document.getElementsByName(\'m\'+j)[0].previousSibling);
for (j=2; document.getElementsByName(\'r\'+j)[0]; j++) hide(document.getElementsByName(\'r\'+j)[0].previousSibling);
</script>');
if ($util != $planete->pseudo && $env = $bdd->unique_query("SELECT id, pseudo, mail, envoyerMail FROM $table_user WHERE pseudo = '$util';"))
send_mp($env['id'], $objet, $message, 0, $planete->id_user);
else
$introuv[] = htmlentities($util);
}
$bdd->deconnexion();
$bdd->query("UPDATE $table_mail SET vu = '0' WHERE destinataire = $id_user AND vu != 's'");
$bdd->deconnexion();
if (!empty($introuv[0]))
erreur('Impossible de trouver le/les destinataire(s) suivant(s) : '.implode(', ', $introuv).'.<br />Les autres ont bien reçu votre message.', "red", '?p=messagerie&n=envoyer');
else
erreur('Votre message a été envoyé avec succès.', "green", '?p=messagerie');
}
$amis = array();
$amisn = array();
$bdd->reconnexion();
foreach($planete->amis as $ami) {
$res = $bdd->unique_query("SELECT pseudo FROM $table_user WHERE id = ".$ami.";");
if ($res != false) {
$amis[] = $res['pseudo'];
$amisn[] = $ami;
}
}
$bdd->deconnexion();
$template->assign('amis', $amis);
$template->assign('amisn', $amisn);
if (isset($_GET['d'])) $template->assign('destinataire', gpc('d'));
if (isset($_GET['o'])) $template->assign('objet', gpc('o'));
}
else
{
//Demande de supression des messages
if (!empty($_POST))
{
$bdd->reconnexion();
foreach($_POST as $value)
$bdd->query("DELETE FROM $table_mail WHERE destinataire = ".$planete->id_user." AND id = ".intval($value).";");
$bdd->deconnexion();
header('Location: ?p=messagerie&n='.$onglet);
exit;
}
if ($SESS->level >= 3)
{
$bdd->reconnexion();
$data = $bdd->query("SELECT M.*, U.pseudo AS expediteur FROM $table_mail M INNER JOIN $table_user U ON U.id = M.expediteur WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC;");
$bdd->query("UPDATE $table_mail M SET vu = 0 WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC;");
$bdd->deconnexion();
}
else
{
$bdd->reconnexion();
//Calcul du nombre total de message enregistré
$nbmax = $bdd->unique_query("SELECT COUNT(M.id) as nb FROM $table_mail M INNER JOIN $table_user U ON U.id = M.expediteur WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false;");
$data = $bdd->query("SELECT M.*, U.pseudo AS expediteur FROM $table_mail M INNER JOIN $table_user U ON U.id = M.expediteur WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC LIMIT 50;");
$nb_view = $bdd->num_rows;
$bdd->query("UPDATE $table_mail M SET vu = 0 WHERE M.destinataire = ".$planete->id_user." AND M.expediteur != false ORDER BY M.id DESC LIMIT 50;");
$bdd->deconnexion();
}
if ($SESS->level < 3 && $nbmax["nb"] > $nb_view)
$template->assign('avertissement', '<p style="color: red;"><b>Vous avez des messages ('.($nbmax["nb"]-$nb_view).') en attente de réception. Libérez de la place dans votre messagerie pour les afficher.</b></p>');
$template->assign('messages', $data);
}
unset($onglet, $data, $nbmax);
if ($bdd->num_rows)
$template->assign('IM', $bdd->num_rows);
?>

View file

@ -0,0 +1,134 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
if (!empty($_GET['cds']) && !empty($_GET['nom']) && !empty($_GET['race']) && !empty($_GET['mdp']) && !empty($_GET['mail']) && !empty($_GET['ti']) && isset($_GET['placement']))
{
//Reconstitution du mot de passe
$_GET['mdp'] = hexstr(gpc('mdp'));
if ($_GET['cds'] == sha1(gpc('nom').'$'.gpc('race').'£'.gpc('mdp').'#'.gpc('mail').'ß'.gpc('ti').'Ó'.$_SERVER['HTTP_USER_AGENT'].'♀☻'.$_SERVER['REMOTE_ADDR'].gpc('placement')))
{
$pseudo = gpc('nom');
$race = gpc('race');
$mdp = cxor(gpc('mdp'), sha1($pseudo.'£'.$race));
$mdp = mdp($pseudo, $mdp);
$alea = $mdp[1];
$mdp = $mdp[0];
$mail = gpc('mail');
$bdd = new bdd();
$bdd->escape($pseudo);
$bdd->escape($mdp);
$bdd->escape($race);
$bdd->escape($mail);
//On vérifie que le nom d'utilisateur ou l'adresse électronique n'existe pas déjà
if ($bdd->query("SELECT id FROM $table_user WHERE pseudo = '$pseudo' OR mail = '$mail';"))
erreur("Votre compte est déjà créé sur ce serveur ou votre adresse électronique est déjà associée à un autre compte de se serveur !");
//Création de l'utilisateur
$bdd->query("INSERT INTO $table_user (pseudo, mdp, mdp_var, race, mail, last_ip, time_inscription, credits) VALUES ('$pseudo', '$mdp', '$alea', '$race', '$mail', '".$_SERVER['REMOTE_ADDR']."', '".time()."', 1000);");
$queryUser = $bdd->unique_query("SELECT id FROM $table_user WHERE pseudo = '$pseudo';");
$bdd->deconnexion();
if (empty($queryUser))
erreur("Une erreur est survenue lors de la création de votre compte sur le serveur.<br /><br />Si le problème persiste, contactez un administrateur.");
//Création des bases de la planète
require_once("game/Class/class.planete.php");
$newPlanete = new Planete(false);
//Recherche d'une planète disponible
if (empty($_GET['placement']) || !empty($SESS->values['forceInscript']))
{
$bdd->reconnexion();
while (true)
{
$galaxie = mt_rand(1, $VAR['nb_amas']);
$ss = mt_rand(1, $VAR['nb_systeme']);
$pos = mt_rand(1, $VAR['nb_planete']);
//Test pour savoir si la planète est déjà habitée
if(!$bdd->query("SELECT id FROM $table_planete WHERE galaxie=$galaxie AND ss=$ss AND position=$pos;"))
break;
}
$newPlanete->galaxie = $galaxie;
$newPlanete->ss = $ss;
$newPlanete->position = $pos;
unset($galaxie, $ss, $pos);
}
else
{
$bdd->reconnexion();
//Recherche du joueur ami
$placement = gpc("placement");
$bdd->escape($placement);
$placement_joueur = $bdd->unique_query("SELECT id FROM $table_user WHERE pseudo = '$placement';");
if (!$placement_joueur && !isset($SESS->values['forceInscript']))
{
$SESS->values['forceInscript'] = true;
$SESS->put();
$bdd->query("DELETE FROM $table_user WHERE id = ".$queryUser["id"].";");
erreur("Le joueur à côté duquel vous souhaitez être placé n\'est pas encore ou plus inscrit sur ce serveur.<br /><br />Si vous ne souhaitez plus être placé à ses côtés, rechargez la page.");
}
$placement_planetes = $bdd->query("SELECT galaxie, ss FROM $table_planete WHERE id_user = ".$placement_joueur["id"].";");
$nbPlanete = count($placement_planetes);
$decale = 0;
while ($decale < 20 && empty($newPlanete->galaxie))
{
for($i = 0; $i < $nbPlanete ; $i++)
{
$galaxie = $placement_planetes[$i]['galaxie'];
if (empty($galaxie))
continue;
//Alternativement, on essaye le système précédent et le système suivant
if ($decale%2)
$ss = $placement_planetes[$i]['ss'] - floor($decale/2);
else
$ss = $placement_planetes[$i]['ss'] + $decale/2;
if ($ss >= $VAR['nb_systeme'] || $ss <= 0)
break;
for ($j = 1; $j <= $VAR['nb_planete'] ; $j++)
{
if(!$bdd->query("SELECT id FROM $table_planete WHERE galaxie=$galaxie AND ss=$ss AND position=$j;"))
{
$newPlanete->galaxie = $galaxie;
$newPlanete->ss = $ss;
$newPlanete->position = $j;
break;
}
}
if ($newPlanete->galaxie)
break;
}
$decale++;
}
unset($decale, $galaxie, $ss, $pos, $i, $j, $nbPlanete, $placement_planetes, $placement_joueur, $placement);
//Si le système n'a trouvé aucune planète
if (empty($newPlanete->galaxie))
{
$SESS->values['forceInscript'] = true;
$SESS->put();
$bdd->query("DELETE FROM $table_user WHERE id = ".$queryUser["id"].";");
erreur("Nous n'avons pas pu trouvé de planète disponible autour de l'une des planètes du joueur que vous avez demandé.<br /><br />Si vous ne souhaitez plus être placé à ses côtés, rechargez la page.");
}
}
$bdd->deconnexion();
//On termine la création de la planète
$newPlanete->creer($queryUser['id'], true);
send_mp($queryUser['id'], "Bienvenue sur Halo-battle !", "Bienvenue sur Halo-battle ".$pseudo.",\nVous pouvez dès maintenant commencer à jouer, mais nous vous conseillons vivement de lire la FAQ afin de vous familiariser avec les principales fonctions du jeu !\n\nN'hésitez pas à vous inscrire sur notre forum : <a href=\"http://www.halo-battle.fr/forum/\">http://www.halo-battle.fr/forum/</a>\n\nCordialement, le staff d'Halo-Battle.");
unset($queryUser);
erreur("Félicitations !<br />Votre compte a été créé avec succès, vous pouvez maintenant vous connecter sur ce serveur en utilisant vos identifiants.<br />A tout de suite.", "green", $VAR["first_page"]."?index", 3500);
}
else
erreur("Impossible d'authentifier votre inscription !<br /><br />Si le problème persiste, contactez un administrateur.");
}
else
erreur("Impossible de terminer votre inscription, il manque des données !<br /><br />Si le problème persiste, contactez un administrateur.");
?>

View file

@ -0,0 +1,160 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
$titre = 'Options';
if (gpc("p") == "changeopt" && ($Un = intval(gpc('util'))) && $Un == $SESS->values["id"])
{
$Ui = gpc('auth');
$bdd = new BDD();
$bdd->escape($Ui);
$bdd->query("UPDATE user SET mdp = mdpNOUV, mdpNOUV = '', mailNOUV = '' WHERE id = $Un AND SHA1(mdpNOUV) = '$Ui' AND mdpNOUV != '';");
if ($bdd->affected() == 1)
erreur("Votre nouveau mot de passe est maintenant actif.", "green");
$bdd->query("UPDATE user SET mail = mailNOUV, mailNOUV = '', mdpNOUV = '' WHERE id = $Un AND SHA1(mailNOUV) = '$Ui' AND mailNOUV != '';");
if ($bdd->affected() == 1)
erreur("Votre nouvelle adresse électronique est maintenant active.", "green");
else
erreur("Ce lien a expiré !");
}
else
{
$onglet = gpc("n");
if ($onglet == "compte")
{
$page = 'options/2';
if (isset($_POST["chgmdp"]))
{
$bdd->reconnexion();
$user = $bdd->unique_query("SELECT mdp, mdp_var FROM $table_user WHERE id = ".$planete->id_user.";");
$bdd->deconnexion();
if (mdp($planete->pseudo, gpc('mdp_anc', 'post'), $user["mdp_var"]) == $user["mdp"])
{
$check = check_mdp($_POST['mdp_nouv'], $_POST['mdp_conf']);
if (empty($check))
{
$new_pass = mdp($planete->pseudo, gpc('mdp_nouv', 'post'), $user["mdp_var"]);
$auth = sha1($new_pass);
$bdd->reconnexion();
$bdd->escape($new_pass);
$bdd->query("UPDATE $table_user SET mdpNOUV = '$new_pass' WHERE id = ".$planete->id_user.";");
$bdd->deconnexion();
if(!send_mail($planete->mail, "Halo-Battle :: Activation de votre nouveau mot de passe", "Bonjour ".$planete->pseudo.",\n\nVous recevez ce mail suite à votre demande de changement de mot de passe.\nCe dernier entrera en vigueur une fois que vous aurez validé ce changement en cliquant sur le lien suivant :\nhttp://".$_SERVER['HTTP_HOST']."/".$VAR['first_page']."?p=changeopt&util=".$planete->id_user."&auth=".$auth."\n\nNotez que pour que le mot de passe soit changé, il faut que vous soyez connecté sur votre compte."))
erreur('Erreur lors de l\'envoie du courriel de confirmation !<br /><br />Si le probl&egrave;me perciste, <a href="mailto:'.$VAR['mail_admin'].'">contactez un administrateur</a>.');
else
erreur('Un courriel vient d\'être envoy&eacute; à '.$planete->mail.'. Le mot de passe ne sera modifi&eacute; qu\'apr&egrave;s avoir cliqu&eacute; sur le lien d\'activation contenu dans ce courriel.', "green");
unset($new_pass);
}
else
erreur($check, "red", $VAR["menu"]["options"]."&n=compte");
}
else
erreur("L'ancien mot de passe que vous avez indiqué ne correspond pas.", "red", $VAR["menu"]["options"]."&n=compte");
unset($new_pass, $auth, $user);
}
elseif (isset($_POST["chgmail"]))
{
$bdd->reconnexion();
$user = $bdd->unique_query("SELECT mdp, mdp_var FROM $table_user WHERE id = ".$planete->id_user.";");
$bdd->deconnexion();
if (mdp($planete->pseudo, gpc('mdp_mail', 'post'), $user["mdp_var"]) == $user["mdp"])
{
$nouveauMail = gpc('mail', 'post');
if (preg_match("#^[A-Za-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $nouveauMail))
{
$bdd->reconnexion();
$bdd->escape($nouveauMail);
$result = $bdd->query("SELECT mail FROM user WHERE mail = '$nouveauMail'");
if($result)
{
$bdd->deconnexion();
erreur('Vous ne pouvez pas utiliser cette adresse mail, elle est déjà utilisée par un autre utilisateur.', "red", '?p=options');
}
else
{
$bdd->query("UPDATE user SET mailNOUV = '$nouveauMail' WHERE id = ".$planete->id_user.";");
$bdd->deconnexion();
$auth = sha1($nouveauMail);
//On envoie le mail de confirmation
if(!send_mail($nouveauMail, "Halo-Battle :: Activation de votre nouvelle adresse électronique", "Bonjour ".$planete->pseudo.",\n\nVous recevez ce mail suite à votre demande de changement d'adresse électronique. Cette dernière entrera en vigueur une fois que vous aurez validé ce changement en cliquant sur le lien suivant :\nhttp://".$_SERVER['HTTP_HOST']."/".$VAR['first_page']."?p=changeopt&util=".$planete->id_user."&auth=".$auth."\n\nNotez que pour que le changement soit pris en compte, il faut que vous soyez connecté sur votre compte."))
erreur('Erreur lors de l\'envoie du courriel de confirmation !<br /><br />Si le probl&egrave;me perciste, <a href="mailto:'.$VAR['mail_admin'].'">contactez un administrateur</a>.');
else
erreur('Un courriel vient d\'être envoy&eacute; à '.$nouveauMail.'. L\'adresse &eacute;lectronique ne sera modifi&eacute; qu\'apr&egrave;s avoir cliqu&eacute; sur le lien d\'activation contenu dans ce courriel.', "green");
}
}
else
erreur("L'adresse email que vous avez indiqué semble incorrecte.", "red", $VAR["menu"]["options"]."&n=compte");
}
else
erreur("Le mot de passe que vous avez indiqué ne correspond pas.", "red", $VAR["menu"]["options"]."&n=compte");
unset($nouveauMail, $result, $user);
}
elseif (!empty($_GET["a"]) && gpc("a") == "mv")
{
if (gpc("c") == $SESS->values['idvac'])
{
$bdd->reconnexion();
$bdd->query("UPDATE user SET mv = 1 WHERE id = ".$planete->id_user.";");
$bdd->deconnexion();
$SESS->values['connected'] = FALSE;
$SESS->put();
erreur('Le mode vacances est maintenant actif sur votre compte.<br /><br />Vous pourez vous reconnecter sur votre compte à partir de<br />'.strftime("%A %d %B à %H:%M", $planete->last_visite+259200).'<br /><br />Bonnes vacances !', "green", '?index', 10000);
}
else
erreur("Impossible d'authentifier le placement en mode vacances !", "red", $VAR["menu"]["options"]."&n=compte");
}
elseif (!empty($_GET["a"]) && gpc("a") == "dl")
{
if (gpc("c") == $SESS->values['idvac'])
{
$bdd->reconnexion();
$bdd->query("UPDATE user SET mv = -2 WHERE id = ".$planete->id_user.";");
$bdd->deconnexion();
erreur('Votre compte sera supprimé le <br />'.strftime("%A %d %B à %H:%M", mktime(date('H', $VAR["time_maintenance"]),date('i', $VAR["time_maintenance"]),0,date('n',time()+86400*2),date('d',time()+86400*2),date('y',time()+86400*2))).'.', "green");
}
else
erreur("Impossible d'authentifier la supression du compte !", "red", $VAR["menu"]["options"]."&n=compte");
}
$template->assign('idvac', $SESS->values['idvac'] = sha1(rand(123456789,9876543210).'ß‘}☻'.time()));
$SESS->put();
}
elseif ($onglet == "jeu")
{
$options = intval($_POST["recmail"]);
$page = 'options/3';
}
elseif ($onglet == "notif")
{
$page = 'options/4';
if (isset($_POST["notif"]))
{
$planete->envoyerMail = 0;
if (!empty($_POST["rapport"]))
$planete->envoyerMail += 1;
if (!empty($_POST["mp"]))
$planete->envoyerMail += 2;
$planete->addModifUser("envoyerMail");
}
}
else
{
$onglet = "ext";
$page = 'options/1';
}
$template->assign("onglet", $onglet);
}
?>

View file

@ -0,0 +1,109 @@
<?php
if(!defined('INDEX')) { header('Location: ../'); exit; }
session_start();
require_once("game/Class/class.phpmailer.php");
$page = 'oubliemdp';
$erreur = '';
if (!empty($_GET['i']) && isset($_GET['n']))
{
$Un = gpc('n');
$Ui = gpc('i');
$bdd = new BDD();
$bdd->escape($Un);
$bdd->escape($Ui);
$user = $bdd->unique_query("SELECT * FROM $table_user WHERE pseudo = '$Un' AND mdpNOUV = '$Ui';");
if ($user)
{
$bdd->query("UPDATE user SET mdp = mdpNOUV, mdpNOUV = '' WHERE pseudo = '$Un'");
$bdd->deconnexion();
$template->assign('message','Votre mot de passe a été réinitialisé avec succès.');
$template->assign('script','<script type="text/javascript">setTimeout(\'document.location.href="?index";\', 3500);</script>');
$template->assign('couleur','green');
$template->display('cms/erreur.tpl');
exit;
}
else
{
$bdd->deconnexion();
$template->assign('message','Ce lien a expiré !');
$template->assign('couleur','red');
$template->display('cms/erreur.tpl');
exit;
}
}
if ((isset($_POST['HB_pseudo']) && isset($_POST['HB_mail']) && isset($_POST['HB_captcha'])) || (isset($_GET['ps']) && isset($_GET['m']) && isset($_GET['a'])))
{
$ok = true;
if ((empty($_POST['HB_pseudo']) || empty($_POST['HB_mail'])) && (empty($_GET['ps']) || empty($_GET['m'])))
{
$ok = false;
$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($_POST['HB_captcha']))
$_POST['HB_captcha'] = '';
if (isset($_GET['m']) && is_numeric('0x'.$_GET['m']))
$_GET['m'] = cxor(hexstr(gpc('m')), date('WYDj'));
elseif (strtolower($_POST['HB_captcha']) != strtolower($_SESSION['aleat_nbr']) && gpc('a') != hash_var(gpc('ps').'☻♫☼'.date('W!Y¨D@j').'Ņ♂↨'.gpc('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 (isset($_SESSION['aleat_nbr']) && strtolower($_POST['HB_captcha']) == strtolower($_SESSION['aleat_nbr']))
{
$HB_pseudo = gpc('HB_pseudo', 'post');
$HB_mail = gpc('HB_mail', 'post');
}
else
{
$HB_pseudo = gpc('ps');
$HB_mail = gpc('m');
}
$bdd = new BDD();
$bdd->escape($HB_pseudo);
$bdd->escape($HB_mail);
$user = $bdd->unique_query("SELECT id, mdp_var FROM $table_user WHERE pseudo = '$HB_pseudo' AND mail = '$HB_mail';");
if ($user)
{
$liste = "abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$code = '';
while(strlen($code) <= 8)
{
$code .= $liste[rand(0,60)];
}
$passNOUV = mdp($HB_pseudo, $code, $user['mdp_var']);
$bdd->unique_query("UPDATE $table_user SET mdpNOUV = '$passNOUV' WHERE pseudo = '$HB_pseudo';");
$bdd->deconnexion();
if(!send_mail($HB_mail, 'Halo-Battle :: Reinitialisation du mot de passe', 'Bonjour '.$HB_pseudo.",\n\nVous recevez ce mail suite à votre demande de réinitialisation de mot de passe. Pour confirmer votre réinitialisation de mot de passe et ainsi pouvoir de nouveau accéder au jeu, cliquez sur le lien ci-après :\n\nhttp://".$_SERVER['HTTP_HOST'].'/'.$VAR['first_page'].'?p=oubliemdp&i='.$passNOUV.'&n='.$HB_pseudo."\n\nVotre nouveau mot de passe est : ".$code."\n\nA bientôt dans Halo-Battle,\nLe staff")) //Teste si le return code est ok.
{
$template->assign('message','Erreur lors de l\'envoie du courriel de confirmation !<br /><br /><small><i>'.$mail->ErrorInfo.'</i></small><br /><br />Si le problème perciste, <a href="mailto:technique@halo-battle.s-fr.com">contactez un administrateur</a>.');
$template->assign('couleur','red');
$template->display('cms/erreur.tpl');
exit;
}
else
{
$template->assign('message','Un nouveau mot de passe a été généré pour votre compte, vous le trouverez dans votre boîte de courrier électronique.<br /><br /><em>Pensez à regarder dans vos courriers indésirables, on ne sait jamais ...</em>');
$template->assign('couleur','green');
$template->display('cms/erreur.tpl');
exit;
}
$mail->SmtpClose();
unset($mail);
}
else
{
$bdd->deconnexion();
$erreur .= '<p style="color: #FF0000"><b>Nom d\'utilisateur ou adresse électronique incorrect :</b><br />L\'adresse électronique que vous avez indiqué ne correspond pas au nom d\'utilisateur. Réessayez.</p><br />';
}
}
}
$template->assign('erreurs', $erreur);
?>

View file

@ -1,4 +1,4 @@
<?php //vars.php : contient toutes les valeurs pour construire chaque batiments, unités ou technologies
<?php //vars.php : contient toutes les valeurs pour construire chaque batiments, unités ou technologies
if (!isset($technolo))
{
if (empty($race) && empty($sess->values['race'])) $race = "none";
@ -7,76 +7,48 @@ if (!isset($technolo))
}
/*
* Défenses
* Défenses
*/
//Attaque
$defense_at = array(200,800,1500,500,4500,15000,10000,25000);
//Défense (bouclier)
//Défense (bouclier)
$defense_bc = array(100,300,600,400,1000,4000,10000,20000);
//Coque (pv)
$defense_pv = array(1000,3000,6000,1800,4000,1000,15000,25000);
//Débris de métal
//Débris de métal
$defense_md = array(300,300,300,300,300,300,300,300);
//Débris de cristal
//Débris de cristal
$defense_cd = array(300,300,300,300,300,300,300,300);
//Rapide fire (nombre d'attaque par phase envers un vaisseau)
$defense_rf = array(
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1),
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1)
);
/*
* Vaisseaux
*/
//Nombre maximal de ressources embarquées
//Nombre maximal de ressources embarquées
$nomvais_rs = array(10000,50000,25000,25000,100,50,200,400,800,1000,1500,50000,100000,500);
//Coefficient vitesse
$nomvais_vitesseP = array(5,5,6,5,10,8,5,7,6,5,4,2,1,6);
//Temps de préparation
//Temps de préparation
$nomvais_vitesseS = array(5,5,6,5,4,4,5,7,6,5,4,3,2,10);
//Temps de chauffe
$nomvais_vitesseG = array(5,5,6,5,1,1,5,7,7,7,6,4,3,10);
//Attaque
$nomvais_at = array(50,50,50,50,150,200,400,900,1500,3500,6000,7000,10000,100);
//Défense (bouclier)
//Défense (bouclier)
$nomvais_bc = array(0,0,0,50,0,200,500,1250,2500,6000,5000,8000,10000,800);
//Coque (pv)
$nomvais_pv = array(1000,1500,1000,1000,1000,1000,2500,5500,9000,15000,25000,35000,50000,3000);
//Débris de métal
//Débris de métal
$nomvais_md = array(300,300,300,300,300,300,300,300,300,300,300,36000);
//Débris de cristal
//Débris de cristal
$nomvais_cd = array(300,300,300,300,300,300,300,300,300,300,300,24000);
//Rapide fire (nombre d'attaque par phase envers un vaisseau)
$nomvais_rf = array( array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Cargos petit
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Cargos grand
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Vaisseaux de colonisation
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Espionnage
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Recycleurs
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Longsword/Seraph
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Frégate
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Croiseurs de classe Halcyon
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Croiseurs de classe Marathon
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Porte vaisseaux
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Station orbitale
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Super porte-vaisseaux
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1), //Super porte-vaisseaux
array(1,1,1,1,1,1,1,1,1,1,1,1,1,1) //Super porte-vaisseaux
);
/*
Aide-mémoire pour le format des tableaux des nécessités
- Type général : batiments, technologies, ...
Aide-mémoire pour le format des tableaux des nécessités
- Type général : batiments, technologies, ...
- ID de l'objet ou branche pour les technologies
- Niveau requis ou id pour les technologies
- Bits requis (technologies uniquement)
@ -173,7 +145,7 @@ $neededTerrestre = array(
array(
array('batiments', 7, 5)
),
//Défenses
//Défenses
array(
array('batiments', 7, 1),
array('technologies', 6, 0, 1)
@ -268,62 +240,33 @@ $neededVaisseaux =
)
);
$alli_batimentVAR = array('centre', 'port', 'forge', 'urgence', 'propagande', 'economie');
$alli_batimentLIMIT = array(5, 5, 5, 5, 5, 5);
$alli_batimentCALC = array(
array(
'$a = ceil(pow(1.5,$n)*68);',
'$b = ceil(pow(1.5,$n)*17);',
'$c = 0;',
'$sec = (ceil(1.02*(3/(1+$planete->batiments[11]))*pow(1.5,$n))*(1/(1+$planete->casernes[7]*0.005)))*60;'
$neededAlli_Batiments = array(
0,
array(
array('batiments', 0, 1)
),
array(
'$a = ceil(pow(1.6,$n)*53);',
'$b = ceil(pow(1.6,$n)*27);',
'$c = 0;',
'$sec = (ceil(1.2*(3/(1+$planete->batiments[11]))*pow(1.55,$n))*(1/(1+$planete->casernes[7]*0.005)))*60;'
array(
array('batiments', 0, 3)
),
array(
'$a = ceil(pow(1.5,$n)*242);',
'$b = ceil(pow(1.5,$n)*72);',
'$c = 0;',
'$sec = (ceil(1.5*(3/(1+$planete->batiments[11]))*pow(1.624,$n))*(1/(1+$planete->casernes[7]*0.005)))*60;'
array(
array('batiments', 0, 5)
),
array(
'$a = ceil(pow(1.5,$n)*92);',
'$b = ceil(pow(1.5,$n)*37);',
'$c = 0;',
'$sec = (ceil(1.36*(3/(1+$planete->batiments[11]))*pow(1.597,$n))*(1/(1+$planete->casernes[7]*0.005)))*60;'
array(
array('batiments', 0, 4)
),
array(
'$a = ceil(pow(1.73,$n)*800);',
'$b = ceil(pow(1.73,$n)*420);',
'$c = ceil(pow(1.68,$n)*285);',
'$sec = (ceil(1.8*(3/(1+$planete->batiments[11]))*pow(1.7,$n))*(1/(1+$planete->casernes[7]*0.005)))*60;'
),
array(
'$a = ceil(pow(2,$planete->batiments[5])*750);',
'$b = ceil(pow(2,$planete->batiments[5])*500);',
'$c = 0;',
'$sec = ceil((pow(2,$planete->batiments[5])*720)/(pow(1.23,$planete->batiments[11])+0.0025*$planete->casernes[7]));'
array(
array('batiments', 0, 2)
)
);
$alli_batimentTECH = array(
0,
0,
0,
0,
array(
array($batimeni[3], 'centrale_s', 12)
),
0
);
$alli_batimentLIMIT = array(5, 5, 5, 5, 5, 5);
$alli_batimentVAR = array('centre', 'port', 'forge', 'urgence', 'propagande', 'economie');
$batimentVAR = array('mine_m','mine_c','mine_h','centrale_s','centrale_f','radar','labo','chantier_terrestre','chantier_spatial','caserne','silo','centre_info','habitation','arcologies','bunker','commercial','loisir','administration');
$casernenVAR = array('soldat1','soldat2','soldat3','soldat4','sniper','spartan','medecin','ingenieur','soldat_lourd');
$nomterrnVAR = array('vais_0', 'vais_1', 'vais_2', 'vais_3', 'vcl_1', 'vcl_2', 'vcl_3', 'vcl_4', 'def_1', 'def_2', 'def_3', 'def_4', 'def_5', 'def_6', 'def_7', 'def_8');
$nomvaisnVAR = array('vaisseau_1','vaisseau_2','vaisseau_3','vaisseau_4','vaisseau_5','vaisseau_6','vaisseau_7','vaisseau_8','vaisseau_9','vaisseau_10','vaisseau_11','vaisseau_12','vaisseau_13','vaisseau_14');
$coeffVAR = array('coeff_mine_m', 'coeff_mine_c', 'coeff_mine_h', 'coeff_centrale_s', 'coeff_centrale_f');
$ressoVAR = array('contenu_metal', 'contenu_cristal', 'contenu_hydrogene');
//Nouvel arbre de technologie
$technologiesVAR = array("techno_indu", "techno_inge", "techno_inge2", "techno_poli", "techno_arme", "techno_defe", "techno_defe2", "techno_proj", "techno_expansion");
?>
?>