2020-11-15 15:12:32 +00:00
< ? php
include_once ( " Class/surface.php " );
/***************************************************************************
* class . asteroide . php
* ---------------------
* begin : Jeudi 25 décembre 2008
* update : Dimanche 4 janvier 2008
* email : nemunaire @ gmail . com
*
*
***************************************************************************/
class Asteroide extends Surface
{
var $fondateur ,
$sante ,
$nom_alliance ,
$tag ,
$wing ,
$nom_asteroide ,
$image_asteroide ,
$position = 5 ,
$cap = 123456789 ,
$credits_alliance ,
$points_alliance ,
$url_chat ,
$url_forum ,
$details = array ();
/**
* Constructeur
* @ param int $id id de la planète à importer
*
* @ return void
* @ access public
*/
function __construct ( $id = 0 )
{
if ( ! empty ( $id )) {
global $table_alliances , $SESS ;
global $alli_batimentsVAR , $spatialVAR ;
$bdd = new BDD ();
//On traite le cas où l'on envoie les coordonnées
if ( is_numeric ( $id ))
{
$plan = $bdd -> unique_query ( " SELECT * FROM $table_alliances WHERE id = $id ; " );
$bdd -> deconnexion ();
}
elseif ( preg_match ( '#^\[?([0-9]{1,2}):([0-9]{1,2}):?[Aa]?\]?$#' , $id , $position ))
{
$plan = $bdd -> unique_query ( " SELECT * FROM $table_alliances WHERE galaxie = " . $position [ 1 ] . " AND ss = " . $position [ 2 ] . " ; " );
$bdd -> deconnexion ();
}
else
die ( 'Erreur #04 : Format de recherche d\'asteroide incorrect !' );
if ( ! empty ( $plan ))
{
$this -> id = $plan [ " id " ];
parent :: User ( $SESS -> values [ 'id' ]); //On utilise le numéro d'utilisateur enregistré en session
$this -> galaxie = $plan [ " galaxie " ];
$this -> ss = $plan [ " ss " ];
2020-11-15 16:20:47 +00:00
$this -> points_alliance = @ $plan [ " points_alliance " ];
2020-11-15 15:12:32 +00:00
$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_batimentsVAR as $bat )
$this -> batiments [] = $plan [ $bat ];
if ( ! empty ( $plan [ " file_bat " ]))
$this -> file_bat = unserialize ( $plan [ " file_bat " ]);
else
$this -> file_bat = new FileAlliancesBatiments ();
foreach ( $spatialVAR as $vais )
$this -> vaisseaux [] = $plan [ $vais ];
if ( ! empty ( $plan [ " file_vais " ]))
$this -> file_vais = unserialize ( $plan [ " file_vais " ]);
else
$this -> file_vais = new FileSpatial ( 'vaisseaux' );
}
}
}
function loadDetails ()
{
global $table_alliances , $table_user ;
$bdd = new bdd ();
$this -> details = array_merge ( $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 -> unique_query ( " SELECT COUNT(id) AS nb_membres FROM $table_user WHERE id_alliance = " . $this -> id . " ; " ));
$bdd -> deconnexion ();
}
function actualiser ( $actuFile = true , $first = false )
{
//Actualisation des files d'attentes
if ( $actuFile )
{
$this -> file_bat -> ready ( $this );
$this -> file_vais -> ready ( $this );
}
}
function checkAndRetireRessources ( $metal , $cristal , $hydrogene , $credits )
{
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 ;
}
function addRessources ( $metal , $cristal , $hydrogene , $credits )
{
$perte = 0 ;
$this -> metal += $metal ;
if ( $this -> metal > $this -> cap )
{
$perte += $this -> metal - $this -> cap ;
$this -> metal = $this -> cap ;
}
$this -> cristal += $cristal ;
if ( $this -> cristal > $this -> cap )
{
$perte += $this -> cristal - $this -> cap ;
$this -> cristal = $this -> cap ;
}
$this -> hydrogene += $hydrogene ;
if ( $this -> hydrogene > $this -> cap )
{
$perte += $this -> hydrogene - $this -> cap ;
$this -> hydrogene = $this -> cap ;
}
$this -> hydrogecredits_alliancene += $credits ;
$this -> addModif ( " force " );
$this -> addModif ( " credits_alliance " );
return $perte ;
}
function addCreditsAlliance ( $credits )
{
$this -> credits_alliance += $credits ;
$this -> addModif ( " credits_alliance " );
return 0 ;
}
function addPoints ( $metal , $cristal , $hydrogene , $credits = 0 , $demolition = false )
{
global $table_bourse_ressources ;
//On charge les 3 valeurs boursières
$bdd = new BDD ();
$bourse = $bdd -> query ( " SELECT dispo FROM $table_bourse_ressources ; " );
$bdd -> deconnexion ();
if ( ! empty ( $credits ))
{
//TODO Equivalence non prouvée entre $credits/bourse_calcPrixBase($bourse[0]["dispo"], 0.7); et $credits/bourse_calcPrixBase($bourse[0]["dispo"], 1) * 0.7; dans le but de ne donner que 70% des points
$metal += $credits / bourse_calcPrixBase ( $bourse [ 0 ][ " dispo " ], 0.7 );
$cristal += $credits / bourse_calcPrixBase ( $bourse [ 1 ][ " dispo " ], 0.7 );
$hydrogene += $credits / bourse_calcPrixBase ( $bourse [ 2 ][ " dispo " ], 0.7 );
}
$points = bourse_calcPrixBase ( $bourse [ 0 ][ " dispo " ], $metal );
$points += bourse_calcPrixBase ( $bourse [ 1 ][ " dispo " ], $cristal );
$points += bourse_calcPrixBase ( $bourse [ 2 ][ " dispo " ], $hydrogene );
if ( $demolition )
$this -> points_alliance -= intval ( $points );
else
$this -> points_alliance += intval ( $points );
$this -> addModif ( " points_alliance " );
}
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
$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 );
$this -> modif = array ( " fondateur " , " race " , " nom_alliance " , " galaxie " , " ss " , " tag " , " nom_asteroide " , " image_asteroide " );
}
/**
* Destructeur
*
* @ return void
* @ access public
*/
function __destruct ()
{
if ( empty ( $this -> ss ) || empty ( $this -> fondateur ))
return ;
if ( DEBUG )
var_dump ( $this );
global $table_alliances ;
if ( empty ( $this -> id ))
{
$outNomChamps = array (); $outValeurs = array ();
$bdd = new BDD ();
foreach ( $this -> modif as $modif )
{
//On gère les champs variables tableaux
if ( is_array ( $modif ))
{
if ( $modif [ 0 ] == " batiments " )
$calc = dDonnees :: nameVAR ( " alli_batiments " );
else
$calc = dDonnees :: nameVAR ( $modif [ 0 ]);
if ( ! isset ( $ { $calc . 'VAR' }))
global $ { $calc . 'VAR' };
$outNomChamps [] = $ { $calc . 'VAR' }[ $modif [ 1 ]];
$outValeurs [] = $this -> { $modif [ 0 ]}[ $modif [ 1 ]];
}
elseif ( $modif == " force " )
{
$outNomChamps [] = " metal " ;
$outNomChamps [] = " cristal " ;
$outNomChamps [] = " hydrogene " ;
$outValeurs [] = $this -> metal ;
$outValeurs [] = $this -> cristal ;
$outValeurs [] = $this -> hydrogene ;
}
elseif ( ! is_array ( $this -> { $modif }))
{
$bdd -> escape ( $this -> { $modif });
$outNomChamps [] = $modif ;
if ( is_int ( $this -> { $modif }) || is_float ( $this -> { $modif }))
$outValeurs [] = $this -> { $modif };
else
$outValeurs [] = " ' " . $this -> { $modif } . " ' " ;
}
else
{
if ( is_array ( $this -> { $modif }) && $modif != " coeff_bat " && $modif != " vaisseaux " && $modif != " terrestres " && $modif != " casernes " && $modif != " technologies " && $modif != " batiments " )
{
$prep = serialize ( $this -> { $modif });
$bdd -> escape ( $prep );
$outNomChamps [] = $modif ;
$outValeurs [] = " ' $prep ' " ;
}
else
{
$calc = dDonnees :: nameVAR ( $modif );
if ( ! isset ( $ { $calc . 'VAR' }))
global $ { $calc . 'VAR' };
foreach ( $this -> { $modif } as $j => $value )
{
$outNomChamps [] = $ { $calc . 'VAR' }[ $j ];
$outValeurs [] = $value ;
}
}
}
}
//On supprime le lien de construction de l'alliance
$bdd -> query ( " DELETE FROM $table_alliances_creation WHERE fondateur = " . $this -> fondateur . " ; " );
if ( $bdd -> affected () != 1 )
elog ( $bdd -> affected () . " champ(s) affecté(s) par la requête du fichier " . __FILE__ . " à la ligne " . __LINE__ . " , données : fondateur = " . $this -> fondateur , 2 );
//On ajout l'astéroide
$bdd -> query ( " INSERT INTO $table_alliances ( " . implode ( ', ' , $outNomChamps ) . " ) VALUES ( " . implode ( ', ' , $outValeurs ) . " ); " );
if ( $bdd -> affected () != 1 )
elog ( $bdd -> affected () . " champ(s) affecté(s) par la requête du fichier " . __FILE__ . " à la ligne " . __LINE__ . " , données : outNomChamps = " . serialize ( $outNomChamps ) . " ; outValeurs = " . serialize ( $outValeurs ), 2 );
$bdd -> deconnexion ();
}
else
{
$out = array ();
$bdd = new BDD ();
foreach ( $this -> modif as $modif )
{
//On gère les champs variables tableaux
if ( is_array ( $modif ))
{
if ( $modif [ 0 ] == " batiments " )
$calc = dDonnees :: nameVAR ( " alli_batiments " );
else
$calc = dDonnees :: nameVAR ( $modif [ 0 ]);
if ( ! isset ( $ { $calc . 'VAR' }))
global $ { $calc . 'VAR' };
if ( empty ( $ { $calc . 'VAR' }))
trigger_error ( 'Impossible de trouver les données pour ' . $modif [ 0 ], E_USER_ERROR );
$out [] = $ { $calc . 'VAR' }[ $modif [ 1 ]] . " = " . $this -> { $modif [ 0 ]}[ $modif [ 1 ]];
}
elseif ( $modif == " force " )
{
$out [] = " metal = " . $this -> metal ;
$out [] = " cristal = " . $this -> cristal ;
$out [] = " hydrogene = " . $this -> hydrogene ;
}
elseif ( ! is_array ( $this -> { $modif }) && ! is_object ( $this -> { $modif }))
{
$bdd -> escape ( $this -> { $modif });
if ( is_int ( $this -> { $modif }) || is_float ( $this -> { $modif }))
$out [] = $modif . " = " . $this -> { $modif };
else
$out [] = $modif . " = ' " . $this -> { $modif } . " ' " ;
}
else
{
if ( $modif != " coeff_bat " && $modif != " vaisseaux " && $modif != " terrestres " && $modif != " casernes " && $modif != " technologies " && $modif != " batiments " )
{
$prep = serialize ( $this -> { $modif });
$bdd -> escape ( $prep );
$out [] = $modif . " = ' $prep ' " ;
}
else
{
$calc = dDonnees :: nameVAR ( $modif );
if ( ! isset ( $ { $calc . 'VAR' }))
global $ { $calc . 'VAR' };
foreach ( $this -> { $modif } as $j => $value )
$out [] = $ { $calc . 'VAR' }[ $j ] . " = " . $value ;
}
}
}
if ( ! empty ( $out ))
{
$sql = " UPDATE $table_alliances SET " . implode ( ', ' , $out ) . " WHERE id = " . $this -> id . " ; " ;
if ( DEBUG )
echo '<br /><br />' . $sql ;
$bdd -> query ( $sql );
if ( $bdd -> affected () != 1 )
elog ( $bdd -> affected () . " champ(s) affecté(s) par la requête du fichier " . __FILE__ . " à la ligne " . __LINE__ . " , données : out = " . serialize ( $out ), 2 );
}
$bdd -> deconnexion ();
parent :: __destruct ();
}
}
}
?>