Пример #1
0
 public static function generatePage(&$tpl, &$session, &$account)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     //Définir la page à afficher ( par défaut: resume )
     if (!isset($_GET['p'])) {
         $p = "resume";
     } elseif (is_numeric($_GET['p'])) {
         $p = (int) $_GET['p'];
     } else {
         return fctErrorMSG('page introuvable');
     }
     //Validation de la page
     if ($p != "resume" && !is_numeric($p)) {
         return fctBugReport("Format invalide", $p, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, true, true, true);
     }
     if (is_numeric($p) && ($p < 1 || $p > 9)) {
         return fctBugReport("Range invalide", $p, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, true, true, true);
     }
     //Fetcher le contenu adéquat
     $pageContenu = $tpl->fetch($account->getSkinRemotePhysicalPath() . '../_common/background/bg_' . $p . '.htm', __FILE__, __LINE__);
     $pageMenu = $tpl->fetch($account->getSkinRemotePhysicalPath() . '../_common/background/bg_menu.htm', __FILE__, __LINE__);
     //Placer le contenu de la page dans le template et appliquer les BBCodes si nécéssaires
     $tpl->set('PAGE_MENU', $pageMenu);
     $tpl->set('PAGE_CONTENU', BBCodes($pageContenu, false, false));
     //Ne pas remplacer les sauts de lignes
     //Retourner le template complété/rempli
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Visitor/background.htm', __FILE__, __LINE__);
 }
Пример #2
0
 public function queryPlus($query, $file = null, $line = null, $function = null, $class = null, $method = null, $byPassCheck = false)
 {
     try {
         $this->startTimer();
         $sql = parent::query($query);
         $this->stopTimer();
         return $sql;
     } catch (Exception $e) {
         fctBugReport('Erreur de requête', array('error' => $e->getMessage(), 'query' => $query), $file, $line);
     }
 }
Пример #3
0
 private static function doTransactions()
 {
     $limitTransaction = 5;
     //On récupère les transactions qui doivent être effectuées
     $transactions = Member_BanqueTransactionAuto::getTransactionsReady($limitTransaction);
     if (count($transactions) > 0) {
         foreach ($transactions as $transaction) {
             try {
                 $transaction->effectuerTransaction();
             } catch (Exception $e) {
                 //S'il y a un problème, on signal l'erreur mais on continue l'exécution de la remise
                 fctBugReport('Erreur lors d\'une transaction automatique de banque', array('error' => $e->getMessage()), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, false, false, false);
             }
         }
     }
 }
Пример #4
0
 public function executePlus(&$pdoInstance = NULL, $file = NULL, $line = NULL)
 {
     $try = 0;
     while ($try < 10) {
         try {
             if ($pdoInstance === NULL) {
                 return parent::execute();
             } else {
                 $pdoInstance->startTimer();
                 $sql = parent::execute();
                 $pdoInstance->stopTimer();
                 return $sql;
             }
         } catch (Exception $e) {
             // 1213 = ER_LOCK_DEADLOCK : code : '40001'
             // 1205 = ER_LOCK_WAIT_TIMEOUT : code : 'HY000'
             if ($e->getCode() != '40001' && $e->getCode() != 'HY000' || $try >= 9) {
                 fctBugReport('Erreur de requête', array('error code' => $e->getCode(), 'error' => $e->getMessage(), 'requete' => $this->queryString, 'values' => $this->p_params, 'try' => $try), $file, $line);
             }
         }
         $try++;
     }
 }
Пример #5
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante	//BUT: Démarrer un template propre à cette page
     //Cout en PA des actions
     $coutPa = 1;
     if ($perso->getPa() <= $coutPa) {
         return fctErrorMSG('Vous n\'avez pas assez de PA pour effectuer cette action.', $errorUrl);
     }
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.');
     }
     //Rechercher la banque
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque' . ' WHERE banque_lieu=:nomTech' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':nomTech', $perso->getLieu()->getNomTech(), PDO::PARAM_STR);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     //Valider si la banque existe
     if ($arr === false) {
         return fctErrorMSG('Cette banque est actuellement innaccessible ou innexistante (' . $perso->getLieu()->getNomTech() . ').');
     }
     //Instancier la banque
     $banque = new Member_Banque($arr);
     $tpl->set('BANQUE', $banque);
     //Passer l'objet "banque" au template
     //###Changer le NIP
     if (isset($_POST['changeNIP'])) {
         if (!isset($_POST['nip'])) {
             return fctErrorMSG('Vous devez entrer un NIP.');
         }
         if (empty($_POST['nip'])) {
             return fctErrorMSG('Vous devez entrer un NIP.');
         }
         if (!is_numeric($_POST['nip'])) {
             return fctErrorMSG('Le NIP doit être numérique.');
         }
         if ($_POST['nip'] < 0) {
             return fctErrorMSG('Le NIP est incorrect.');
         }
         if (!isset($_POST['compte_id'])) {
             fctBugReport('Le compte n\'est pas spécifié.', array(), __FILE__, __LINE__);
         }
         //Récupérer le compte
         try {
             $compteToChangeNIP = Member_BanqueCompte::getCompteFromId($_POST['compte_id']);
         } catch (GameException $e) {
             return fctErrorMSG($e->getMessage());
         }
         //Modifier le nip
         $compteToChangeNIP->changeNIP($_POST['nip']);
     }
     //###Fermer un compte
     if (isset($_POST['close'])) {
         //Valider si le perso possède assez de PA
         if ($perso->getPa() < 1) {
             return fctErrorMSG('Vous n\'avez pas assez de PA pour effectuer cette action.');
         }
         //Instancier le compte afin d'y faire des opérations.
         $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE	compte_id=:compteId' . ' AND compte_idperso=:persoId' . ' LIMIT 1';
         $prep = $db->prepare($query);
         $prep->bindValue(':compteId', $_POST['compte_id'], PDO::PARAM_STR);
         $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $arr = $prep->fetch();
         $prep->closeCursor();
         $prep = NULL;
         //Valider si le compte existe
         if ($arr === false) {
             return fctErrorMSG('Ce compte n\'existe pas (' . $_POST['compte_id'] . ').');
         }
         //Instancier le compte
         $compte = $banque->getCompte($arr['compte_compte'], $arr);
         //Valider
         if (!isset($_POST['c_check'])) {
             return fctErrorMSG('Vous devez cocher la case pour confirmer que vous voulez bien fermer ce compte.', '?popup=1&amp;m=Action_Lieu_Banque');
         }
         //Effectuer le transfert d'argent (Transférer l'argent du compte vers le perso)
         $perso->changeCash('+', $compte->getCash());
         $perso->setCash();
         //Effacer le compte
         $query = 'DELETE FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE	compte_id=:compteId' . ' AND compte_idperso=:persoId' . ' LIMIT 1';
         $prep = $db->prepare($query);
         $prep->bindValue(':compteId', $_POST['compte_id'], PDO::PARAM_STR);
         $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         //Retirer les PA
         $perso->changePa('-', $coutPa);
         $perso->setPa();
         //Ajouter la transaction à l'historique
         $compte->add_bq_hist('', 'FRMT', $compte->getCash(), 0, "FERMÉ");
         Member_He::add('System', $perso->getId(), 'banque', 'Vous fermez un compte en banque.');
     }
     $tpl->set('PA', $perso->getPa());
     $tpl->set('CASH', $perso->getCash());
     //Trouver tous les comptes appartenant au perso
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE	compte_banque=:banque' . ' AND compte_idperso=:persoId;';
     $prep = $db->prepare($query);
     $prep->bindValue(':banque', $banque->getNoBanque(), PDO::PARAM_STR);
     $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrCompte = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     //Ouvrir un nouveau compte si on le demande ou si aucun compte n'existe
     if (count($arrCompte) == 0 || isset($_POST['newaccount'])) {
         //Afficher le template d'ouverture de compte
         $tpl->set('BANK_ACCOUNT_NAME', $perso->getNom());
         return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_compte_add.htm', __FILE__, __LINE__);
     } else {
         //Faire les opération sur le(s) compte(s) existant(s).
         foreach ($arrCompte as &$arr) {
             $BANK_ACCOUNTS[] = $banque->getCompte($arr['compte_compte'], $arr);
         }
         $tpl->set('BANK_ACCOUNTS', $BANK_ACCOUNTS);
         return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque.htm', __FILE__, __LINE__);
     }
 }
Пример #6
0
 public static function generatePage(&$tpl, &$session, &$account)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     //Déterminer la quantité de perso que ce compte à l'autorisation de créer
     $query = 'SELECT auth_creation_perso' . ' FROM ' . DB_PREFIX . 'account' . ' WHERE id=:id;';
     $prep = $db->prepare($query);
     $prep->bindValue(':id', $account->getId(), PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     if ($arr['auth_creation_perso'] == 0) {
         return fctErrorMSG('Vous n\'avez pas l\'autorisation de créer un personnage. (cheat)');
     }
     //Établir la liste des statistiques disponibles
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'stat;';
     $prep = $db->prepare($query);
     $prep->execute($db, __FILE__, __LINE__);
     $arrS = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     $arrStat = array();
     foreach ($arrS as &$arr) {
         $arr['xp'] = 0;
         $arrStat[] = $arr;
     }
     $tpl->set('STATS', $arrStat);
     //Établir la liste des compétences disponibles
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'competence' . ' WHERE inscription="1";';
     $prep = $db->prepare($query);
     $prep->execute($db, __FILE__, __LINE__);
     $arrC = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     $arrComp = array();
     foreach ($arrC as &$arr) {
         $arr['lvl'] = 0;
         $arrComp[] = $arr;
     }
     $tpl->set('COMPS', $arrComp);
     //Établir la liste de caractéristiques disponibles.
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'caract' . ' WHERE type="system"' . ' AND catid=0' . ' ORDER BY nom;';
     $prep = $db->prepare($query);
     $prep->execute($db, __FILE__, __LINE__);
     $arrC = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     $cat = array();
     foreach ($arrC as &$arr) {
         $arr['nom'] = stripslashes($arr['nom']);
         $arr['desc'] = stripslashes($arr['desc']);
         $cat[] = $arr;
     }
     //Lister les caracts
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'caract' . ' WHERE type="system"' . ' AND catid>0' . ' ORDER BY nom;';
     $prep = $db->prepare($query);
     $prep->execute($db, __FILE__, __LINE__);
     $arrC = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     $signes = array();
     foreach ($arrC as &$arr) {
         $arr['nom'] = stripslashes($arr['nom']);
         $arr['desc'] = stripslashes($arr['desc']);
         $caract[] = $arr;
     }
     $tpl->set('CAT', $cat);
     $tpl->set('CARACT', $caract);
     //Lister les caracts incompatibles
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'caract_incompatible;';
     $prep = $db->prepare($query);
     $prep->execute($db, __FILE__, __LINE__);
     $arrC = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     if (count($arrC) != 0) {
         $tpl->set('CARACT_INCOMPATIBLE', $arrC);
     }
     //Resumer une création (mécanisme de recouvrement de donnée d'urgence, en cas d'erreur de la validation JS)
     if (isset($_POST['nom'])) {
         //Avertir que le JS n'à pas su assurer la validation adéquatement
         fctBugReport('La validation JS de la création d\'un perso à échouée.', $_POST, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, true, false, false);
         //Si les magicQuote sont activer, les retirer.
         fctStripMagicQuote($_POST);
         $tpl->set('PERSO', $_POST);
         $arrC = array();
         foreach ($caract as $arr) {
             if (isset($_POST['caractDesc_' . $arr['id']]) && !empty($_POST['caractDesc_' . $arr['id']])) {
                 $arrC[$arr['id']] = $_POST['caractDesc_' . $arr['id']];
             }
         }
         $tpl->set('PERSO_CARACT', $arrC);
     }
     //Retourner le template complété/rempli
     $tpl->set('GAME_IS_CYBERCITY', GAME_IS_CYBERCITY);
     $tpl->set('REDIRECT_TO', 'CreerPerso3');
     $tpl->set('CHECK_URL', 'CreerPerso2Check');
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/creerPerso2.htm', __FILE__, __LINE__);
 }
Пример #7
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $errorUrl = '?popup=1&amp;m=Action_Perso_Attaquer';
     // ### VALIDATIONS
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Vous n\'êtes pas en état d\'effectuer cette action.', $errorUrl);
     }
     //Vérifier si un personnage à été sélectionné
     if (!isset($_POST['perso_id'])) {
         return fctErrorMSG('Vous devez sélectionner la personne que vous désirez attaquer.', $errorUrl);
     }
     //Vérifier si un nombre de tours à été sélectionné
     if (!isset($_POST['tours']) || !is_numeric($_POST['tours'])) {
         return fctErrorMSG('Vous devez sélectionner le nombre de tour(s) à effectuer.', $errorUrl);
     }
     //Vérifier si nous avons assez de PA pour attaquer
     $cout_pa = Member_Action_Perso_Attaquer::coutPaTotal($perso, $_POST['tours']);
     if ($_POST['type_att'] == 'cible') {
         $cout_pa += 15;
     }
     if (isset($_POST['furtif'])) {
         $cout_pa += 15;
     }
     if ($perso->getPa() <= $cout_pa) {
         return fctErrorMSG('Vous n\'avez pas assez de PA pour effectuer cette action.', $errorUrl);
     }
     //Vérifier si le perso sélectionné est bien présent dans le lieu actuel
     $i = 0;
     while ($tmp = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($tmp->getId() == $_POST['perso_id']) {
             $victime = $tmp;
             break;
         }
     }
     if (!isset($victime)) {
         return fctErrorMSG('Le personnage sélectionné n\'est pas présent dans le lieu actuel.', $errorUrl);
     }
     //ATTAQUE CIBLÉE: Vérifier si une zone à été sélectionnée
     if ($_POST['type_att'] == 'cible' && !isset($_POST['zones'])) {
         return fctErrorMSG('Une attaque ciblée doit avoir une zone à cibler.', $errorUrl);
     }
     //CHEAT+HACK: Vérifier l'état innitial de la  victime
     if (!$perso->isVivant()) {
         return fctErrorMSG('Vous ne pouvez pas attaquer une personne déjà morte.', $errorUrl);
     }
     //CHEAT+HACK: ATTAQUE CIBLÉE: Valider qu'une attaque ciblé n'a qu'un seul tour
     if ($_POST['type_att'] == 'cible' && $_POST['tours'] > 1) {
         return fctErrorMSG('Une attaque ciblée ne peut avoir qu\'un seul tour.', $errorUrl);
     }
     //CHEAT+HACK: Vérifier si la portée est valide
     $porteeSelectionnee = $_POST['portee'];
     $porteeArme = $perso->getArme()->getPortee();
     $dimensionLieu = $perso->getLieu()->getDimension();
     //Trouver la distance la plus courte entre la portée de l'arme et la dimension de la piece.
     $porteeAutoriseeMax = Member_Action_Perso_Attaquer::porteePlusPetite($dimensionLieu, $porteeArme) ? $dimensionLieu : $porteeArme;
     if (!Member_Action_Perso_Attaquer::porteePlusPetite($porteeSelectionnee, $porteeAutoriseeMax)) {
         return fctErrorMSG('La portée ne peut dépasser la capacité de l\'arme ou la taille du lieu.', $errorUrl);
     }
     // ### DÉBUT DU MOTEUR D'ATTAQUE
     $tour = 0;
     $persoEsq = 0;
     //Nombre d'esquive effectuées
     $victimeEsq = 0;
     //Nombre d'esquive effectuées
     //Messages d'intro
     $msgPerso = 'Vous tentez une attaque';
     $msgVictime = 'Une personne tente une attaque';
     $msgLieu = 'Vous voyez une personne tenter une attaque';
     if (isset($_POST['furtif'])) {
         $msgPerso .= ' furtive';
         $att_furtive = true;
     }
     if ($_POST['type_att'] == 'cible') {
         $msgPerso .= " ciblée (Zone visée: " . $_POST['zones'] . "):";
     } else {
         $msgPerso .= " par tours (tour(s) tentés: " . $_POST['tours'] . "):";
     }
     $noticeInconscient = true;
     $noticeVivant = true;
     $noticeParalyse = true;
     $noticeInconscientAtt = true;
     $noticeVivantAtt = true;
     $noticeParalyseAtt = true;
     $attStop = false;
     do {
         $tour++;
         if (DEBUG_MODE) {
             echo "<hr />Tour #{$tour}<br />";
         }
         $msgPerso .= "\n\nTour #" . $tour . ' (' . $perso->getArme()->getNom() . ')';
         $msgVictime .= "\n\nTour #" . $tour . ' (' . $perso->getArme()->getNom() . ')';
         $msgLieu .= "\n\nTour #" . $tour . ' (' . $perso->getArme()->getNom() . ')';
         //Lancer le tour d'attaque en fonction du type d'arme utilisé
         switch (get_class($perso->getArme())) {
             case 'Member_ItemArmeMainsnues':
                 $riposte = Member_Action_Perso_Attaquer2ArmeMainsnues::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
                 break;
             case 'Member_ItemArmeBlanche':
                 $riposte = Member_Action_Perso_Attaquer2ArmeBlanche::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
                 break;
             case 'Member_ItemArmeFeu':
                 $riposte = Member_Action_Perso_Attaquer2ArmeFeu::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
                 break;
                 //case 'Member_ItemArmeExplosive':
                 //	$riposte = Member_Action_Perso_Attaquer2ArmeExplosive::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
                 //	break;
                 //case 'Member_ItemArmeLourde':
                 //	$riposte = Member_Action_Perso_Attaquer2ArmeLourde::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
                 //	break;
             //case 'Member_ItemArmeExplosive':
             //	$riposte = Member_Action_Perso_Attaquer2ArmeExplosive::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
             //	break;
             //case 'Member_ItemArmeLourde':
             //	$riposte = Member_Action_Perso_Attaquer2ArmeLourde::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
             //	break;
             case 'Member_ItemArmeParalysante':
                 $riposte = Member_Action_Perso_Attaquer2ArmeParalysante::attaquer($perso, $victime, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $victimeEsq, false);
                 break;
             default:
                 fctBugReport('Type d\'arme innexistant (' . get_class($perso->getArme()) . ')', array($perso, $perso->getArme()), __FILE__, __LINE__);
                 break;
         }
         if ($victime->getPa() == 0 && $noticeParalyse) {
             $msgPerso .= "\nVotre opposant est paralysé.";
             $msgVictime .= "\nVous êtes paralysé.";
             $msgLieu .= "\nLa victime est paralysée.";
             $noticeParalyse = false;
             //Pour ne pas repetter à chaque tour
         }
         //Vérifier l'état de la victime et afficher si elle tombe inconsciente ou meurt
         if (!$victime->isConscient() && $noticeInconscient) {
             $msgPerso .= "\nVotre opposant est inconscient.";
             $msgVictime .= "\nVous êtes inconscient.";
             $msgLieu .= "\nLa victime est inconsciente.";
             $noticeInconscient = false;
             //Pour ne pas repetter à chaque tour
         }
         if (!$victime->isVivant() && $noticeVivant) {
             $msgVictime .= "\nVous êtes mort.";
             $noticeVivant = false;
             //Pour ne pas repetter à chaque tour
         }
         if (isset($_POST['furtif'])) {
             unset($_POST['furtif']);
         }
         //De cette facon, la furtivité est uniquement tenté au premier tour.
         //Au besoin, lancer la riposte de la part de la victime
         if ($riposte && $victime->isAutonome() && $victime->getPa() > 0 && $victime->getReaction() == 'riposte') {
             if (DEBUG_MODE) {
                 echo "<br /><br />Riposte:";
             }
             //Vérifier si la porté est plus distante que le nombre de tour (TC(1)=0 tour d'attente, C(2)=1 tour d'attente, M(3)=2 tours d'attente, etc..)
             if ($tour < Member_Action_Perso_Attaquer::porteeVersInt($porteeSelectionnee)) {
                 $msgPerso .= "\nVotre opposant aimerait riposter, mais il est trop loin pour le moment.";
                 $msgVictime .= "\nVous aimeriez riposter, mais vous êtes trop loin pour le moment.";
                 $msgLieu .= "\nLa victime est trop éloignée de son agresseur pour pouvoir riposter.";
             } else {
                 $msgPerso .= "\nVotre opposant tente de riposter (" . $victime->getArme()->getNom() . '): ';
                 $msgVictime .= "\nVous tentez de riposter (" . $victime->getArme()->getNom() . '): ';
                 $msgLieu .= "\nLa victime tente de riposter (" . $victime->getArme()->getNom() . '): ';
                 switch (get_class($victime->getArme())) {
                     case 'Member_ItemArmeMainsnues':
                         $riposte = Member_Action_Perso_Attaquer2ArmeMainsnues::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                         break;
                     case 'Member_ItemArmeBlanche':
                         $riposte = Member_Action_Perso_Attaquer2ArmeBlanche::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                         break;
                     case 'Member_ItemArmeFeu':
                         $riposte = Member_Action_Perso_Attaquer2ArmeFeu::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                         break;
                         //case 'Member_ItemArmeExplosive':
                         //	$riposte = Member_Action_Perso_Attaquer2ArmeExplosive::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                         //	break;
                         //case 'Member_ItemArmeLourde':
                         //	$riposte = Member_Action_Perso_Attaquer2ArmeLourde::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                         //	break;
                     //case 'Member_ItemArmeExplosive':
                     //	$riposte = Member_Action_Perso_Attaquer2ArmeExplosive::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                     //	break;
                     //case 'Member_ItemArmeLourde':
                     //	$riposte = Member_Action_Perso_Attaquer2ArmeLourde::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                     //	break;
                     case 'Member_ItemArmeParalysante':
                         $riposte = Member_Action_Perso_Attaquer2ArmeParalysante::attaquer($victime, $perso, $porteeSelectionnee, $msgPerso, $msgVictime, $msgLieu, $tour, $persoEsq, true);
                         break;
                     default:
                         fctBugReport('Type d\'arme innexistant (' . get_class($victime->getArme()) . ')', array($victime, $victime->getArme()), __FILE__, __LINE__);
                         break;
                 }
                 //On vérifie l'état de l'agresseur et on affiche dnas le HE en cas de changement d'état
                 if ($perso->getPa() == 0 && $noticeParalyseAtt) {
                     $msgPerso .= "\nVous êtes paralysé.";
                     $msgVictime .= "\nVotre agresseur est paralysé.";
                     $msgLieu .= "\nL'agresseur est paralysée.";
                     $noticeParalyseAtt = false;
                     //Pour ne pas repetter à chaque tour
                 }
                 if (!$perso->isConscient() && $noticeInconscientAtt) {
                     $msgPerso .= "\nVous êtes inconscient.";
                     $msgVictime .= "\nVotre agresseur est inconscient.";
                     $msgLieu .= "\nL'agresseur est inconsciente.";
                     $noticeInconscientAtt = false;
                     //Pour ne pas repetter à chaque tour
                 }
                 if (!$perso->isVivant() && $noticeVivantAtt) {
                     $msgPerso .= "\nVous êtes mort.";
                     $noticeVivantAtt = false;
                     //Pour ne pas repetter à chaque tour
                 }
             }
         }
         //Vérifier les options d'arrêt
         if ($_POST['att_stop'] == 'normal' && !$victime->isNormal()) {
             $attStop = true;
         }
         if ($_POST['att_stop'] == 'autonome' && !$victime->isAutonome()) {
             $attStop = true;
         }
         if ($_POST['att_stop'] == 'conscient' && !$victime->isConscient()) {
             $attStop = true;
         }
         //Si il faut arrêter, vérifier si l'arrêt réussit ou échoue
         if ($attStop) {
             $reussite_arret = 85 + $perso->getStatRealLevel('PER') * 3;
             $de = rand(1, 100);
             if ($de >= $reussite_arret) {
                 //ÉCHEC de l'arrêt
                 $attStop = false;
             }
         }
         if ($attStop) {
             $msgPerso .= "\n\nVous décidez de vous en tenir là, son compte est bon.";
             $msgVictime .= "\n\nL'aggresseur arrête soudainement son attaque: votre compte est bon.";
             $msgLieu .= "\n\nL'aggresseur arrête soudainement son attaque.";
         }
         if ($riposte && $victime->isAutonome() && $victime->getPa() > 0 && $victime->getReaction() == 'fuir') {
             //Lister tout les lieux en libre accès accessibles de l'emplacement actuel
             $i = 0;
             while ($lien = $perso->getLieu()->getLink($i++)) {
                 if ($lien->getProtection() == '0') {
                     $lieuFuite[] = $lien;
                 }
             }
             if ($e > 0) {
                 $choix = rand(0, $e - 1);
                 $query = 'UPDATE ' . DB_PREFIX . 'perso' . ' SET lieu=:lieuTech' . ' WHERE id =:persoId' . ' LIMIT 1;';
                 $prep = $db->prepare($query);
                 $prep->bindValue(':lieuTech', $lieuFuite[$choix]->getNomTech(), PDO::PARAM_STR);
                 $prep->bindValue(':persoId', $victime->getId(), PDO::PARAM_INT);
                 $prep->executePlus($db, __FILE__, __LINE__);
                 $arr = $prep->fetch();
                 $prep->closeCursor();
                 $prep = NULL;
                 $msgPerso .= "\n\nLa victime arrive à prendre la fuite vers [i]" . $lieuFuite[$choix]->getNom() . "[/i].";
                 $msgVictime .= "\n\nVous arrivez à prendre la fuite vers [i]" . $lieuFuite[$choix]->getNom() . "[/i].";
                 $msgLieu .= "\n\nLa victime arrive à prendre la fuite vers [i]" . $lieuFuite[$choix]->getNom() . "[/i].";
                 $attStop = true;
             } else {
                 $msgPerso .= "\n\nLa victime tente de fuir mais ne trouve aucune issue.";
                 $msgVictime .= "\n\nVous tentez de fuir mais vous ne trouvez aucune issue.";
                 $msgLieu .= "\n\nLa victime tente de fuir mais ne trouve aucune issue.";
             }
         }
         //Vérifier si le nombre de tours maximum est atteind (ou dépassé)
         if ($tour >= $_POST['tours']) {
             $attStop = true;
         }
         //Vérifier que l'agresseur est encore en état de se battre
         if (!$perso->isAutonome()) {
             $msgPerso .= "\nVous n'êtes plus en état de vous battre.";
             $msgVictime .= "\nVotre agresseur n'est plus en état de se battre.";
             $msgLieu .= "\nL'agresseur n'est plus en état de se battre.";
             $attStop = true;
         }
     } while (!$attStop);
     //Fin de la boucle des tours
     //### FIN DU MOTEUR D'ATTAQUE
     //Retirer les PA de l'attaquant
     $perso->changePa('-', $cout_pa);
     $perso->setPa();
     $perso->setPv($victime, 'Attaque');
     $victime->setPv($perso, 'Attaque');
     $victime->setPa();
     if (!$perso->getArme() instanceof Member_ItemArmeMainsnues) {
         $resistance = $perso->getArme()->getResistance() < 0 ? 0 : $perso->getArme()->getResistance();
         $perso->getArme()->setResistance($resistance);
         //Vérifier si l'arme tombe à 0
         if ($perso->getArme()->getResistance() == 0) {
             $perso->getArme()->desequiper();
             $msgPerso .= "\n\nVotre arme s'est trop endommagée pendant l'attaque et elle est maintenant inutilisable.";
         }
     }
     if (!$victime->getArme() instanceof Member_ItemArmeMainsnues) {
         $resistance = $victime->getArme()->getResistance() < 0 ? 0 : $victime->getArme()->getResistance();
         $victime->getArme()->setResistance($resistance);
         //Vérifier si l'arme tombe à 0
         if ($victime->getArme()->getResistance() == 0) {
             $victime->getArme()->desequiper();
             $msgVictime .= "\n\nVotre arme s'est trop endommagée pendant l'attaque et elle est maintenant inutilisable.";
         }
     }
     //Gain en STAT+COMP
     $msgPerso .= self::gainXP($perso, $perso->getArme(), $_POST['type_att'] == 'cible', isset($att_furtive), $tour, $persoEsq);
     $msgVictime .= self::gainXP($victime, $victime->getArme(), false, false, $tour, $victimeEsq);
     //Envoyer le message aux 2 personnes impliqués
     Member_He::add($perso->getId(), $victime->getId(), 'attaque', $msgPerso, HE_TOUS, HE_AUCUN);
     Member_He::add($perso->getId(), $victime->getId(), 'attaque', $msgVictime, HE_AUCUN, HE_TOUS);
     //Envoyer le message à tout les gens présent sur le lieu
     $i = 0;
     $arrPersoLieu = array();
     while ($tmp = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($tmp->getId() != $perso->getId() && $tmp->getId() != $victime->getId()) {
             $arrPersoLieu[count($arrPersoLieu)] = $tmp->getId();
         }
     }
     if (count($arrPersoLieu) > 0) {
         Member_He::add(array($perso->getId(), $victime->getId()), $arrPersoLieu, 'attaque', $msgLieu, HE_AUCUN, HE_TOUS);
     }
     //Rafraichir le HE
     if (!DEBUG_MODE) {
         return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
     }
 }
Пример #8
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $errorUrl1 = '?popup=1&amp;m=Action_Lieu_Guichet';
     $errorUrl2 = '?popup=1&amp;m=Action_Lieu_Guichet2';
     $errorUrl3 = '?popup=1&amp;m=Action_Lieu_Guichet3historique';
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl1);
     }
     //Vérifier si une carte à été sélectionnée
     if (!isset($_POST['carteid'])) {
         return fctErrorMSG('Aucune carte sélectionnée.', $errorUrl1);
     }
     //Valider si le NIP a été saisi
     if (!isset($_POST['nip'])) {
         return fctErrorMSG('Aucun NIP spécifiée.', $errorUrl2, array('carteid' => $_POST['carteid']));
     }
     if (!isset($_POST['trsid'])) {
         return fctErrorMSG('Transaction invalide (1).', $errorUrl3, array('carteid' => $_POST['carteid'], 'nip' => $_POST['nip']));
     }
     //Créer la carte + compte
     $query = 'SELECT *' . ' FROM `' . DB_PREFIX . 'banque_cartes`' . ' LEFT JOIN `' . DB_PREFIX . 'banque_comptes` ON (`compte_banque` = `carte_banque` AND `compte_compte` = `carte_compte`)' . ' WHERE `carte_id` = :carteId' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':carteId', $_POST['carteid'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     //Valider si la carte existe dans la base de données
     if ($arr === false) {
         fctBugReport('Cette carte n\'existe pas', array('perso' => $perso, 'query' => $query), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     }
     //Créer le compte bancaire
     $compte = new Member_BanqueCompte($arr);
     //Créer la carte
     $carte = $compte->getCarte($_POST['carteid'], $arr);
     //Valider si la carte est active ou non
     if (!$carte->isValid()) {
         return fctErrorMSG('Cette carte à été désactivée.', $errorUrl1);
     }
     //Valider le NIP
     if ($carte->getNip() != $_POST['nip']) {
         return fctErrorMSG('NIP invalide.', $errorUrl2, array('carteid' => $_POST['carteid']));
     }
     //Charger l'historique des transactions
     $noCompte = $compte->getNoBanque() . '-' . $compte->getNoCompte();
     $query = 'SELECT * ' . ' FROM `' . DB_PREFIX . 'banque_historique`' . ' WHERE `compte`=:noCompte' . ' AND `id`=:id;';
     $prep = $db->prepare($query);
     $prep->bindValue(':noCompte', $noCompte, PDO::PARAM_STR);
     $prep->bindValue(':id', $_POST['trsid'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     //Valider si la transaction existe dans la base de données
     if ($arr === false) {
         return fctErrorMSG('Transaction invalide (2).', $errorUrl3, array('carteid' => $_POST['carteid'], 'nip' => $_POST['nip']));
     }
     //Récolter et formater les informations relative à la transaction
     $arr['date'] = fctToGameTime($arr['date'], false, true);
     $arr['solde'] = fctCreditFormat($arr['solde'], true);
     //Passer les informations au template
     $tpl->set('CARD_ID', $_POST['carteid']);
     $tpl->set('NIP', $_POST['nip']);
     $tpl->set('COMPTE', $compte->getNoBanque() . '-' . $compte->getNoCompte());
     //Afficher la page adéquate selon le type de transaction
     switch ($arr['code']) {
         case "RETR":
             $arr['montant'] = fctCreditFormat($arr['retrait']);
             $tpl->set('TRANSACTION', $arr);
             return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_historique_detailsdirect.htm', __FILE__, __LINE__);
             break;
         case "DPOT":
             $arr['montant'] = fctCreditFormat($arr['depot']);
             $tpl->set('TRANSACTION', $arr);
             return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_historique_detailsdirect.htm', __FILE__, __LINE__);
             break;
         case "RTRF":
             $arr['montant'] = fctCreditFormat($arr['depot']);
             $tpl->set('TRANSACTION', $arr);
             return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_historique_detailstransfert.htm', __FILE__, __LINE__);
             break;
         case "STRF":
             $arr['montant'] = fctCreditFormat($arr['retrait']);
             $tpl->set('TRANSACTION', $arr);
             return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_historique_detailstransfert.htm', __FILE__, __LINE__);
             break;
         default:
             $tpl->set('TRANSACTION', $arr);
             return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_historique_detailsnodetails.htm', __FILE__, __LINE__);
             break;
     }
 }
Пример #9
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante	//BUT: Démarrer un template propre à cette page
     $errorUrl = '?popup=1&amp;m=Action_Lieu_CasiersListe';
     //Valider si un casier à été sélectionné
     if (!isset($_POST['id_casier'])) {
         return fctErrorMSG('Aucun casier sélectionné.', $errorUrl);
     }
     $tpl->set('ID_CASIER', $_POST['id_casier']);
     //LISTER TOUT LES CASIERS DU LIEU
     $i = 0;
     $found = false;
     while ($casier = $perso->getLieu()->getCasiers($i++)) {
         if ($casier->getId() == $_POST['id_casier']) {
             $found = true;
             break;
         }
     }
     //Valider si le casier se trouve dans le lieu actuel
     if (!$found) {
         return fctErrorMSG('Le casier #' . $_POST['id_casier'] . ' est introuvable.', $errorUrl);
     }
     //PROTECTION: vérifier la protection du casier
     if ($casier->getProtection() != NULL) {
         //Protection par digipass
         if ($casier->getProtection() == 'pass') {
             if (isset($_POST['pass']) && $_POST['pass'] != $casier->getPass()) {
                 $tpl->set('WRONGPASS', true);
             }
             if (!isset($_POST['pass']) || $_POST['pass'] != $casier->getPass()) {
                 return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Casier_digipass.htm', __FILE__, __LINE__);
             }
             $tpl->set('PASS', $_POST['pass']);
             //Protection par clef
         } elseif ($casier->getProtection() == 'clef') {
             $accesOk = false;
             //Trouver la clé
             $i = 0;
             $e = 0;
             $arrClefs = array();
             while ($item = $perso->getInventaire($i++)) {
                 if ($item instanceof Member_ItemClef) {
                     $arrClefs[$e++] = $item;
                     if (isset($_POST['clef']) && $item->getInvId() == $_POST['clef']) {
                         if ($item->getCode() == $casier->getPass()) {
                             $accesOk = true;
                             $tpl->set('CLEF', $_POST['clef']);
                             break;
                         }
                     }
                 }
             }
             if (!$accesOk) {
                 if (isset($_POST['clef'])) {
                     $tpl->set('WRONGPASS', true);
                 }
                 if (count($arrClefs) > 0) {
                     $tpl->set('CLEFS', $arrClefs);
                 }
                 return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Casier_clef.htm', __FILE__, __LINE__);
             }
         } else {
             fctBugReport('Une protection d\'un casier n\'est pas prise en charge par le système.', array('CasierId:' . $casier->getId(), 'Protection:' . $casier->getProtection()), __FILE__, __LINE__);
         }
     }
     //LISTER L'INVENTAIRE DU CASIER
     $i = 0;
     $e = 0;
     $arr = array();
     while ($item = $casier->getInventaire($i++)) {
         $arr[$e++] = $item;
     }
     //Passer l'invantaire du casier au template, sauf s'il est vide (ne rien envoyer au template)
     if (count($arr) > 0) {
         $tpl->set('ITEMS', $arr);
     }
     //LISTER L'INVENTAIRE DU PERSO
     $i = 0;
     $items = array();
     while ($item = $perso->getInventaire($i++)) {
         if (!$item instanceof Member_ItemDrogueDrogue) {
             //Pourquoi exclu t-on les drogues ?
             $items[$i] = $item;
         }
     }
     if (count($items) > 0) {
         $tpl->set('INV_PERSO', $items);
     }
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/CasierInv.htm', __FILE__, __LINE__);
 }
Пример #10
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $errorUrl1 = '?popup=1&amp;m=Action_Lieu_Guichet';
     $errorUrl2 = '?popup=1&amp;m=Action_Lieu_Guichet2';
     $errorUrl3 = '?popup=1&amp;m=Action_Lieu_Guichet3';
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl1);
     }
     //Vérifier si une carte à été sélectionnée
     if (!isset($_POST['carteid']) || !is_numeric($_POST['carteid'])) {
         return fctErrorMSG('Aucune carte sélectionnée.', $errorUrl1);
     }
     //Vérifier si un NIP a été saisie
     if (!isset($_POST['nip'])) {
         return fctErrorMSG('Aucun NIP spécifiée.', $errorUrl, array('carteid' => $_POST['carteid']));
     }
     //Créer la carte + compte
     $query = 'SELECT *' . ' FROM `' . DB_PREFIX . 'banque_cartes`' . ' LEFT JOIN `' . DB_PREFIX . 'banque_comptes` ON (`compte_banque` = `carte_banque` AND `compte_compte` = `carte_compte`)' . ' WHERE `carte_id` = :carteId' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':carteId', $_POST['carteid'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     //Valider si la carte existe
     if ($arr === false) {
         fctBugReport('Cette carte n\'existe pas', array('perso' => $perso, 'query' => $query), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     }
     //Créer le compte de banque
     $compte = new Member_BanqueCompte($arr);
     //Créer la carte bancaire
     $carte = $compte->getCarte($_POST['carteid'], $arr);
     //Valider si la carte est active ou non
     if (!$carte->isValid()) {
         return fctErrorMSG('Cette carte à été désactivée.', $errorUrl1);
     }
     //Placer les informations sur l'accès dans le template
     $tpl->set('CARD_ID', $_POST['carteid']);
     $tpl->set('NIP', $_POST['nip']);
     $tpl->set('COMPTE', $compte->getNoBanque() . '-' . $compte->getNoCompte());
     //Valider le montant d'argent à retirer
     $montant = round($_POST['retrait'], 2);
     if (!is_numeric($montant) || $montant <= 0) {
         return fctErrorMSG('Montant invalide.', '?m=Action_Lieu_Guichet3', array('carteid' => $_POST['carteid'], 'nip' => $_POST['nip']));
     }
     //Valider si le montant
     if ($compte->getCash() < $montant && $compte->getCash() != -1) {
         return fctErrorMSG('Tentative de retrait supérieur au montant maximal autorisé.', $errorUrl3, array('carteid' => $_POST['carteid'], 'nip' => $_POST['nip']));
     }
     //Retirer l'argent du compte
     $compte->changeCash('-', $montant);
     $compte->setCash();
     //Ajouter l'argent au perso
     $perso->changeCash('+', $montant);
     $perso->setCash();
     //Retirer les PA au perso
     $perso->changePa('-', 1);
     $perso->setPa();
     //Ajouter le message à l'historique bancaire
     Member_BanqueCompte::addHist($noCompte, '', 'RGUI', $montant, 0, $compte->getCash() - $montant);
     //Copier le message dans les HE
     Member_He::add('', $perso->getId(), 'parler', "Vous effectuez un retrait de " . fctCreditFormat($montant, true) . " au guichet automatique.");
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Пример #11
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante	//BUT: Démarrer un template propre à cette page
     $errorUrl = '?popup=1&amp;m=Action_Lieu_CasiersListe';
     $errorUrlInv = '?popup=1&amp;m=Action_Lieu_CasierInv';
     //Valider si le casier est défini
     if (!isset($_POST['id_casier'])) {
         return fctErrorMSG('Aucun casier sélectionné.', $errorUrl);
     }
     //Valider si le casier appartient au lieu du perso
     $i = 0;
     $found = false;
     while ($casier = $perso->getLieu()->getCasiers($i++)) {
         if ($casier->getId() == $_POST['id_casier']) {
             $found = true;
             break;
         }
     }
     if (!$found) {
         return fctErrorMSG('Le casier #' . $_POST['id_casier'] . ' est introuvable.', $errorUrl);
     }
     //PROTECTION: vérifier la protection du casier
     if ($casier->getProtection() != NULL) {
         //Protection par digipass
         if ($casier->getProtection() == 'pass') {
             if (!isset($_POST['pass']) || $_POST['pass'] != $casier->getPass()) {
                 return fctErrorMSG('Accès par mot de passe invalide. (Tentative de hack 1)', $errorUrl);
             }
             //Protection par clef
         } elseif ($casier->getProtection() == 'clef') {
             $accesOk = false;
             //Trouver la clé
             $i = 0;
             $e = 0;
             $arrClefs = array();
             while ($item = $perso->getInventaire($i++)) {
                 if ($item instanceof Member_ItemClef) {
                     $arrClefs[$e++] = $item;
                     if (isset($_POST['clef']) && $item->getInvId() == $_POST['clef']) {
                         if ($item->getCode() == $casier->getPass()) {
                             $accesOk = true;
                             break;
                         }
                     }
                 }
             }
             if (!$accesOk) {
                 return fctErrorMSG('Accès par mot de passe invalide. (Tentative de hack 2)', $errorUrl);
             }
         } else {
             fctBugReport('Une protection d\'un casier n\'est pas prise en charge par le système.', array('CasierId:' . $casier->getId(), 'Protection:' . $casier->getProtection()), __FILE__, __LINE__);
         }
     }
     //LISTER L'INVENTAIRE DU CASIER une première fois pour valider les PR
     $i = 0;
     $itemsPr = 0;
     $nbrItems = 0;
     $arr = array();
     while ($item = $perso->getInventaire($i++)) {
         if (isset($_POST['qte_' . $item->getInvId()]) && $_POST['qte_' . $item->getInvId()] > 0) {
             $itemsPr += $item->getPr();
             $nbrItems += $_POST['qte_' . $item->getInvId()];
         }
     }
     if ($casier->getPr() + $itemsPr > $casier->getCapacite()) {
         return fctErrorMSG('Le casier n\'a pas assez de PR de disponible pour transférer la sélection.', $errorUrlInv, array('id_casier' => $_POST['id_casier']));
     }
     if ($nbrItems == 0) {
         return fctErrorMSG('Rien à transférer.', $errorUrlInv, array('id_casier' => $_POST['id_casier']));
     }
     //Une seconde fois pour transférer
     $i = 0;
     $e = 0;
     $msg = 'Vous placez les items suivants dans le casier \'' . $casier->getNom() . '\': ';
     while ($item = $perso->getInventaire($i++)) {
         if (isset($_POST['qte_' . $item->getInvId()]) && $_POST['qte_' . $item->getInvId()] > 0) {
             if ($e > 0) {
                 $msg .= ', ';
             }
             $msg .= $item->getNom();
             $item->transfererVersCasier($casier, $_POST['qte_' . $item->getInvId()]);
         }
     }
     $msg .= '.';
     Member_He::add(NULL, $perso->getId(), 'casier', $msg);
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Пример #12
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante	//BUT: Démarrer un template propre à cette page
     $errorUrl = '?popup=1&amp;m=Action_Lieu_CasiersListe';
     if (!isset($_POST['id_casier'])) {
         return fctErrorMSG('Aucun casier sélectionné.', $errorUrl);
     }
     //TROUVER LE CASIER
     $i = 0;
     $found = false;
     while ($casier = $perso->getLieu()->getCasiers($i++)) {
         if ($casier->getId() == $_POST['id_casier']) {
             $found = true;
             break;
         }
     }
     if (!$found) {
         return fctErrorMSG('Le casier #' . $_POST['id_casier'] . ' est introuvable.', $errorUrl);
     }
     //PROTECTION: vérifier la protection du casier
     if ($casier->getProtection() != NULL) {
         //Protection par digipass
         if ($casier->getProtection() == 'pass') {
             if (!isset($_POST['pass']) || $_POST['pass'] != $casier->getPass()) {
                 return fctErrorMSG('Accès par mot de passe invalide. (Tentative de hack 1)', $errorUrl);
             }
             //Protection par clef
         } elseif ($casier->getProtection() == 'clef') {
             $accesOk = false;
             //Trouver la clé
             $i = 0;
             $e = 0;
             $arrClefs = array();
             while ($item = $perso->getInventaire($i++)) {
                 if ($item instanceof Member_ItemClef) {
                     $arrClefs[$e++] = $item;
                     if (isset($_POST['clef']) && $item->getInvId() == $_POST['clef']) {
                         if ($item->getCode() == $casier->getPass()) {
                             $accesOk = true;
                             break;
                         }
                     }
                 }
             }
             if (!$accesOk) {
                 return fctErrorMSG('Accès par mot de passe invalide. (Tentative de hack 2)', $errorUrl);
             }
         } else {
             fctBugReport('Une protection d\'un casier n\'est pas prise en charge par le système.', array('CasierId:' . $casier->getId(), 'Protection:' . $casier->getProtection()), __FILE__, __LINE__);
         }
     }
     //LISTER L'INVENTAIRE DU CASIER une première fois pour valider les PR & calculer le nbr d'items à transférer
     $i = 0;
     $itemsPr = 0;
     $nbrItems = 0;
     $arr = array();
     while ($item = $casier->getInventaire($i++)) {
         if (isset($_POST['qte_' . $item->getInvId()])) {
             $qte = $_POST['qte_' . $item->getInvId()];
             //Valider si la quantité est possible
             if (!is_numeric($qte) || $qte < 0) {
                 return fctErrorMSG('Vous devez choisir une quantité à transférer numérique et supérieure à 0.', $errorUrl, array('id_casier' => $_POST['id_casier']));
             }
             if ($qte > 0) {
                 if ($qte > $item->getQte()) {
                     return fctErrorMSG('Vous ne pouvez transférer plus que vous possèdez.', $errorUrl, array('id_casier' => $_POST['id_casier']));
                 }
                 $itemsPr += $item->getPr();
                 $nbrItems += $qte;
             }
         }
     }
     //Valider si le perso a assez de PR disponible pour transférer les items
     if ($perso->getPr() + $itemsPr > $perso->getPrMax()) {
         return fctErrorMSG('Vous n\'avez pas assez de PR de disponible pour transférer la sélection.', $errorUrl, array('id_casier' => $_POST['id_casier']));
     }
     //Valider si on transfert quelque chose
     if ($nbrItems == 0) {
         return fctErrorMSG('Rien à transférer.', $errorUrl, array('id_casier' => $_POST['id_casier']));
     }
     //Une seconde fois pour transférer
     $i = 0;
     $e = 0;
     $itemsList = '';
     while ($item = $casier->getInventaire($i++)) {
         if (isset($_POST['qte_' . $item->getInvId()])) {
             $qte = $_POST['qte_' . $item->getInvId()];
             if ($qte > 0) {
                 //Ajouter le nom de l'item dans la liste
                 $itemsList .= ($e++ > 0 ? ', ' : '') . $qte . 'x[i]' . $item->getNom() . '[/i]';
                 //Transférer l'item
                 $item->transfererVersPerso($perso, $qte);
             }
         }
     }
     $msg = 'Vous ramassez les items suivants dans le casier \'' . $casier->getNom() . '\': ' . $itemsList . '.';
     Member_He::add(NULL, $perso->getId(), 'casier', $msg);
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Пример #13
0
 /**
  * Charge la liste des liens du lieu.
  * 
  * Selon le lieu actuel (de l'objet lieu), cette fonction créer/génère
  * le 'tableau des déplacements'. Chaque lien (ou déplacement) est en
  * soit un lieu. 
  * 
  * Cette fonction est apellée automatiquement par getLink() dans le cas
  * ou le 'tableau des déplacements' est innexistant.
  *
  * @todo: Si plusieurs perso sont banni d'un lieu, plusieurs liens identique seront créé. Il faut faire un sous-tableau.
  * @see getLink()
  * @param int $persoid Utile pour déterminer si un perso est banni d'accès au lieu.
  */
 private function loadLinks($persoid = 0)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     //Charger les informations générale du lien
     $query = 'SELECT ll.*, l.`nom_affiche`, l.`description`, l.`id` as lid, b.id as banid' . ' FROM ' . DB_PREFIX . 'lieu_lien as ll' . ' INNER JOIN ' . DB_PREFIX . 'lieu as l ON (l.`nom_technique`=ll.`to`)' . ' LEFT JOIN ' . DB_PREFIX . 'lieu_ban as b ON (b.lieu=l.`nom_technique` AND b.persoid=:persoId)' . ' WHERE `from`=:nomTech;';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $persoid, PDO::PARAM_INT);
     $prep->bindValue(':nomTech', $this->nomTech, PDO::PARAM_STR);
     $prep->executePlus($db, __FILE__, __LINE__);
     $arrLien = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     foreach ($arrLien as $arr) {
         if ($arr['lid'] == '') {
             fctBugReport('Un lien existe, mais pas le lieu', array($query, $arr), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, true, false, false);
         }
         $this->liens[] = new Member_LieuLien($arr);
     }
 }
Пример #14
0
 public static function go(&$account)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $nextnow = mktime(date("H") - INNACTIVITE_TELEPORT_DELAY, date("i"), date("s"), date("m"), date("d"), date("Y"));
     $delExpir = mktime(date("H"), date("i"), date("s"), date("m"), date("d") - INNACTIVITE_DELETE_DELAY, date("Y"));
     try {
         //Trouver les innactifs
         $query = 'SELECT p.id' . ' FROM ' . DB_PREFIX . 'perso as p, ' . DB_PREFIX . 'account as a' . ' WHERE a.last_conn<:expiration' . ' AND p.userId = a.id' . ' AND p.lieu!=:lieu' . ' AND p.lieu!=:lieuVac' . ' LIMIT 5;';
         $prep = $db->prepare($query);
         $prep->bindValue('expiration', $nextnow, PDO::PARAM_INT);
         $prep->bindValue('lieu', INNACTIVITE_TELEPORT_LOCATION, PDO::PARAM_STR);
         $prep->bindValue('lieuVac', INNACTIVITE_VOLUNTARY_LOCATION, PDO::PARAM_STR);
         $prep->execute($db, __FILE__, __LINE__);
         $arrPerso = $prep->fetchAll();
         $prep->closeCursor();
         $prep = NULL;
         if (count($arrPerso) == 0) {
             return;
         }
         //Ne pas essayer de supprimer des perso, on le fera au prochain innactif
         $query = 'UPDATE ' . DB_PREFIX . 'perso' . ' SET lieu=:lieu' . ' WHERE id=:persoId;';
         $prep = $db->prepare($query);
         foreach ($arrPerso as &$id) {
             $id = (int) $id[0];
             //Téléporter les innactifs
             $prep->bindValue('lieu', INNACTIVITE_TELEPORT_LOCATION, PDO::PARAM_STR);
             $prep->bindValue('persoId', $id, PDO::PARAM_INT);
             $prep->execute($db, __FILE__, __LINE__);
             Member_He::add('System', $id, 'innact', 'Votre personnage a été téléporté pour inactivité.');
         }
         $prep->closeCursor();
         $prep = NULL;
     } catch (Exception $e) {
         fctBugReport('Erreur', $e->getMessage(), __FILE__, __LINE__);
     }
     try {
         //Trouver les trop innactifs (les supprimer)
         $query = 'SELECT p.id, p.nom, a.email' . ' FROM ' . DB_PREFIX . 'perso as p, ' . DB_PREFIX . 'account as a' . ' WHERE a.last_conn<:expiration' . ' AND p.userId = a.id' . ' AND p.lieu != :lieuVac' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue('expiration', $delExpir, PDO::PARAM_INT);
         $prep->bindValue('lieuVac', INNACTIVITE_VOLUNTARY_LOCATION, PDO::PARAM_STR);
         $prep->execute($db, __FILE__, __LINE__);
         $arrPerso = $prep->fetchAll();
         $prep->closeCursor();
         $prep = NULL;
         if (count($arrPerso) == 0) {
             return;
         }
         //Ne pas essayer de supprimer des perso, on le fera au prochain innactif
         foreach ($arrPerso as &$arr) {
             //Apeller la fonction qui gère la suppression de perso.
             Mj_Perso_Del::delete($arr['id'], 'system');
             $tpl = new Template($account);
             //Envoyer un email de bye bye
             $tpl->set('PERSO_NOM', stripslashes($arr['nom']));
             $MSG = $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Visitor/innactivite_email.htm', __FILE__, __LINE__);
             $ret = @mail($arr['email'], "Cybercity 2034 - Suppression", $MSG, "From: robot@cybercity2034.com\n" . "MIME-Version: 1.0\n" . "Content-type: text/html; charset=utf-8\n");
         }
     } catch (Exception $e) {
         fctBugReport('Erreur', $e->getMessage(), __FILE__, __LINE__);
     }
 }
Пример #15
0
 /**
  * Cette fonction s'occupe de mettre à jours le compte des messages
  * dans le HE ainsi que sa taille totale.
  *
  * @param int $persoId Id du perso à qui le HE appartient.
  * @param int $qte Quantité de message ajoutés ou supprimés.
  * @param bool $deleted S'il sagit de la suppression d'un message.
  */
 private static function changeStat($persoId, $qte = 1, $deleted = false, $extraInfo = null)
 {
     if ($qte == 0) {
         return;
     }
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     //Modifier les statistiques sur les message dans le HE.
     if ($deleted) {
         // le AND préviennent les 0-1 = VALEUR_MAX_DU_CHAMP
         $query = 'UPDATE `' . DB_PREFIX . 'perso`' . ' SET `heQte`=`heQte`-:qte1' . ' WHERE `id`=:persoId' . ' AND `heQte` >= :qte2' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':qte1', $qte, PDO::PARAM_INT);
         $prep->bindValue(':qte2', $qte, PDO::PARAM_INT);
         $prep->bindValue(':persoId', $persoId, PDO::PARAM_INT);
     } else {
         $query = 'UPDATE `' . DB_PREFIX . 'perso`' . ' SET `heQte`=`heQte`+:qte' . ' WHERE `id`=:persoId' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':qte', $qte, PDO::PARAM_INT);
         $prep->bindValue(':persoId', $persoId, PDO::PARAM_INT);
     }
     $prep->execute($db, __FILE__, __LINE__);
     $affRow = $prep->rowCount();
     $prep->closeCursor();
     $prep = NULL;
     //Mettre à jour les stats du HE.
     if ($affRow == 0) {
         //Remettre le compteur à zéro.
         $query = 'UPDATE `' . DB_PREFIX . 'perso`' . ' SET `heQte`=0' . ' WHERE `id`=:persoId' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':persoId', $persoId, PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         fctBugReport('Incohérence heQte détectée.', array($query, $extraInfo), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, true, false, false);
     }
 }
Пример #16
0
 private function genMemberPage($file)
 {
     //Si aucun perso est chargé ET qu'on ne veux pas en charger un
     if ($this->session->getVar('persoId') === NULL && !isset($_GET['perso'])) {
         //Page n'ayant besoin d'être en train de jouer un perso
         $canAccessWithoutPerso = false;
         $pages = explode(',', str_replace(' ', '', ENGINE_ACCESS_WITHOUT_PERSO));
         foreach ($pages as $page) {
             if ($page == $file) {
                 $canAccessWithoutPerso = true;
                 break;
             }
         }
         unset($pages, $page);
         if ($canAccessWithoutPerso) {
             return call_user_func_array(array('Member_' . $file, 'generatePage'), array(&$this->tpl, &$this->session, &$this->account));
         } else {
             return fctErrorMSG('Aucun personnage sélectionné.');
         }
         unset($canAccessWithoutPerso);
     } else {
         //S'il faudrait charger un perso mais que rien n'est demandé
         if ($this->session->getVar('persoId') === NULL && !isset($_GET['perso'])) {
             return fctErrorMSG('Vous devez sélectionner un personnage.');
         }
         //Si aucun perso n'est actuellement joué, procéder à son chargement
         if (isset($_GET['perso']) && $_GET['perso'] != $this->session->getVar('persoId')) {
             //Rechercher parmis notre liste de personnage si celui demandé y est.
             $persoFound = false;
             foreach ($this->session->getVar('persoList') as $arrPerso) {
                 if ($arrPerso['id'] == $_GET['perso']) {
                     $persoFound = true;
                     break;
                 }
             }
             if (!$persoFound) {
                 return fctErrorMSG('Tentative de jouer un perso qui ne vous appartiend pas. (cheat)');
             }
             $this->session->setVar('persoId', (int) $_GET['perso']);
         }
         try {
             $perso = Member_Perso::load($this->session->getVar('persoId'));
             $this->tpl->set('CURRENT_PERSO_ID', $perso->getId());
             if ($perso->getHeMsgCount() > 15000) {
                 fctBugReport('Un problème avec le HE à été détecté. Un rapport d\'erreur à été créé et votre compte sera vérifié sous peu.', $perso, __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__, true, true, true);
             }
             //$this->session->setVar('perso', $perso);
         } catch (Exception $e) {
             return fctErrorMSG($e->getMessage());
         }
         return call_user_func_array(array('Member_' . $file, 'generatePage'), array(&$this->tpl, &$this->session, &$this->account, &$perso));
     }
     //Fin du if: Si un personnage à été sélection ou est sauvegardé
 }
Пример #17
0
 /**
  * Gère les requêtes MySQL.
  * 
  * Fait la requête, gère les statistiques sur le nombre de requêtes pour la page.
  * gère les erreurs et les rapports au besoin.
  * 
  * Exemple d'utilisation - Exécute une requête et affiche le résultat
  * <code>
  * $query = 'SELECT * FROM ' . DB_PREFIX . 'perso WHERE id=801;';
  * $result = $db->query($query,__FILE__,__LINE__,__FUNCTION__,__CLASS__,__METHOD__);
  * echo mysql_result($result,0);
  * </code>
  *
  * @see fctBugReport()
  * @param string $query  Requête MySQL à effectuer
  * @param string $file En cas d'erreur, permet d'afficher le fichier qui procède à l'appel
  * @param string $line en cas d'erreur, permet d'afficher la ligne en cause du fichier d'appel
  * @param string $function en cas d'erreur, permet d'afficher la fonction en cause du fichier d'appel
  * @param string $class En cas d'erreur, permet d'afficher la classe qui procède à l'appel
  * @param string $method en cas d'erreur, permet d'afficher la méthode en cause du fichier d'appel
  * @return Ressource|false Ressource de mysql_query ou false en cas d'échec
  */
 public function query($query, $file = null, $line = null, $function = null, $class = null, $method = null, $byPassCheck = false)
 {
     if (!$this->connectionId) {
         fctBugReport('Erreur de connexion', array('File' => $file, 'Line' => $line, 'ErrNo' => 'n/a', 'Error' => 'Aucune connexion n\'est établie.', 'query' => $query), $file, $line, $function, $class, $method);
     }
     if ($this->queryCount > 300 && !$byPassCheck) {
         fctBugReport('Le système semble être tombé dans une boucle infernale. Arrêt de la page par mesure préventive. Un rapport d\'erreur à été généré.', array('File' => $file, 'Line' => $line, 'ErrNo' => mysql_errno(), 'Error' => mysql_error(), 'query' => $query), $file, $line, $function, $class, $method);
     }
     $timerSQL = new Timer();
     $timerSQL->start();
     //Effectuer la requete
     $ret =& mysql_query($query, $this->connectionId);
     //Mettre à jour les statistiques
     $this->sqlTime += $timerSQL->finish();
     $this->queryCount++;
     //Si la requête s'est mal déroulée, gérer l'erreur de requête.
     if ($ret === false) {
         fctBugReport('Erreur de requête', array('File' => $file, 'Line' => $line, 'ErrNo' => mysql_errno(), 'Error' => mysql_error(), 'query' => $query), $file, $line, $function, $class, $method);
     }
     //Retourner le résultat de la requête
     return $ret;
 }
Пример #18
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $errorUrl1 = '?popup=1&amp;m=Action_Lieu_Guichet';
     $errorUrl2 = '?popup=1&amp;m=Action_Lieu_Guichet2';
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl1);
     }
     //Vérifier si une carte à été sélectionnée
     if (!isset($_POST['carteid'])) {
         return fctErrorMSG('Aucune carte sélectionnée.', $errorUrl1);
     }
     //Valider si le NIP a été saisi
     if (!isset($_POST['nip'])) {
         return fctErrorMSG('Aucun NIP spécifiée.', $errorUrl2, array('carteid' => $_POST['carteid']));
     }
     //Créer la carte + compte
     $query = 'SELECT *' . ' FROM `' . DB_PREFIX . 'banque_cartes`' . ' LEFT JOIN `' . DB_PREFIX . 'banque_comptes` ON (`compte_banque` = `carte_banque` AND `compte_compte` = `carte_compte`)' . ' WHERE `carte_id` = :carteId' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':carteId', $_POST['carteid'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     //Valider si la carte existe
     if ($arr === false) {
         fctBugReport('Cette carte n\'existe pas', array('perso' => $perso, 'query' => $query), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__);
     }
     //Créer le compte bancaire
     $compte = new Member_BanqueCompte($arr);
     //Créer la carte
     $carte = $compte->getCarte($_POST['carteid'], $arr);
     //Valider si la carte est active ou non
     if (!$carte->isValid()) {
         return fctErrorMSG('Cette carte à été désactivée.', $errorUrl1);
     }
     //Valider le NIP
     if ($carte->getNip() != $_POST['nip']) {
         return fctErrorMSG('NIP invalide.', $errorUrl2, array('carteid' => $_POST['carteid']));
     }
     //Charger l'historique des transactions
     $compteNo = $compte->getNoBanque() . '-' . $compte->getNoCompte();
     $query = 'SELECT *' . ' FROM `' . DB_PREFIX . 'banque_historique`' . ' WHERE `compte`=:noCompte;';
     $prep = $db->prepare($query);
     $prep->bindValue(':noCompte', $compteNo, PDO::PARAM_STR);
     $prep->execute($db, __FILE__, __LINE__);
     $arrAll = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     //Générer la liste de toutes les transactions et formater les données
     $historique = array();
     foreach ($arrAll as &$arr) {
         $arr['date'] = fctToGameTime($arr['date']);
         $arr['retrait'] = fctCreditFormat($arr['retrait'], true);
         $arr['depot'] = fctCreditFormat($arr['depot'], true);
         $arr['solde'] = fctCreditFormat($arr['solde'], true);
         $historique[] = $arr;
     }
     //Passer les informations sur l'accès au template
     $tpl->set('COMPTE', $compte->getNoBanque() . '-' . $compte->getNoCompte());
     $tpl->set('CARD_ID', $_POST['carteid']);
     $tpl->set('NIP', $_POST['nip']);
     $tpl->set('HISTORIQUE', $historique);
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_historique.htm', __FILE__, __LINE__);
 }