Exemplo n.º 1
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&m=Action_Perso_FouillerLieu';
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl);
     }
     //Déclaration des variables pour cette action
     $totalPr = 0;
     $totalPa = 0;
     $paCostPerItem = 2;
     //Trouver les informations concernant les items dans le lieu
     $i = 0;
     while ($item = $perso->getLieu()->getItems($i++)) {
         if (isset($_POST[$item->getInvId() . '_qte'])) {
             if (is_numeric($_POST[$item->getInvId() . '_qte']) && $_POST[$item->getInvId() . '_qte'] > 0) {
                 $totalPr += $item->getPr() * $_POST[$item->getInvId() . '_qte'];
                 $totalPa += $paCostPerItem;
             }
             //Valider si la quantité que le lieu possède la quantité que l'on veux transférer
             if ($item->getQte() < $_POST[$item->getInvId() . '_qte']) {
                 return fctErrorMSG('Vous ne pouvez pas transférer plus que le lieu contient.', $errorUrl);
             }
         }
     }
     //Valider que l'on possède assez de PA
     if ($perso->getPa() <= $totalPa) {
         return fctErrorMSG('Vous n\'avez pas assez de PA.', $errorUrl);
     }
     //Valider que l'on possède assez de PR disponible
     if ($perso->getPrMax() - $perso->getPr() < $totalPr) {
         return fctErrorMSG('Vous ne disposez pas d\'assez de Pr pour effectuer cette action.', $errorUrl);
     }
     $i = 0;
     $itemsList = '';
     while ($item = $perso->getLieu()->getItems($i++)) {
         if (isset($_POST[$item->getInvId() . '_qte'])) {
             $qte = $_POST[$item->getInvId() . '_qte'];
             if (is_numeric($qte) && $qte > 0) {
                 $itemsList .= (empty($itemsList) ? '' : ', ') . '[i]' . $item->getNom() . '[/i] x' . $qte;
                 $item->transfererVersPerso($perso, $qte);
             }
         }
     }
     $perso->refreshInventaire();
     $perso->changePa('-', $totalPa);
     $perso->setPa();
     if (!empty($itemsList)) {
         Member_He::add('System', $perso->getId(), 'donner', "Objet(s) ramassé(s) dans le lieu [i]" . $perso->getLieu()->getNom() . "[/i]: \n" . $itemsList);
     }
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Exemplo n.º 2
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $coutTransaction = 0;
     //Vérifier les paramêtres requis
     if (!isset($_POST['compteNoTo']) || empty($_POST['compteNoTo'])) {
         return fctErrorMSG('Vous devez préciser le compte récepteur.');
     }
     if (!isset($_POST['description']) || empty($_POST['description'])) {
         return fctErrorMSG('Vous devez préciser une description pour la transaction.');
     }
     if (!isset($_POST['value']) || empty($_POST['value'])) {
         return fctErrorMSG('Vous devez entrer le montant de la transaction.');
     }
     if (!is_numeric($_POST['value'])) {
         return fctErrorMSG('Le montant doit être numérique.');
     }
     if (!isset($_POST['date_day']) || empty($_POST['date_day']) || !isset($_POST['date_month']) || empty($_POST['date_month']) || !isset($_POST['date_year']) || empty($_POST['date_year'])) {
         return fctErrorMSG('La date est incomplète.');
     }
     if (!is_numeric($_POST['date_day']) || !is_numeric($_POST['date_month']) || !is_numeric($_POST['date_year'])) {
         return fctErrorMSG('La date est erronée.');
     }
     if (!checkdate($_POST['date_month'], $_POST['date_day'], $_POST['date_year'] - GAMETIME_DECAL)) {
         return fctErrorMSG('La date est erronée.');
     }
     //Passer le # du compte au template
     $tpl->set('COMPTE', $_POST['compte']);
     //Instancier les comptes
     try {
         $compteEmetteur = Member_BanqueCompte::getCompteFromNoCompte($_POST['compte']);
         $compteRecepteur = Member_BanqueCompte::getCompteFromNoCompte($_POST['compteNoTo']);
     } catch (GameException $e) {
         return fctErrorMSG($e->getMessage());
     }
     //Vérifier si le compte appartiend bien au perso
     if ($compteEmetteur->getIdPerso() != $perso->getId()) {
         return fctErrorMSG('Ce compte ne vous appartiend pas.');
     }
     //Valider si le compte possède assez d'argent pour créer la transaction
     if ($compteEmetteur->getCash() < $coutTransaction && $compteEmetteur->getCash() != -1) {
         return fctErrorMSG('Vous n\'avez pas assez de fond dans votre compte pour créer une transaction.');
     }
     $date = mktime(0, 0, 0, $_POST['date_month'], $_POST['date_day'], $_POST['date_year'] - GAMETIME_DECAL);
     //Créer la transaction
     try {
         Member_BanqueTransactionAuto::createNewTransactionAuto($compteEmetteur->getId(), $compteRecepteur->getId(), $_POST['value'], $_POST['description'], $date);
     } catch (GameException $e) {
         return fctErrorMSG($e->getMessage());
     }
     //Retirer le cout de la transaction du compte
     $compteEmetteur->changeCash('-', $coutTransaction);
     $compteEmetteur->setCash();
     //Ajouter la transaction dans l'historique du compte et le HE
     $compteEmetteur->add_bq_hist('', 'CGCH', $coutTransaction, 0);
     Member_He::add(NULL, $perso->getId(), 'banque', 'Vous créez une transaction automatique pour le compte ' . $compteEmetteur->getNoBanque() . '-' . $compteEmetteur->getNoCompte() . '.');
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/BanqueTransactionAutoRedirect.htm', __FILE__, __LINE__);
 }
Exemplo n.º 3
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_Perso_Donnercash';
     //Déclaration des variables pour cette action
     $pacost = 2;
     //PA par item
     //Vérifier l'état du perso
     if (!$perso->isConscient()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl);
     }
     //Créer le template
     if ($perso->getPa() <= $pacost) {
         return fctErrorMSG('Vous n\'avez pas assez de PA.', $errorUrl);
     }
     //Cash spécifié ?
     if (!isset($_POST['cash'])) {
         return fctErrorMSG('Aucun montant.', $errorUrl);
     }
     //Vérifier la validité du montant
     if (!is_numeric($_POST['cash']) || $_POST['cash'] < 1) {
         return fctErrorMSG('Montant invalide', $errorUrl);
     }
     if ($_POST['cash'] > $perso->getCash()) {
         return fctErrorMSG('Vous ne pouvez pas transf&eacute;rer plus que vous poss&eacute;dez.', $errorUrl);
     }
     //Vérifier si un perso a bien été sélectionné
     if (!is_numeric($_POST['toPersoId'])) {
         return fctErrorMSG('Vous n\'avez pas s&eacute;lectionn&eacute; de destinataire.', $errorUrl);
     }
     //Vérifier si le perso à qui donner l'argent est présent dans le bon lieu
     $found = false;
     $i = 0;
     while ($toPerso = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($toPerso->getId() == $_POST['toPersoId']) {
             $found = true;
             break;
         }
     }
     if (!$found) {
         return fctErrorMSG('Ce personnage n\'est pas dans le lieu ou vous vous trouvez actuellement.', $errorUrl);
     }
     //Tranférer l'item du perso actuel vers l'autre perso.
     $perso->changePa('-', $pacost);
     $perso->setPa();
     $perso->changeCash('-', $_POST['cash']);
     $perso->setCash();
     $toPerso->changeCash('+', $_POST['cash']);
     $toPerso->setCash();
     Member_He::add($perso->getId(), $toPerso->getId(), 'donner', "Montant d'argent transféré: " . fctCreditFormat($_POST['cash'], true));
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Exemplo n.º 4
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&m=Action_Item_Menotter';
     if (!isset($_POST['toPersoId'])) {
         return fctErrorMSG('Vous devez sélectionner une personne à détacher.', $errorUrl);
     }
     //Trouver le perso dans le lieu actuel
     $i = 0;
     $persoMenotte = false;
     while ($tmp = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($tmp->getId() == $_POST['toPersoId']) {
             $persoMenotte = $tmp;
             break;
         }
     }
     //Vérifier si le perso est bien menotté
     if (!$persoMenotte->getMenotte()) {
         return fctErrorMSG('Cette personne n\'est pas menottée.', $errorUrl);
     }
     //Vérifier que l'on possède l'item requis pour détacher le menotté
     $found = false;
     $i = 0;
     while ($item = $perso->getInventaire($i++)) {
         if ($item->getInvId() == $persoMenotte->getMenotte()) {
             $found = true;
             break;
         }
     }
     if (!$found) {
         return fctErrorMSG('Vous ne pouvez pas détacher cette personne.', $errorUrl);
     }
     //Tout est ok, détacher la personne
     $query = 'UPDATE ' . DB_PREFIX . 'perso' . ' SET menotte = NULL' . ' WHERE id=:persoId' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $persoMenotte->getId(), PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
     //Déséquiper l'item pour éviter un double menottage
     $query = 'UPDATE ' . DB_PREFIX . 'item_inv' . ' SET inv_equip="0"' . ' WHERE inv_id=:itemId' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':itemId', $persoMenotte->getMenotte(), PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
     $msg = 'Les menottes ont été retirées.';
     Member_He::add($perso->getId(), $persoMenotte->getId(), 'menotte', $msg);
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Exemplo n.º 5
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $actionPa = 3;
     if (!isset($_POST['id']) || isset($_POST['id']) && !is_numeric($_POST['id'])) {
         die('00|' . rawurlencode('Vous devez sélectionner un item pour effectuer cette action.'));
     }
     //Vérifier l'état du perso
     if (!$perso->isConscient()) {
         die($_POST['id'] . '|' . rawurlencode('Votre n\'&ecirc;tes pas en état d\'effectuer cette action.'));
     }
     if ($perso->getPa() <= $actionPa) {
         die($_POST['id'] . '|' . rawurlencode('Vous n\'avez pas assez de PA pour effectuer cette action.'));
     }
     //Trouver en inventaire l'item que l'on souhaite jeter
     $i = 0;
     $item = null;
     while ($tmp = $perso->getInventaire($i++)) {
         if ($tmp->getInvId() == $_POST['id']) {
             $item = $tmp;
         }
     }
     if (empty($item)) {
         die($_POST['id'] . '|' . rawurlencode('Cet item ne vous appartiend pas. (cheat)'));
     }
     if ($item->canRegroupe()) {
         if (!isset($_POST['askQte'])) {
             //Demander la quantité à jeter
             $msg = '<div style="text-align:center;width:100%;">';
             $msg .= 'Jeter: <input type="text" size="3" class="text" id="ask_qte" value="1" style="text-align:right;" /> / ' . $item->getQte() . '<br />';
             $msg .= "<input type=\"button\" class=\"button\" onclick=\"submitJeterForm('?m=Action_Perso_InventaireJeter'," . $_POST['id'] . ", \$F('ask_qte'));\" value=\"Jeter\" />";
             $msg .= '</div>';
             die($_POST['id'] . '|' . $msg);
         }
     } else {
         $_POST['askQte'] = 1;
     }
     //Déséquiper + jeter l'item(
     $item->transfererVersLieu($perso->getLieu(), $_POST['askQte']);
     $perso->refreshInventaire();
     //Recalculer l'inventaire (les PR)
     $perso->changePa('-', $actionPa);
     $perso->setPa();
     if ($_POST['askQte'] > 1) {
         Member_He::add('System', $perso->getId(), 'jeter', "Vous jetez " . $_POST['askQte'] . "x [i]" . $item->getNom() . '[/i] au sol.');
     } else {
         Member_He::add('System', $perso->getId(), 'jeter', "Vous jetez votre [i]" . $item->getNom() . '[/i] au sol.');
     }
     die($_POST['id'] . '|OK|' . $perso->getPa() . '|' . $perso->getPr());
     //Tout est OK
 }
Exemplo n.º 6
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_Parler';
     //Valider si: Aucun message tappé et on essaie pas de montrer un Badge
     if ((!isset($_POST['msg']) || empty($_POST['msg'])) && (!isset($_POST['badge']) || $_POST['badge'] == '0')) {
         return fctErrorMSG('Aucun message à envoyer.', $errorUrl);
     }
     $msg_type = 'parler';
     //Charger les informations sur le badge et cr.er l'entête du message si nécéssaire.
     if (isset($_POST['badge']) && $_POST['badge'] != '0') {
         $badge_txt = '';
         $msg_type = 'parlerbadge';
         if ($_POST['badge'] == 'VISAVERT' && $perso->getVisaPerm() == '1') {
             $badge_txt = 'Une personne vous présente son Visa Vert: ' . $perso->getNom() . '[hr]';
         } else {
             //Trouver le badge sélectionné
             $i = 0;
             $trouve = false;
             while ($item = $perso->getInventaire($i++)) {
                 if ($item->getInvId() == $_POST['badge']) {
                     $trouve = true;
                     break;
                 }
             }
             if ($trouve) {
                 $badge_txt = 'Une personne vous présente son ' . $item->getNom() . ': ' . $item->getTitre() . ' (' . $item->getContenu() . ') [hr]';
             } else {
                 return fctErrorMSG('Le badge que vous avez sélectionné n\'existe pas.', $errorUrl);
             }
         }
         $_POST['msg'] = $badge_txt . $_POST['msg'];
     }
     if (!isset($_POST['to'])) {
         $_POST['to'] = 'Note perso.';
     } else {
         //Si des destinataires sont recu, les valider et leur faire parvenir le message
         for ($i = 0; $i < count($_POST['to']); $i++) {
             if (!$perso->getLieu()->confirmPerso($perso, $_POST['to'][$i])) {
                 array_remove($_POST['to'], $i);
             }
         }
     }
     //Copier le message dans les HE
     Member_He::add($perso->getId(), $_POST['to'], $msg_type, $_POST['msg']);
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Exemplo n.º 7
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     if (!isset($_GET['choix'])) {
         return fctErrorMSG('Paramêtre requis manquant(1).');
     }
     if (!isset($_GET['id'])) {
         return fctErrorMSG('Paramêtre requis manquant(2).');
     }
     $persoid = (int) $_GET['id'];
     if ($persoid === 0) {
         return fctErrorMSG('Paramêtre requis manquant(3).');
     }
     //Vérifier que la demande de menottage est bien réelle
     $query = 'SELECT fromid' . ' FROM ' . DB_PREFIX . 'perso_fouille' . ' WHERE fromid=:fromId' . ' AND toid=:toId' . ' AND reponse=0' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':fromId', $persoid, PDO::PARAM_INT);
     $prep->bindValue(':toId', $perso->getId(), PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     if ($arr === false) {
         return fctErrorMSG('Cette demande de fouille est expirée.');
     }
     if ($_GET['choix'] == 1) {
         //Accepter d'être fouillé
         //Sauvegarder la réponse positive
         $query = 'UPDATE ' . DB_PREFIX . 'perso_fouille' . ' SET reponse=1' . ' WHERE fromid=:fromId' . ' AND toid=:toId' . ' LIMIT 1;';
         $msg = 'La demande de fouille à été acceptée.';
     } else {
         //Refuser d'être fouillé
         //Supprimer la demande
         $query = 'DELETE FROM ' . DB_PREFIX . 'perso_fouille' . ' WHERE fromid=:fromId' . ' AND toid=:toId' . ' LIMIT 1;';
         $msg = 'La demande de fouille à été refusée.';
     }
     $prep = $db->prepare($query);
     $prep->bindValue(':fromId', $persoid, PDO::PARAM_INT);
     $prep->bindValue(':toId', $perso->getId(), PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
     Member_He::add($perso->getId(), $persoid, 'fouille', $msg);
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Exemplo n.º 8
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $actionPa = 3;
     if (!isset($_POST['id']) || isset($_POST['id']) && !is_numeric($_POST['id'])) {
         die('00|' . rawurlencode('Vous devez sélectionner un item pour effectuer cette action.'));
     }
     //Vérifier l'état du perso
     if (!$perso->isConscient()) {
         die($_POST['id'] . '|' . rawurlencode('Votre n\'êtes pas en état d\'effectuer cette action.'));
     }
     if ($perso->getPa() <= $actionPa) {
         die($_POST['id'] . '|' . rawurlencode('Vous n\'avez pas assez de PA pour effectuer cette action.'));
     }
     //Trouver en inventaire l'item que l'on souhaite équiper
     $i = 0;
     $item = null;
     while ($tmp = $perso->getInventaire($i++)) {
         if ($tmp->getInvId() == $_POST['id']) {
             $item = $tmp;
         }
     }
     if (empty($item)) {
         die($_POST['id'] . '|' . rawurlencode('Cet item (#' . $_POST['id'] . ') ne vous (id ' . $perso->getId() . ') appartiend pas. (cheat)'));
     }
     //Ranger l'item
     $query = 'UPDATE ' . DB_PREFIX . 'item_inv' . ' SET inv_equip="0"' . ' WHERE inv_persoid=:persoId' . ' AND inv_id=:itemId' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
     $prep->bindValue(':itemId', $_POST['id'], PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
     $perso->refreshInventaire();
     //Recalculer l'inventaire (les PR)
     $perso->changePa('-', $actionPa);
     $perso->setPa();
     Member_He::add('System', $perso->getId(), 'ranger', "Vous rangez votre [i]" . $item->getNom() . '[/i].');
     die($_POST['id'] . '|OK|' . $perso->getPa() . '|' . $perso->getPr());
     //Tout est OK
 }
Exemplo n.º 9
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&m=Action_Perso_Depouiller';
     if (!isset($_POST['persoid'])) {
         return fctErrorMSG('Vous devez sélectionner une personne à fouiller.', $errorUrl);
     }
     if (!isset($_POST['msg']) || empty($_POST['msg'])) {
         return fctErrorMSG('Vous devez entrer un message expliquant l\'action. (ex.: veuillez lever les bras.)', $errorUrl);
     }
     //Valider que le personnage à fouiller est bel et bien dans le lieu actuel
     $i = 0;
     $found = false;
     while ($tmp = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($tmp->getId() == $_POST['persoid']) {
             $found = true;
             break;
         }
     }
     if (!$found) {
         return fctErrorMSG('Le personnage que vous avez sélectionné ne se situe pas dans le même lieu que vous.', $errorUrl);
     }
     //Tout est OK, créer et envoyer la demande de Fouille
     //Si une ancienne demande existait, la supprimer, de facon à la renouveller
     $query = 'DELETE FROM ' . DB_PREFIX . 'perso_fouille' . ' WHERE fromid = ' . (int) $perso->getId() . ' AND toid = ' . (int) $_POST['persoid'] . ' LIMIT 1;';
     $db->queryPlus($query, __FILE__, __LINE__);
     //Créer la demande
     $query = 'INSERT INTO ' . DB_PREFIX . 'perso_fouille' . ' (`fromid`, `toid`, `expiration`, `reponse`)' . ' VALUES' . ' (:fromId, :toId, UNIX_TIMESTAMP(), 0);';
     $prep = $db->prepare($query);
     $prep->bindValue(':fromId', $perso->getId(), PDO::PARAM_INT);
     $prep->bindValue(':toId', $_POST['persoid'], PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
     //Soumettre le message confirmant la demande
     $msg = fctScriptProtect($_POST['msg']);
     Member_He::add($perso->getId(), (int) $_POST['persoid'], 'fouille', $msg . "\n[HJ: Acceptez-vous de vous laisser fouiller? [<a href=\"?m=Action_Perso_FouillerGo&amp;id=" . (int) $perso->getId() . "&amp;choix=1\">Oui</a>/<a href=\"?m=Action_Perso_FouillerGo&amp;id=" . (int) $perso->getId() . "&amp;choix=0\">Non</a>]]", HE_AUCUN, HE_TOUS, false);
     Member_He::add($perso->getId(), (int) $_POST['persoid'], 'fouille', $msg . "\n[HJ: En attente de la réponse du joueur ...]", HE_TOUS, HE_AUCUN, false);
     //Rafraichir le HE
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Exemplo n.º 10
0
 public static function generatePage(&$tpl, &$session, &$account, &$mj)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     if (isset($_POST['send'])) {
         if (empty($_POST['arrLieux'])) {
             $tpl->set('STATUS_MSG', "Aucun lieu spécifié.");
         } else {
             $arrLieux = explode(',', $_POST['arrLieux']);
             $arr = array();
             foreach ($arrLieux as &$tmp) {
                 $arr[] = '?';
             }
             $queryAddon = implode(',', $arr);
             //Effectuer la liste de tout les lieux sélectionnées
             $query = 'SELECT p.id as persoId, l.id as lieuId' . ' FROM ' . DB_PREFIX . 'lieu as l' . ' LEFT JOIN ' . DB_PREFIX . 'perso as p' . ' ON (p.lieu = l.nom_technique)' . ' WHERE l.id IN (' . $queryAddon . ')' . ' ORDER BY l.id ASC;';
             $prep = $db->prepare($query);
             for ($i = 1; $i <= count($arrLieux); $i++) {
                 $prep->bindValue($i, $arrLieux[$i - 1], PDO::PARAM_STR);
             }
             $prep->executePlus($db, __FILE__, __LINE__);
             $arrAll = $prep->fetchAll();
             $prep->closeCursor();
             $prep = NULL;
             $arrLieu = array();
             foreach ($arrAll as &$arr) {
                 if ($arr['persoId'] != NULL) {
                     //Si on sélectionne un lieu vide
                     $arrLieu[$arr['lieuId']][] = $arr['persoId'];
                 }
             }
             //Ajouter les messages aux HE
             foreach ($arrLieu as $lieu) {
                 Member_He::add($_POST['from'], $lieu, 'mj', $_POST['msg']);
             }
             $tpl->set('STATUS_MSG', "Message envoyé.");
         }
     }
     $tpl->set('MJ_NOM', $mj->getNom());
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Mj/Lieu/Sendmsg.htm');
 }
Exemplo n.º 11
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $cout_carte = 10;
     //Vérifier les paramêtres requis
     if (!isset($_POST['compte'])) {
         return fctErrorMSG('Ce compte est invalide (aucun compte).');
     }
     //Passer le # du compte au template
     $tpl->set('COMPTE', $_POST['compte']);
     //Instancier le compte
     try {
         $compte = Member_BanqueCompte::getCompteFromNoCompte($_POST['compte']);
     } catch (GameException $e) {
         return fctErrorMSG($e->getMessage());
     }
     //Vérifier si le compte appartiend bien au perso
     if ($compte->getIdPerso() != $perso->getId()) {
         return fctErrorMSG('Ce compte ne vous appartiend pas.');
     }
     //Valider si le nip a été entré
     if (!is_numeric($_POST['nip'])) {
         return fctErrorMSG('Vous devez entrez un NIP composé uniquement de chiffres de 0 à 9.');
     }
     //Valider si le nom a été entré
     if (empty($_POST['nom'])) {
         return fctErrorMSG('Vous devez entrez un nom pour la carte.');
     }
     //Valider si le compte possède assez d'argent pour acheter une carte
     if ($compte->getCash() < $cout_carte && $compte->getCash() != -1) {
         return fctErrorMSG('Vous n\'avez pas assez de fond dans votre compte pour créer une carte.');
     }
     //Retirer le cout de la carte du compte
     $compte->changeCash('-', $cout_carte);
     $compte->setCash();
     //Créer l'access
     $carteId = $compte->createAccesCard($_POST['nom'], $_POST['nip'], $_POST['valid']);
     //Créer la carte
     $compte->createCarteGuichet($_POST['nom'], $carteId, $perso->getId());
     //Ajouter la transaction dans l'historique du compte et le HE
     $compte->add_bq_hist('', 'CGCH', $cout_carte, 0);
     Member_He::add(NULL, $perso->getId(), 'banque', 'Vous obtenez une carte pour le compte ' . $compte->getNoBanque() . '-' . $compte->getNoCompte() . '.');
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Lieu/Banque_carte_redirect.htm', __FILE__, __LINE__);
 }
Exemplo n.º 12
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&m=ContactMj';
     if (!isset($_POST['type']) || !isset($_POST['titre']) || !isset($_POST['msg'])) {
         return fctErrorMSG('Données requises manquantes.', $errorUrl);
     }
     if (empty($_POST['titre'])) {
         return fctErrorMSG('Vous devez remplir tout les champs (1).', $errorUrl);
     }
     if (empty($_POST['msg'])) {
         return fctErrorMSG('Vous devez remplir tout les champs (2).', $errorUrl);
     }
     $query = 'SELECT COUNT(*)' . ' FROM ' . DB_PREFIX . 'ppa' . ' WHERE	persoid=:persoId' . ' AND statut="ouvert";';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     if ($arr[0] >= PPA_MAX) {
         return fctErrorMSG('Vous avez atteind votre maximum de ticket ouvert.', $errorUrl);
     }
     $query = 'INSERT INTO ' . DB_PREFIX . 'ppa' . ' (`persoid`, `type`, `date`, `mjid`, `titre`, `msg`, `lieu`, `pa`, `paMax`, `pv`, `pvMax`)' . ' VALUES' . ' (:persoId, :type, UNIX_TIMESTAMP(), 0, :titre, :msg, :lieu, :pa, :paMax, :pv, :pvMax);';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
     $prep->bindValue(':type', $_POST['type'], PDO::PARAM_STR);
     $prep->bindValue(':titre', fctScriptProtect($_POST['titre']), PDO::PARAM_STR);
     $prep->bindValue(':msg', fctScriptProtect($_POST['msg']), PDO::PARAM_STR);
     $prep->bindValue(':lieu', $perso->getLieu()->getNomTech(), PDO::PARAM_STR);
     $prep->bindValue(':pa', $perso->getPa(), PDO::PARAM_STR);
     $prep->bindValue(':paMax', $perso->getPaMax(), PDO::PARAM_STR);
     $prep->bindValue(':pv', $perso->getPv(), PDO::PARAM_STR);
     $prep->bindValue(':pvMax', $perso->getPvMax(), PDO::PARAM_STR);
     $prep->executePlus($db, __FILE__, __LINE__);
     //Copier le message dans les HE
     Member_He::add($perso->getId(), 'MJ', 'ppa', $_POST['msg']);
     //Retourner le template complété/rempli
     $tpl->set('PAGE', '?popup=1&m=ContactMj');
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/action_redirect.htm', __FILE__, __LINE__);
 }
Exemplo n.º 13
0
 function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     if (isset($_POST['del']) && $_POST['del'] != null) {
         //Effacer la sélection
         if (isset($_POST['delsel'])) {
             Member_He::deleteMessages($perso->getId(), $_POST['del']);
         }
     }
     //Effacer les déplacements
     if (isset($_POST['deldep'])) {
         Member_He::deleteType($perso->getId(), 'move');
     }
     //Effacer tout le HE et forcer la restauration du compteur heQte à 0
     if (isset($_GET['delall'])) {
         Member_He::deleteAll($perso->getId());
     }
     //Retourner le template complété/rempli
     $tpl->set('PAGE', 'index');
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/redirect.htm', __FILE__, __LINE__);
 }
Exemplo n.º 14
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     if ($account->getMemberLevel() === 0) {
         return fctErrorMSG('Cette option est accessible aux Membres Plus seulement.');
     }
     header("Content-Type: text/plain;");
     header("Content-Disposition: attachment; filename=he_export" . date("Y-m-d") . ".txt");
     for ($i = 0; $i < 12000; $i += 500) {
         $arrAll = Member_He::listMessages($perso, $i, 499, false);
         //Grouper adéquatement les envoyeurs & destinataires
         $arrHe = array();
         foreach ($arrAll as &$arrMsg) {
             $arrTmp = array();
             $arrTmp['msg'] = $arrMsg->getMsg();
             $arrTmp['date'] = $arrMsg->getDateTxt();
             //remplacer les tableaux From To par la version texte
             $arrFrom = array();
             $arrTo = array();
             foreach ($arrMsg->getFrom() as $tmp) {
                 $arrFrom[] = $tmp['nom'];
             }
             foreach ($arrMsg->getTo() as $tmp) {
                 $arrTo[] = $tmp['nom'];
             }
             $arrTmp['from'] = implode(', ', $arrFrom);
             $arrTmp['to'] = implode(', ', $arrTo);
             $arrHe[] = $arrTmp;
             unset($arrTmp);
         }
         unset($arrAll);
         $tpl->set('MESSAGES', $arrHe);
         unset($arrHe);
         //Retourner le template complété/rempli
         echo $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Mp/heExport2.htm', __FILE__, __LINE__);
         flush();
     }
     die;
 }
Exemplo n.º 15
0
 public static function generatePage(&$tpl, &$session, &$account, &$mj)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     if (isset($_POST['send'])) {
         //Envoyer le message
         Member_He::add($_POST['from'], $_POST['persoid'], 'mj', $_POST['msg']);
         $tpl->set("STATUS_MSG", "Message envoyé.");
     }
     //Fetcher toutes les informations concernant le perso
     $query = 'SELECT nom' . ' FROM ' . DB_PREFIX . 'perso' . ' WHERE id=:id' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
     $prep->executePlus($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     $tpl->set("PERSO_ID", $_GET['id']);
     $tpl->set("MJ_NOM", $mj->getNom());
     $tpl->set("PERSO_NOM", $arr['nom']);
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Mj/Perso/Sendmsg.htm');
 }
Exemplo n.º 16
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_Perso_FouillerLieu';
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.');
     }
     //LISTER TOUT LES ITEMS PRESENTS DANS LE LIEU NON CACHES
     $i = 0;
     $e = 0;
     $items = array();
     while ($item = $perso->getLieu()->getItems($i++)) {
         if (!$item->iscache()) {
             //On affiche seulement les objets qui ne sont pas caches
             $items[$e++] = $item;
         }
     }
     $tpl->set('INV_LIEU', $items);
     //CAS OU ON CHERCHE LES OBJETS CACHES
     if (isset($_POST['search'])) {
         //Détermine le nombre de Pa nécessaire
         $actionPa = 10;
         $tailleLieu = array('TC' => 1, 'C' => 2, 'M' => 3, 'L' => 4, 'TL' => 5);
         $influence_tailleLieu = $tailleLieu[$perso->getLieu()->getDimension()];
         //influence en fonction de la taille du lieu
         $actionPa *= $influence_tailleLieu;
         //Verification de l'état du personnage
         if (!$perso->isConscient()) {
             return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl);
         }
         if ($perso->getPa() < $actionPa) {
             return fctErrorMSG('Vous n\'avez pas assez de PA.', $errorUrl);
         }
         //Test de compétence
         $tauxReussite = $perso->getChancesReussite("PCKP");
         $de = rand(1, 100);
         if (DEBUG_MODE) {
             echo "Test : [Dé=" . $de . ", TauxRéussite=" . $tauxReussite . "]\n";
         }
         $messageHe = 'Vous faites une recherche approfondi dans ' . $perso->getLieu()->getNom() . '. ';
         $items = array();
         //Le test a réussi
         if ($de < $tauxReussite) {
             //Affichage des objets cachés
             $i = 0;
             $e = 0;
             $degReussite = $tauxReussite - $de;
             while ($item = $perso->getLieu()->getItems($i++)) {
                 if ($item->iscache() && $degReussite > $item->getTauxCache()) {
                     //On affiche seulement les objets caché qui ont été trouvés
                     $items[$e++] = $item;
                 }
             }
             //Gain Xp
             $xpInfluTailleLieu = array('TC' => '1', 'C' => '2', 'M' => '3', 'L' => '4', 'TL' => '5');
             // Le gain d'xp depend de la dimension du lieu
             if (empty($items)) {
                 $messageHe .= 'Vous ne trouvez rien.' . "\n";
             } else {
                 $messageHe .= 'Vous trouvez quelques choses.' . "\n";
             }
             $messageHe .= "\n\n" . $perso->setStat(array('AGI' => '+00', 'FOR' => '-0' . $xpInfluTailleLieu[$perso->getLieu()->getDimension()], 'DEX' => '+0' . $xpInfluTailleLieu[$perso->getLieu()->getDimension()], 'PER' => '+0' . $xpInfluTailleLieu[$perso->getLieu()->getDimension()], 'INT' => '-0' . $xpInfluTailleLieu[$perso->getLieu()->getDimension()]));
             $messageHe .= "\n" . $perso->setComp(array('PCKP' => rand(1, 3) * $tailleLieu[$perso->getLieu()->getDimension()]));
         } else {
             $messageHe .= 'Vous ne trouvez rien.' . "\n";
             //Gain Xp
             $messageHe .= "\n\n" . $perso->setStat(array('AGI' => '+00', 'FOR' => '-01', 'DEX' => '+01', 'PER' => '+01', 'INT' => '-01'));
             $messageHe .= "\n" . $perso->setComp(array('PCKP' => rand(1, 3)));
         }
         //Affichage dans le HE
         Member_He::add('System', $perso->getId(), 'chercher', $messageHe);
         //Mise à jour PA
         $perso->changePa('-', $actionPa);
         $perso->setPa();
         $tpl->set('INV_LIEU_CACHE', $items);
     }
     //CAS OU ON CHERCHE DANS UNE CACHETTE PRECISE
     if (isset($_POST['search_no'])) {
         $actionPa = 10;
         //Verification de l'état du personnage
         if (!$perso->isConscient()) {
             return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl);
         }
         if ($perso->getPa() < $actionPa) {
             return fctErrorMSG('Vous n\'avez pas assez de PA.', $errorUrl);
         }
         //Liste des objets
         $i = 0;
         $e = 0;
         $items = array();
         while ($item = $perso->getLieu()->getItems($i++)) {
             if ($item->getCacheNo() == $_POST['cache_no']) {
                 //On affiche seulement l'objet caché à la cachette
                 $items[$e++] = $item;
             }
         }
         $tpl->set('INV_LIEU_CACHE', $items);
         if (empty($items)) {
             $messageHe = 'Vous cherchez dans un endroit précis [HJ: cachette ' . $_POST['cache_no'] . '] dans ' . $perso->getLieu()->getNom() . ', mais il n\'y a rien.' . "\n";
         } else {
             $messageHe = 'Vous cherchez dans un endroit précis [HJ: cachette ' . $_POST['cache_no'] . '] dans ' . $perso->getLieu()->getNom() . '. Vous trouvez quelque chose.' . "\n";
         }
         //Affichage HE
         Member_He::add('System', $perso->getId(), 'chercher', $messageHe);
         //Mise à jour PA
         $perso->changePa('-', $actionPa);
         $perso->setPa();
     }
     $tpl->set('PERSO', $perso);
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/Action/Perso/FouillerLieu.htm', __FILE__, __LINE__);
 }
Exemplo n.º 17
0
 public static function generatePage(&$tpl, &$session, &$account, &$mj)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     if (!isset($_GET['id'])) {
         return fctErrorMSG('Données requises manquantes.');
     }
     //Trouver les PPA associé au MJ
     $query = 'SELECT m.*, p.nom as perso' . ' FROM ' . DB_PREFIX . 'ppa as m' . ' LEFT JOIN ' . DB_PREFIX . 'perso as p ON (p.id = m.persoid) ' . ' WHERE	m.id=:id' . ' LIMIT 1';
     $prep = $db->prepare($query);
     $prep->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     if ($arr === false) {
         return fctErrorMSG('PPA innexistant ou attribué à un autre MJ.');
     }
     $PPA = array();
     $i = 0;
     //Afficher le message de base (Le PPA)
     $PPA[$i] = $arr;
     $PPA[$i]['msg'] = BBCodes(stripslashes($PPA[$i]['msg']));
     $PPA[$i]['notemj'] = stripslashes($PPA[$i]['notemj']);
     $PPA[$i]['datetxt'] = fctToGameTime($arr['date']);
     $i++;
     //			((			Non-Attribué, ou soi-même					)  &&	Ouvert(non-fermé))
     $CanReply = ($PPA[0]['mjid'] == 0 || $PPA[0]['mjid'] == $mj->getId()) && $PPA[0]['statut'] == 'ouvert';
     //Sauvegarder le commentaire de base du Ppa
     if (isset($_POST['save_comment'])) {
         $query = 'UPDATE ' . DB_PREFIX . 'ppa' . ' SET notemj=:noteMj' . ' WHERE id =:id;';
         $prep = $db->prepare($query);
         $prep->bindValue(':noteMj', htmlspecialchars($_POST['notemjbase']), PDO::PARAM_STR);
         $prep->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         echo "<script type=\"text/javascript\">location.href='?mj=Perso_Ppa&id=" . $_GET['id'] . "';</script>";
         die;
     }
     //Sauvegarder l'attribution du PPA
     if (isset($_POST['save_saisi'])) {
         $query = 'UPDATE ' . DB_PREFIX . 'ppa' . ' SET mjid=:mjId' . ' WHERE id =:id;';
         $prep = $db->prepare($query);
         $prep->bindValue(':mjId', $_POST['mj'], PDO::PARAM_INT);
         $prep->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         echo "<script type=\"text/javascript\">location.href='?mj=Perso_Ppa&id=" . $_GET['id'] . "';</script>";
         die;
     }
     //Ajout d'une réponse ?
     if (isset($_POST['reply']) && $CanReply) {
         $query = 'INSERT INTO ' . DB_PREFIX . 'ppa_reponses' . ' (`sujetid`, `mjid`, `date`, `msg`, `notemj`)' . ' VALUES' . ' (:sujetId, :mjId, UNIX_TIMESTAMP(), :msg, :noteMj);';
         $prep = $db->prepare($query);
         $prep->bindValue(':sujetId', $_GET['id'], PDO::PARAM_INT);
         $prep->bindValue(':mjId', $mj->getId(), PDO::PARAM_INT);
         $prep->bindValue(':msg', htmlspecialchars($_POST['msg']), PDO::PARAM_STR);
         $prep->bindValue(':noteMj', htmlspecialchars($_POST['notemj']), PDO::PARAM_STR);
         $prep->execute($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         Member_He::add($mj->getNom(), $PPA[0]['persoid'], 'ppa', $_POST['msg']);
     }
     //Afficher les réponses
     $query = 'SELECT p.*, mj.nom as mjnom' . ' FROM ' . DB_PREFIX . 'ppa_reponses as p' . ' LEFT JOIN ' . DB_PREFIX . 'mj as mj ON (mj.id = p.mjid)' . ' WHERE p.sujetid=:id' . ' ORDER BY p.`date` ASC;';
     $prep = $db->prepare($query);
     $prep->bindValue(':id', $_GET['id'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrAll = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     if (count($arrAll) > 0) {
         foreach ($arrAll as &$arr) {
             $PPA[$i] = $arr;
             $PPA[$i]['msg'] = BBCodes(stripslashes($PPA[$i]['msg']));
             if (empty($PPA[$i]['notemj'])) {
                 $PPA[$i]['notemj'] = "<i>- aucune note -</i>";
             } else {
                 $PPA[$i]['notemj'] = BBCodes(stripslashes($PPA[$i]['notemj']));
             }
             $PPA[$i]['datetxt'] = fctToGameTime($arr['date']);
             if (empty($arr['mjnom'])) {
                 if ($arr['mjid'] == 0) {
                     $PPA[$i]['mjnom'] = $PPA[0]['perso'];
                 } else {
                     $PPA[$i]['mjnom'] = 'MJ Inconnu';
                 }
             } else {
                 $PPA[$i]['mjnom'] = stripslashes($arr['mjnom']);
             }
             $i++;
         }
     }
     //Si PPA attribué, vérifier s'il traine (en attente) depuis plus de 3 jours
     //if($CanReply)
     //{
     $canClose = false;
     if ($CanReply && $PPA[$i - 1]['date'] <= mktime(0, 0, 0, date('m'), date('d') - 3, date('Y'))) {
         //$canReply = true;
         $canClose = true;
     }
     //Fermer le PPA si le MJ est autorisé à y répondre
     if ($canClose && isset($_POST['close'])) {
         $query = 'UPDATE ' . DB_PREFIX . 'ppa' . ' SET statut="ferme"' . ' WHERE	id=:sujetId' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':sujetId', $_GET['id'], PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         header('location:?mj=Perso_Ppa&id=' . (int) $_GET['id']);
         die;
     }
     //}
     $query = 'SELECT id, nom' . ' FROM ' . DB_PREFIX . 'mj;';
     $prep = $db->prepare($query);
     $prep->execute($db, __FILE__, __LINE__);
     $MJ = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     $tpl->set("MJID", $mj->getId());
     $tpl->set("MJ", $MJ);
     $tpl->set("PPA", $PPA);
     $tpl->set("CAN_REPLY", $CanReply);
     $tpl->set("CAN_CLOSE", $canClose);
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . '/html/Mj/Perso/ppa.htm');
 }
Exemplo n.º 18
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $actionPa = 10;
     if (!isset($_POST['id']) || isset($_POST['id']) && !is_numeric($_POST['id'])) {
         die('00|' . rawurlencode('Vous devez sélectionner un item pour effectuer cette action.'));
     }
     //Vérifier l'état du perso
     if (!$perso->isConscient()) {
         die($_POST['id'] . '|' . rawurlencode('Votre n\'êtes pas en état d\'effectuer cette action.'));
     }
     if ($perso->getPa() <= $actionPa) {
         die($_POST['id'] . '|' . rawurlencode('Vous n\'avez pas assez de PA pour effectuer cette action.'));
     }
     if ($perso->getMenotte() !== false) {
         die($_POST['id'] . '|' . rawurlencode('Vous êtes menotté et cette action est trop complexe.'));
     }
     //Trouver en inventaire l'item que l'on souhaite charger
     $i = 0;
     $item = null;
     while ($tmp = $perso->getInventaire($i++)) {
         if ($tmp->getInvId() == $_POST['id']) {
             $item = $tmp;
         }
     }
     if (empty($item)) {
         die($_POST['id'] . '|' . rawurlencode('Cet item ne vous appartient pas. (cheat)'));
     }
     if ($item->getMunition() >= $item->getMunitionMax()) {
         die($_POST['id'] . '|' . rawurlencode('Votre arme est déjà remplie à pleine capacité.'));
     }
     if (!isset($_POST['munid'])) {
         //Trouver les munitions compatibles possédés en inventaire
         $query = 'SELECT mun.inv_qte, mun.inv_id, db.db_nom' . ' FROM ' . DB_PREFIX . 'item_inv as mun,' . ' ' . DB_PREFIX . 'item_db_armemunition as tm' . ' LEFT JOIN ' . DB_PREFIX . 'item_db as db ON (db.db_id = tm.db_armeid)' . ' WHERE mun.inv_persoid=:persoId' . ' AND tm.db_munitionid = mun.inv_dbid' . ' AND tm.db_armeid =:itemDbId;';
         $prep = $db->prepare($query);
         $prep->bindValue(':itemDbId', $item->getDbId(), PDO::PARAM_INT);
         $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $arrMun = $prep->fetchAll();
         $prep->closeCursor();
         $prep = NULL;
         if (count($arrMun) == 0) {
             die($_POST['id'] . '|' . rawurlencode('Vous ne possédez aucune munition compatible avec cette arme.'));
         }
         $msg = '';
         foreach ($arrMun as &$arr) {
             $msg .= "<a href=\"#\" onclick=\"submitMunForm('?m=Action_Perso_InventaireCharger'," . $_POST['id'] . "," . $arr['inv_id'] . ");\">" . rawurlencode(stripslashes($arr['db_nom'])) . "</a><br />";
         }
         die($_POST['id'] . '|' . $msg);
     } else {
         // Charger les munitions dans l'arme
         //Trouver en inventaire les munitions que l'on souhaite charger
         $i = 0;
         $mun = null;
         while ($tmp = $perso->getInventaire($i++)) {
             if ($tmp->getInvId() == $_POST['munid']) {
                 $mun = $tmp;
             }
         }
         if (empty($mun)) {
             die($_POST['id'] . '|' . rawurlencode('Cette munition ne vous appartient pas. (cheat)'));
         }
         $munQte = $mun->getQte();
         $munReq = $item->getMunitionMax() - $item->getMunition();
         if ($munReq > $munQte) {
             $mun->setQte(0);
             $item->setMunition($item->getMunition() + $munQte);
         } else {
             $mun->setQte($munQte - $munReq);
             $item->setMunition($item->getMunitionMax());
             $munQte = $munReq;
             //On a chargé seulement le nécéssaire
         }
         $perso->refreshInventaire();
         //Recalculer l'inventaire (les PR)
         $perso->changePa('-', $actionPa);
         $perso->setPa();
         Member_He::add('System', $perso->getId(), 'charger', 'Vous chargez votre ' . $munQte . 'x[i]' . $mun->getNom() . '[/i] dans votre [i]' . $item->getNom() . '[/i].');
         die($_POST['id'] . '|OK|' . $perso->getPa() . '|' . $perso->getPr() . '|' . $item->getMunition() . '/' . $item->getMunitionMax() . '|' . $mun->getInvId() . '|' . $mun->getQte());
         //Tout est OK
     }
 }
Exemplo n.º 19
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $actionPa = 2;
     if (!isset($_POST['id']) || isset($_POST['id']) && !is_numeric($_POST['id'])) {
         die('00|' . rawurlencode('Vous devez s&eacute;lectionner un item pour effectuer cette action.'));
     }
     //V�rifier l'�tat du perso
     if (!$perso->isConscient()) {
         die($_POST['id'] . '|' . rawurlencode('Votre n\'&ecirc;tes pas en �tat d\'effectuer cette action.'));
     }
     if ($perso->getPa() <= $actionPa) {
         die($_POST['id'] . '|' . rawurlencode('Vous n\'avez pas assez de PA pour effectuer cette action.'));
     }
     //Trouver en inventaire l'item que l'on souhaite �quiper
     $i = 0;
     $item = null;
     while ($tmp = $perso->getInventaire($i++)) {
         if ($tmp->getInvId() == $_POST['id']) {
             $item = $tmp;
             break;
         }
     }
     if (empty($item)) {
         die($_POST['id'] . '|' . rawurlencode('Cet item ne vous appartiend pas. (cheat)'));
     }
     //Si l'item est une nourriture, le supprimer et ajouter les PN
     if ($item instanceof Member_ItemNourriture) {
         //Trouver combien de PN le perso pourrait consommer
         $pnNeeded = $perso->getPnMax() - $perso->getPn();
         //echo "pnNeeded:". $pnNeeded ."<br/>"; ///////////////////
         if ($perso->getPn() >= $perso->getPnMax()) {
             die($_POST['id'] . '|' . rawurlencode('Vous n\'avez pas faim... vraiment pas faim. Une bouch&eacute; de plus et vous pourriez bien exploser. (et non, ca ne vous permettera pas de faire un attentat kamikaze)'));
         }
         //Trouver combien de PN on va consommer
         $usePn = $item->getPn() >= $pnNeeded ? $pnNeeded : $item->getPn();
         //echo "usePN:". $usePN ."<br/>"; ///////////////////
         if ($item->getPn() - $usePn == 0) {
             if ($item->getQte() == 1) {
                 $query = 'DELETE FROM ' . DB_PREFIX . 'item_inv' . ' WHERE inv_id=:itemId' . ' LIMIT 1;';
             } else {
                 $query = 'UPDATE ' . DB_PREFIX . 'item_inv' . ' SET inv_qte = inv_qte - 1' . ' WHERE inv_id=:itemId' . ' LIMIT 1;';
             }
             //echo $query ."<br/>"; ///////////////////
             $prep = $db->prepare($query);
             $prep->bindValue(':itemId', $_POST['id'], PDO::PARAM_INT);
             $prep->executePlus($db, __FILE__, __LINE__);
             $prep->closeCursor();
             $prep = NULL;
         } else {
             //echo "nb de PN de l'item chang�<br/>"; ///////////////////
             $item->changePn('-', $usePn);
             $item->setPn();
         }
         $perso->changePn('+', $usePn);
         $perso->setPn();
         //Si l'item est une drogue,
     } elseif ($item instanceof Member_ItemDrogueDrogue) {
         //Copier une instance de la drogue � consommer.
         $newId = Member_Item::duplicateItem($item->getInvId(), 1, $perso->getId());
         //�quiper (consommer) la drogue, et appliquer la dur�e
         $remiseleft = rand($item->getDuree() - 1, $item->getDuree() + 1);
         //Dur�e un peu al�atoire
         $query = 'UPDATE ' . DB_PREFIX . 'item_inv' . ' SET inv_remiseleft =:remiseLeft,' . '	inv_equip="1"' . ' WHERE	inv_persoid=:persoId' . ' AND inv_id=:itemId' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':remiseLeft', $remiseleft, PDO::PARAM_INT);
         $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
         $prep->bindValue(':itemId', $newId, PDO::PARAM_INT);
         $prep->executePlus($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         $perso->boostPa('+', $item->getBoostPa());
         $perso->boostPv('+', $item->getBoostPv());
         $perso->setPv($perso, 'Consommation drogue');
         //R�duire la quantit� du lot restat, ou le supprimer selon le cas
         if ($item->getQte() == 1) {
             $query = 'DELETE FROM ' . DB_PREFIX . 'item_inv' . ' WHERE	inv_persoid=:persoId' . ' AND inv_id=:itemId' . ' LIMIT 1;';
         } else {
             $query = 'UPDATE ' . DB_PREFIX . 'item_inv' . ' SET inv_qte = inv_qte -1' . ' WHERE	inv_persoid=:persoId' . ' AND inv_id=:itemId' . ' LIMIT 1;';
         }
         $prep = $db->prepare($query);
         $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
         $prep->bindValue(':itemId', $item->getInvId(), PDO::PARAM_INT);
         $prep->executePlus($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
     } else {
         die($_POST['id'] . '|' . rawurlencode('Vous ne pouvez pas consommer ce type d\'item.'));
     }
     $perso->refreshInventaire();
     //Recalculer l'inventaire (les PR)
     $perso->changePa('-', $actionPa);
     $perso->setPa();
     Member_He::add('System', $perso->getId(), 'conso', "Vous consommez votre [i]" . $item->getNom() . '[/i]');
     //Faire la liste de tout les personnages du lieu
     $i = 0;
     $e = 0;
     $arrFrom = array();
     while ($tmp = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($tmp->getId() != $perso->getId()) {
             $arrFrom[$e++] = $tmp->getId();
         }
     }
     Member_He::add($perso->getId(), $arrFrom, 'conso', "Vous voyez une personne consommer : [i]" . $item->getNom() . '[/i]', HE_AUCUN, HE_UNIQUEMENT_MOI);
     die($_POST['id'] . '|OK|' . $perso->getPa() . '|' . $perso->getPr() . '|' . $perso->getPn());
     //Tout est OK
 }
Exemplo n.º 20
0
Arquivo: He.php Projeto: BalamWeb/ccv4
 /** Supprime les message excédant la taille maximale permise.
  * Libère l'espace nécésaire pour ajouter un message.
  * 
  * Exemple d'utilisation (requiert 0 requêtes)
  * <code>
  * self::freeSpace($perso->getId(), $arr['heQte'], $arr['mp']);
  * </code>
  * 
  * Exemple d'utilisation (requiert 2 requêtes)
  * <code>
  * self::freeSpace($perso->getId());
  * </code>
  * @param int $pid Id du ou perso dont on veux trunker le HE.
  * @param int $heQte Quantité de message dans le HE (champ perso.heQte).
  * @param string $mp Status du M+ (champ account.mp).
  */
 private static function freeSpace($pid, $heQte = null, $mp = null)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     //Vérifier si il reste suffisament d'espace disponible dans le HE pour ajouter le nouvel item.
     if (empty($htQte)) {
         $heQte = Member_He::getMsgCount($pid);
     }
     //WARNING: 1 query.
     if (empty($mp)) {
         $maxSpace = Member_He::calculateHeMaxSize($pid);
     } else {
         $maxSpace = self::spacePerMembership($mp);
     }
     //echo "<!-- DEBUG: HE_SIZE ($pid): $hesize / $maxspace -->";
     //Vérifier si l'espace restant dans le HE est correcte
     if ($heQte >= $maxSpace && $maxSpace > 0) {
         $qteDeleted = 0;
         $query = 'UPDATE `' . DB_PREFIX . 'he_fromto`' . ' SET `show`="0"' . ' WHERE `persoid`= :persoId' . ' ORDER BY `msgid` ASC' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':persoId', $pid);
         while ($heQte - $qteDeleted >= $maxSpace && $qteDeleted < 10) {
             // Présomption: l'ID gère l'ordre temporel.
             $prep->execute();
             $qteDeleted++;
         }
         //Mettre à jour les stats du HE.
         self::changeStat($pid, $qteDeleted, true, array(__FUNCTION__, $query));
     }
 }
Exemplo n.º 21
0
 public static function generatePage(&$tpl, &$session, &$account)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     if (!isset($_GET['id'])) {
         return fctErrorMSG('Données requises manquantes. (cheat)');
     }
     //Établir la liste de signes 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__);
     $arrCat = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     foreach ($arrCat as &$arr) {
         $arr['nom'] = stripslashes($arr['nom']);
         $arr['desc'] = stripslashes($arr['desc']);
     }
     $tpl->set('CAT', $arrCat);
     //Fetcher les caractéristiques du perso
     $query = 'SELECT c.*, p.desc as perso_desc' . ' FROM ' . DB_PREFIX . 'caract as c' . ' LEFT JOIN ' . DB_PREFIX . 'perso_caract as p ON (p.caractid=c.id AND p.persoid=:persoId)' . ' WHERE c.type="system"' . ' AND c.catid>0' . ' ORDER BY c.nom;';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $_GET['id'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrCaract = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     $arrC = array();
     foreach ($arrCaract as &$arr) {
         $arr['nom'] = stripslashes($arr['nom']);
         $arr['desc'] = stripslashes($arr['desc']);
         $fn = 'caractDesc_' . $arr['id'];
         if (isset($_POST[$fn]) && !empty($_POST[$fn])) {
             $arrC[$arr['id']] = $_POST[$fn];
         } elseif ($arr['perso_desc'] !== null) {
             $arrC[$arr['id']] = stripslashes($arr['perso_desc']);
         }
     }
     $tpl->set('CARACT', $arrCaract);
     $tpl->set('PERSO_CARACT', $arrC);
     //Établir la liste des statistiques disponibles
     $query = 'SELECT s.*, IFNULL(p.xp, 0) as xp' . ' FROM ' . DB_PREFIX . 'stat as s' . ' LEFT JOIN ' . DB_PREFIX . 'perso_stat as p ON (p.statid = s.id AND p.persoid=:persoId);';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $_GET['id'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrStat = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     foreach ($arrStat as &$arr) {
         if (isset($_POST['stat_' . $arr['id']])) {
             $arr['xp'] = $_POST['stat_' . $arr['id']];
         }
     }
     $tpl->set('STATS', $arrStat);
     //Établir la liste des compétences disponibles
     $query = 'SELECT c.*, IFNULL(p.xp, 0) as xp' . ' FROM ' . DB_PREFIX . 'competence as c' . ' LEFT JOIN ' . DB_PREFIX . 'perso_competence as p ON (p.compid = c.id AND p.persoid=:persoId)' . ' WHERE c.inscription="1";';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $_GET['id'], PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrComp = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     foreach ($arrComp as &$arr) {
         if (isset($_POST['comp_' . $arr['id']])) {
             $arr['lvl'] = $_POST['comp_' . $arr['id']];
         } else {
             $arr['lvl'] = Member_Perso::convCompXpToLevel($arr['xp']);
         }
     }
     $tpl->set('COMPS', $arrComp);
     //Trouver les informations sur le perso
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'perso' . ' WHERE	id=:persoId' . ' AND userid=:userId' . ' AND inscription_valide IN ("0","mod")' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $_GET['id'], PDO::PARAM_INT);
     $prep->bindValue(':userId', $account->getId(), PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrP = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     if ($arrP === false) {
         return fctErrorMSG('Ce personnage n\'existe pas, ne vous appartiend pas, ou n\'est pas en phase de refus. (cheat)');
     }
     //Formater correctement certaines données:
     $arrP['nom'] = stripslashes($arrP['nom']);
     $arrP['description'] = stripslashes($arrP['description']);
     $arrP['background'] = stripslashes($arrP['background']);
     $arrP['yeux'] = stripslashes($arrP['yeux']);
     $arrP['ethnie'] = stripslashes($arrP['ethnie']);
     $arrP['cheveux'] = stripslashes($arrP['cheveux']);
     $arrP['taillem'] = substr($arrP['taille'], 0, 1);
     $arrP['taillecm'] = substr($arrP['taille'], 2, 2);
     if (isset($_POST) && count($_POST) > 0) {
         $tpl->set('PERSO', $_POST);
     } else {
         $tpl->set('PERSO', $arrP);
     }
     //Trouver la raison du refus
     if ($arrP['inscription_valide'] == 'mod') {
         $perso = new Member_Perso($arrP);
         $he = new Member_He($account, $perso);
         $heMsg = $he->listMessages($perso, 0, $account->getMsgPerPage());
         $code = '';
         foreach ($heMsg as $msg) {
             if ($msg->getType() == 'inscription') {
                 $tpl->set('MSG', $msg);
                 $code .= $tpl->fetch($account->getSkinRemotePhysicalPath() . '/html/Member/he_item.htm');
             }
         }
         if ($code != '') {
             $tpl->set('PAGE_HE_MESSAGES', $code);
         }
     }
     $tpl->set('GAME_IS_CYBERCITY', GAME_IS_CYBERCITY);
     //Retourner le template complété/rempli
     $tpl->set('REDIRECT_TO', 'ModPerso2&id=' . $_GET['id']);
     $tpl->set('CHECK_URL', 'ModPersoCheck&id=' . $_GET['id']);
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/creerPerso2.htm', __FILE__, __LINE__);
 }
Exemplo n.º 22
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_Lieu_Recycler';
     $coutPa = 5;
     //Cout de l'action
     if (isset($_POST['march'])) {
         $coutPa += 10;
     }
     //Cout du marchandage
     $remiseTotale = 0.6;
     // Pourcentage de retour sur la valeur de l'objet. 60% = 60$ pour un objet de 100$.
     if ($perso->getPa() <= $coutPa) {
         return fctErrorMSG('Vous n\'avez pas assez de PA pour effectuer cette action.', $errorUrl);
     }
     //Vérifier que le lieu dans lequel est le perso permet bien de recycler les items
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'lieu_menu`' . ' WHERE lieutech=:lieuTech' . ' AND url="Recycler"' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':lieuTech', $perso->getLieu()->getNomTech(), PDO::PARAM_STR);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     if ($arr === false) {
         return fctErrorMSG('Vous n\'êtes pas dans un lieu permettant ce type d\'action.', $errorUrl);
     }
     $vendre = true;
     $vendu = 0;
     $totalProfit = 0;
     $message = '';
     //Essayer de négocier le taux de remise
     if (isset($_POST['march'])) {
         $de = round(rand(1, 100));
         $reussite = $perso->getChancesReussite("MRCH");
         $message = "(négo) ";
         if ($de < $reussite) {
             //Calcul du nouveau % de remise
             $percReussite = $reussite / 100;
             $remiseTotale += 10 * $percReussite / 100;
         } else {
             Member_He::add(NULL, $perso->getId(), 'Recyclage', "La négociation a échoué.", HE_AUCUN, HE_UNIQUEMENT_MOI);
             $vendre = false;
         }
     }
     if ($vendre) {
         $message .= "Vous vendez:";
         //On récupère dans l'inventaire, les objets que l'utilisateur a sélectionné
         $i = 0;
         $objets = array();
         while ($item = $perso->getInventaire($i++)) {
             //Vérifier si l'item fait parti de ceux que l'on désire transférer
             if (isset($_POST[$item->getInvId() . '_qte'])) {
                 $qte = $_POST[$item->getInvId() . '_qte'];
                 if (is_numeric($qte) && $qte > 0) {
                     //Valider si la quantité à tranférer ne dépasse pas la quantité possédée
                     if ($item->getQte() < $qte) {
                         return fctErrorMSG('Vous ne pouvez pas transférer plus que vous possèdez.', $errorUrl);
                     }
                     //Valider si l'item est non-équipée
                     if ($item->isEquip()) {
                         return fctErrorMSG('Un item (' . $item->getNom() . ') dans votre sac a dos apparait comme équipé. Veuillez contacter un MJ par PPA.', $errorUrl);
                     }
                     //Définir des variables simplifiées
                     $prixOriginal = $item->getDbPrix();
                     $qteInv = $item->getQte();
                     $qteVente = $qte;
                     //Calculer le profit sur cet item(s)
                     $prixVente = round($prixOriginal * $remiseTotale * $qteVente);
                     $perso->changeCash("+", $prixVente);
                     $totalProfit += $prixVente;
                     //Retirer définitivement les items de la circulation (du jeu)
                     $qteRestante = $qteInv - $qteVente;
                     if ($qteRestante == 0) {
                         $query = 'DELETE FROM ' . DB_PREFIX . 'item_inv' . ' WHERE inv_id=:itemId' . ' LIMIT 1';
                         $prep = $db->prepare($query);
                         $prep->bindValue(':itemId', $item->getInvId(), PDO::PARAM_INT);
                         $prep->execute($db, __FILE__, __LINE__);
                         $prep->closeCursor();
                         $prep = NULL;
                     } else {
                         $query = 'UPDATE ' . DB_PREFIX . 'item_inv' . ' SET inv_qte=:qte' . ' WHERE inv_id=:itemId' . ' LIMIT 1';
                         $prep = $db->prepare($query);
                         $prep->bindValue(':qte', $qteRestante, PDO::PARAM_INT);
                         $prep->bindValue(':itemId', $item->getInvId(), PDO::PARAM_INT);
                         $prep->execute($db, __FILE__, __LINE__);
                         $prep->closeCursor();
                         $prep = NULL;
                     }
                     //Ajouter un message
                     $message .= "\n-" . $qteVente . "x" . $item->getNom() . ', pour : ' . fctCreditFormat($prixVente, true);
                     $vendu++;
                 }
             }
         }
         //Compiler les résultats
         $message .= "\nTotal : " . $vendu . ' item(s) pour ' . fctCreditFormat($totalProfit, true);
         Member_He::add(NULL, $perso->getId(), 'Système', $message, HE_AUCUN, HE_TOUS);
         $perso->setCash();
     }
     //Soustraire les PA
     $perso->changePa('-', $coutPa);
     $perso->setPa();
     //Retourner le template complété/rempli
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
 }
Exemplo n.º 23
0
 /** Envoie un message radio
  * @param Member_Perso $perso Instance du perso qui envoi le message
  * @param string $message Message à envoyer
  */
 public function utiliser(&$perso, $message)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $errorUrl = '?popup=1&amp;m=Action_Radios';
     if (!$this->getCanTalk()) {
         return fctErrorMSG('Aucune fréquence n\'a été réglée vous ne pouvez pas parler.', $errorUrl);
     }
     $enteteDestinataire = "Vous entendez quelqu'un parler depuis la radio branchée sur la fréquence: " . $this->getFrequence();
     //Recup des talkies sur la même frequence que celui de l'utilisateur
     $query = 'SELECT DISTINCT *' . ' FROM ' . DB_PREFIX . 'item_inv' . ' LEFT JOIN ' . DB_PREFIX . 'item_db ON (db_id=inv_dbid) ' . ' LEFT JOIN ' . DB_PREFIX . 'perso ON (id=inv_persoid)' . ' WHERE inv_notel=:freq' . ' AND inv_id!=:id' . ' AND inv_persoid IS NOT NULL' . ' AND db_type="talkiewalkie";';
     $prep = $db->prepare($query);
     $prep->bindValue(':freq', $this->getFrequence(), PDO::PARAM_INT);
     $prep->bindValue(':id', $this->getInvId(), PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrRadio = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     //Parcourir toutes les radios qui captent la fréquence de celle de l'envoyeur.
     $arrDestOreilletteClair = array();
     //Tableau des destinataire (ceux possédant une radio avec oreillette)
     $arrDestOreilletteCrypt = array();
     //Tableau des destinataire (ceux possédant une radio avec oreillette)
     $arrToClair = array();
     //Tableau concernant les perso dans les lieux
     $arrToCrypt = array();
     //Tableau concernant les perso dans les lieux
     foreach ($arrRadio as $arrRadioTo) {
         //Construire la liste de ceux qui recoivent la transmission (et qui ont un radio)
         //From, du point de vu de ceux qui vont recevoir le message
         //(To sera les gens qui entendent la radio de From qui la possède, $perso est l'émetteur réel)
         $persoFrom = new Member_Perso($arrRadioTo);
         $radio = new Member_ItemRadio($arrRadioTo);
         $lieuTech = $persoFrom->getLieu()->getNomTech();
         //Lieu Technique du perso ayant la radio réceptrice
         //S'il y a une oreillette, ajouter le perso dans une liste spéciale où il ne notifira pas les autres
         if ($radio->getSilenceCapable()) {
             //Si le message peut-être décrypté
             if ($radio->getClef() === $this->getClef()) {
                 $this->addWithoutDouble($arrDestOreilletteClair, $persoFrom->getId());
             } else {
                 $this->addWithoutDouble($arrDestOreilletteCrypt, $persoFrom->getId());
             }
             //$arrDestOreilletteCrypt[] = $persoFrom->getId();
             //S'il n'y a pas d'oreillette, ajouter tout les perso présent dans le lieu
         } else {
             //Si le message peut-être décrypté
             if ($radio->getClef() === $this->getClef()) {
                 //Ajouter le perso qui recoit le message
                 $this->addFromTo($arrToClair, $lieuTech, 'from', $persoFrom->getId());
                 $i = 0;
                 while ($persoTo = $persoFrom->getLieu()->getPerso($persoFrom, $i++)) {
                     if ($persoTo->getId() != $persoFrom->getId()) {
                         $this->addFromTo($arrToClair, $lieuTech, 'to', $persoTo->getId());
                     }
                 }
             } else {
                 //Ajouter le perso qui recoit le message
                 $this->addFromTo($arrToCrypt, $lieuTech, 'from', $persoFrom->getId());
                 $i = 0;
                 while ($persoTo = $persoFrom->getLieu()->getPerso($persoFrom, $i++)) {
                     if ($persoTo->getId() != $persoFrom->getId()) {
                         $this->addFromTo($arrToCrypt, $lieuTech, 'to', $persoTo->getId());
                     }
                 }
             }
         }
     }
     //### AJOUTER LES MESSAGES DANS LES HE
     //Message du personnage qui l'envoi
     $to = array();
     if (!$this->getSilenceCapable()) {
         $i = 0;
         $e = 0;
         while ($persoTo = $perso->getLieu()->getPerso($perso, $i++)) {
             $to[$e++] = $persoTo->getId();
         }
     }
     Member_He::add($perso->getId(), $to, 'radio', "Une transmission radio est envoyée:\n " . $message, HE_TOUS, HE_TOUS);
     //HE_AUCUN)
     //Seulement pour les perso avec une oreillette
     if (count($arrDestOreilletteClair) > 0) {
         Member_He::add('System', $arrDestOreilletteClair, 'radio', "Une transmission radio se fait entendre:\n " . $message, HE_AUCUN, HE_UNIQUEMENT_MOI);
     }
     if (count($arrDestOreilletteCrypt) > 0) {
         Member_He::add('System', $arrDestOreilletteCrypt, 'radio', "Une transmission radio se fait entendre:\n (charabia incompréhensible)", HE_AUCUN, HE_UNIQUEMENT_MOI);
     }
     //Pour chaque lieu
     if (count($arrToClair) > 0) {
         foreach ($arrToClair as $arr) {
             Member_He::add($arr['from'], $arr['to'], 'radio', "Une transmission radio se fait entendre:\n" . $message, HE_TOUS, HE_TOUS);
         }
     }
     if (count($arrToCrypt) > 0) {
         foreach ($arrToCrypt as $arr) {
             Member_He::add($arr['from'], $arr['to'], 'radio', "Une transmission radio se fait entendre:\n (charabia incompréhensible)", HE_TOUS, HE_TOUS);
         }
     }
 }
Exemplo n.º 24
0
 private static function remisePersoFouille(&$perso, $expir)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     if (DEBUG_MODE) {
         self::$debugInfo .= "f";
     }
     //Refuser d'être menotté pour les demandes expirées
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'perso_fouille' . ' WHERE toid=:persoId' . ' AND expiration<:expir;';
     $prep = $db->prepare($query);
     $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
     $prep->bindValue(':expir', $expir, PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $arrFouille = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     $query = 'DELETE' . ' FROM ' . DB_PREFIX . 'perso_fouille' . ' WHERE toid=:toId' . ' AND fromid=:fromId;';
     $prepDel = $db->prepare($query);
     foreach ($arrFouille as $arr) {
         //Envoyer un message informant le menotteur que le délais est expiré
         Member_He::add('System', $arr['toid'], 'fouille', '[HJ: Vous n\'avez pas répondu en temps à une demande de fouille, elle est donc considérée comme refusée. Merci d\'essayer d\'éviter le plus possible de laisser des RP trainer en longueur, car le rythme de jeu s\'en ressent.]');
         Member_He::add('System', $arr['fromid'], 'fouille', '[HJ: Une demande de fouille que vous avez faite à expirée, elle est considérée comme refusée.]');
         //Supprimer le menottage
         $prepDel->bindValue(':toId', $arr['toid'], PDO::PARAM_INT);
         $prepDel->bindValue(':fromId', $arr['fromid'], PDO::PARAM_INT);
         $prepDel->execute($db, __FILE__, __LINE__);
     }
     $prepDel->closeCursor();
     $prepDel = NULL;
     if (DEBUG_MODE) {
         self::$debugInfo .= "f2";
     }
 }
Exemplo n.º 25
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_Lieu_Soigner';
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.');
     }
     $pvSuplementaires = 0.75;
     //1pa soigne 0.75pv
     $facteurResistance = 3;
     //1résitance soigne 3 pv
     if (!isset($_POST['paSoin'])) {
         return fctErrorMSG('Variable requise manquante : PA.', $errorUrl);
     }
     $pa = (int) $_POST['paSoin'];
     //Nombre de PAs saisis par l'utilisateur
     if (!is_numeric($pa)) {
         return fctErrorMSG('La valeur des PA doit être numérique.', $errorUrl);
     }
     if (!isset($_POST['blesse'])) {
         return fctErrorMSG('Aucun personnage à soigner sélectionné', $errorUrl);
     }
     if ($perso->getLieu()->getQteMateriel() <= 0) {
         return fctErrorMSG('Le lieu ne contient plus de matériel médical.', $errorUrl);
     }
     //Récup du perso à soigner
     $i = 0;
     $blesse = null;
     while ($arrPerso = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($arrPerso->getId() == $_POST['blesse']) {
             $blesse = $arrPerso;
             break;
         }
     }
     //Cheat, modification d'id de perso
     if ($blesse == null) {
         return fctErrorMSG('Cheat : Perso non soignable ou n\'étant pas dans votre lieu', $errorUrl);
     }
     //Si les capacités du lieu ne sont pas suffisantes pr soigner le perso
     if ($blesse->getCoeffSoinNecessaire() > $perso->getLieu()->getCoeffSoin()) {
         return fctErrorMSG('Cette personne est dans un état trop grave pour les capacités des installations de ce lieu.', $errorUrl);
     }
     //Pas assez de PA
     if ($perso->getPa() <= $pa) {
         return fctErrorMSG('Vous n\'avez pas assez de PA pour effectuer cette action.', $errorUrl);
     }
     $reussiteChrg = $perso->getChancesReussite("CHRG");
     $gainPV = 0;
     $materielUtilise = 0;
     //Tant que: le nombre de PA à dépenser n'est pas dépensé, que le perso n'est pas soigné, et qu'il reste de la résistance à la trousse
     for ($i = 0; $i < $pa && round($gainPV + $blesse->getPv()) < $blesse->getPvMax() && $materielUtilise < $perso->getLieu()->getQteMateriel(); $i++) {
         //Si le tour de soin est une réussite
         if (rand(1, 100) < $reussiteChrg) {
             $gainPV += $pvSuplementaires;
         }
         $perso->changePa('-', 1);
         $materielUtilise = round($gainPV / $facteurResistance);
         if (DEBUG_MODE) {
             echo "<br />Tour#{$i} : Materiel utilisé : {$materielUtilise}, PV soignés : {$gainPV}";
         }
     }
     $gainPV = round($gainPV);
     //Retirer le materiel utilisé du lieu
     $query = 'UPDATE ' . DB_PREFIX . 'lieu' . ' SET qteMateriel=qteMateriel-:qte' . ' WHERE id=:lieuId;';
     $prep = $db->prepare($query);
     $prep->bindValue(':qte', $materielUtilise, PDO::PARAM_INT);
     $prep->bindValue(':lieuId', $perso->getLieu()->getId(), PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
     $perso->setPa();
     $perso->setComp(array('CHRG' => rand(1, 3)));
     $blesse->changePv("+", $gainPV);
     $blesse->setPv($perso, 'Soigner (lieu)');
     Member_He::add($perso->getId(), $blesse->getId(), 'soin', 'Des soins sont prodigués et permettent de guérir ' . $gainPV . 'PV.');
     //Retourner le template complété/rempli
     if (!DEBUG_MODE) {
         return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
     }
 }
Exemplo n.º 26
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_ReparerArme';
     //Vérifier l'état du perso
     if (!$perso->isAutonome()) {
         return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl);
     }
     //Vérifier si un item à été sélectionné
     if (!isset($_POST['invId']) || !is_numeric($_POST['invId'])) {
         return fctErrorMSG('Vous devez sélectionner un item à réparer.', $errorUrl);
     }
     //Valider si l'arme est présente dans l'inventaire
     $i = 0;
     $found = false;
     while ($item = $perso->getInventaire($i++)) {
         if ($item instanceof Member_ItemArme) {
             if ($item->getInvId() == $_POST['invId']) {
                 $found = true;
                 break;
             }
         }
     }
     if (!$found) {
         return fctErrorMSG('L\'item ne semble pas être une arme valide en votre possession.', $errorUrl);
     }
     $msg = '';
     //Calculer le % de réussite
     switch ($item->getTypeTech()) {
         case 'arme_lancee':
             break;
         case 'arme_feu':
             $chanceReussite = ($perso->getChancesReussite('ARMF') * 1 + $perso->getChancesReussite('FORG') * 2 + $perso->getChancesReussite('MECA') * 1) / 4;
             $chanceReussite = round(($chanceReussite + (100 - $item->getPercDommage() + 100 - $item->getPercComplexite()) / 2) / 2);
             break;
         case 'arme_blanche':
             $chanceReussite = ($perso->getChancesReussite('ARMB') * 1 + $perso->getChancesReussite('FORG') * 2 + $perso->getChancesReussite('ARMU') * 1) / 4;
             $chanceReussite = round(($chanceReussite + (100 - $item->getPercDommage() + 100 - $item->getPercComplexite()) / 2) / 2);
             break;
     }
     if (DEBUG_MODE) {
         echo "\n%dom:" . $item->getPercDommage();
     }
     if (DEBUG_MODE) {
         echo "\n%complex:" . $item->getPercComplexite();
     }
     //Calculer le cout $/Pa de la réparation
     $coutCash = round($item->getPercDommage() / 20 * ($item->getResistanceMax() - $item->getResistance()), 2);
     $coutPa = floor((100 - $chanceReussite) / 10 * $item->getPercDommage() / 10);
     if ($perso->getCash() < $coutCash) {
         return fctErrorMSG('Vous n\'avez pas assez d\'argent pour effectuer une réparation.', $errorUrl);
     }
     if ($perso->getPa() <= $coutPa) {
         return fctErrorMSG('Vous n\'avez pas assez de Pa pour effectuer une réparation. (Requiert ' . $coutPa . 'PA)', $errorUrl);
     }
     //Débuter la tentative de réparation
     $de = rand(1, 100);
     if (DEBUG_MODE) {
         echo "\nde/%reussite:" . $de . '/' . $chanceReussite . "\n";
     }
     if ($de < $chanceReussite) {
         //Réussite
         $msg .= "Vous arrivez à réparer votre [i]" . $item->getNom() . "[/i].";
         $perso->changePa('-', $coutPa);
         $perso->changeCash('-', $coutCash);
         //Calculer le nombre de Pts de réparés
         switch ($item->getTypeTech()) {
             case 'arme_lancee':
                 break;
             case 'arme_feu':
                 $armfId = $perso->convCompCodeToId('ARMF');
                 $forgId = $perso->convCompCodeToId('FORG');
                 $mecaId = $perso->convCompCodeToId('MECA');
                 $lvl = floor(($perso->getCompRealLevel($armfId) * 1 + $perso->getCompRealLevel($forgId) * 2 + $perso->getCompRealLevel($mecaId) * 1) / 4);
                 $msg .= "\n" . $perso->setComp(array('FORG' => rand(2, 6), 'ARMF' => rand(1, 3), 'MECA' => rand(1, 3)));
                 break;
             case 'arme_blanche':
                 $armbId = $perso->convCompCodeToId('ARMB');
                 $forgId = $perso->convCompCodeToId('FORG');
                 $armuId = $perso->convCompCodeToId('ARMU');
                 $lvl = floor(($perso->getCompRealLevel($armbId) * 1 + $perso->getCompRealLevel($forgId) * 2 + $perso->getCompRealLevel($armuId) * 1) / 4);
                 $msg .= "\n" . $perso->setComp(array('FORG' => rand(2, 6), 'ARMB' => rand(1, 3), 'ARMU' => rand(1, 3)));
                 break;
         }
         $lvl++;
         if ($item->getResistanceMax() - $item->getResistance() <= $lvl) {
             $newResist = $item->getResistanceMax();
         } else {
             $newResist = $item->getResistance() + $lvl;
         }
         //Mettre à jour la résistance de l'item
         $query = 'UPDATE ' . DB_PREFIX . 'item_inv' . ' SET		inv_resistance=:resistance' . ' WHERE	inv_id = :itemId' . ' AND inv_persoid = :persoId' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':resistance', $newResist, PDO::PARAM_INT);
         $prep->bindValue(':itemId', $item->getInvId(), PDO::PARAM_INT);
         $prep->bindValue(':persoId', $perso->getId(), PDO::PARAM_INT);
         $prep->executePlus($db, __FILE__, __LINE__);
         $prep->closeCursor();
         $prep = NULL;
         $msg .= "\n" . $perso->setStat(array('INT' => '+01', 'DEX' => '+01', 'AGI' => '-02'));
     } else {
         //Échec
         $msg .= "Vous essayer de réparer votre [i]" . $item->getNom() . "[/i], mais c'est un échec.";
         $perso->changePa('-', $coutPa);
         $perso->changeCash('-', $coutCash);
         $msg .= "\n" . $perso->setComp(array('FORG' => rand(1, 3)));
         $msg .= "\n" . $perso->setStat(array('INT' => '+01', 'DEX' => '+01', 'AGI' => '-02'));
     }
     $perso->setPa();
     $perso->setCash();
     Member_He::add('System', $perso->getId(), 'reparer', $msg);
     if (!DEBUG_MODE) {
         return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
     }
 }
Exemplo n.º 27
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_Depouiller';
     $errorUrl2 = '?popup=1&amp;m=Action_Perso_DepouillerList';
     $pa_cout_item = 0;
     //Cout en PA par item
     //Vérifier l'état du perso
     if (!$perso->isConscient()) {
         return fctErrorMSG('Vous n\'êtes pas en état de pouvoir effectuer cette action.', $errorUrl);
     }
     //Vérifier si un personnage est sélectionné
     if (!isset($_POST['persoid'])) {
         return fctErrorMSG('Aucun personnage sélectionné.', $errorUrl);
     }
     //Vérifier si le montant à retirer est bien recu
     if (!isset($_POST['cash'])) {
         return fctErrorMSG('Aucun montant recu.', $errorUrl2, $_POST);
     }
     if (!is_numeric($_POST['cash'])) {
         return fctErrorMSG('Le montant doit être numérique.', $errorUrl2, $_POST);
     }
     //Trouver la victime
     $i = 0;
     while ($tmp = $perso->getLieu()->getPerso($perso, $i++)) {
         if ($tmp->getId() == $_POST['persoid']) {
             $victime = $tmp;
             break;
         }
     }
     //Valider si personnage que l'on veux dépouiller est actuellement accessible
     if (!isset($victime)) {
         return fctErrorMSG('Ce personnage n\'est pas accessible (innexistant ou déplacé).', $errorUrl2, $_POST);
     }
     //Valider si le personnage que l'on veux dépouiller est bien non-autonome
     if ($victime->isAutonome() && $victime->getPa() > 0) {
         //Valider si on a une autorisation pour fouiller la personne
         $query = 'SELECT toid' . ' FROM ' . DB_PREFIX . 'perso_fouille' . ' WHERE fromid=:fromId' . ' AND toid=:toId' . ' LIMIT 1;';
         $prep = $db->prepare($query);
         $prep->bindValue(':fromId', $perso->getId(), PDO::PARAM_INT);
         $prep->bindValue(':toId', $victime->getId(), PDO::PARAM_INT);
         $prep->execute($db, __FILE__, __LINE__);
         $arr = $prep->fetch();
         $prep->closeCursor();
         $prep = NULL;
         if ($arr === false) {
             return fctErrorMSG('Ce personnage est en mesure de se défendre. Vous devez lui demander la permission... ou l\'amocher un peu... ;) (cheat).', $errorUrl2, $_POST);
         }
     }
     if ($victime->getCash() < $_POST['cash']) {
         return fctErrorMSG('Vous ne pouvez pas prendre plus d\'argent que la victime possède.', $errorUrl2, $_POST);
     }
     if ($_POST['cash'] < 0) {
         return fctErrorMSG('Vous ne pouvez pas prendre un montant négatif.', $errorUrl2, $_POST);
     }
     $str_items = '';
     $prcost = 0;
     $pacost = 0;
     //Lister les items possédé par la victime
     $items = array();
     $i = 0;
     while ($item = $victime->getInventaire($i++)) {
         echo 'tour ' . $i . ' ';
         if (isset($_POST['chk_items_' . $item->getInvId()])) {
             $pacost += $pa_cout_item;
             $prcost += $item->getPr();
             $items[] = $item;
             $str_items .= ($str_items == '' ? '' : ', ') . '[i]' . $item->getNom() . '[/i] x' . $_POST['qte_' . $item->getInvId()];
             if ($_POST['qte_' . $item->getInvId()] > $item->getQte()) {
                 return fctErrorMSG('Vous ne pouvez pas prendre plus d\'items que votre victime n\'en possède.', $errorUrl2, $_POST);
             }
         }
     }
     //Valider les PA
     if ($perso->getPa() <= $pacost) {
         return fctErrorMSG('Vous n\'avez pas assez de PA.', $errorUrl2, array('persoid' => $_POST['persoid']));
     }
     //Valider PR
     if ($perso->getPrMax() - $perso->getPr() < $prcost && $prcost > 0) {
         return fctErrorMSG('Vous n\'avez pas assez de PR disponible.', $errorUrl2, array('persoid' => $_POST['persoid']));
     }
     $perso->changePa('-', $pacost);
     $perso->setPa();
     //Tranférer les items de la victime vers l'inventaire du perso
     if (isset($items)) {
         foreach ($items as $item) {
             $item->transfererVersPerso($perso, $_POST['qte_' . $item->getInvId()]);
         }
         $perso->refreshInventaire();
     }
     //Transférer l'argent
     if ($_POST['cash'] > 0) {
         $victime->changeCash('-', $_POST['cash']);
         $perso->changeCash('+', $_POST['cash']);
         $victime->setCash();
         $perso->setCash();
         $str_items .= ($str_items == '' ? '' : ', ') . $_POST['cash'] . GAME_DEVISE;
     }
     //Ajouter les messages au HE
     Member_He::add($perso->getId(), $victime->getId(), 'depouiller', "Vous dépouillez une personne: " . $str_items . '.', HE_TOUS, HE_AUCUN);
     Member_He::add($perso->getId(), $victime->getId(), 'depouiller', "Vous vous faites dépouiller: " . $str_items . '.', 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();
         }
     }
     Member_He::add(array($perso->getId(), $victime->getId()), $arrPersoLieu, 'depouiller', "Vous voyez une personne en dépouiller une autre", HE_AUCUN, HE_TOUS);
     //Rafraichir le HE
     if (!DEBUG_MODE) {
         return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__);
     }
 }
Exemplo n.º 28
0
 private static function doInscription(&$tpl, &$account, &$mj)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $query = 'SELECT p.*, a.email, a.id as aid' . ' FROM ' . DB_PREFIX . 'perso as p' . ' LEFT JOIN ' . DB_PREFIX . 'account as a ON (a.id=p.userId)' . ' WHERE p.inscription_valide="0";';
     $prep = $db->prepare($query);
     $prep->executePlus($db, __FILE__, __LINE__);
     $arrAll = $prep->fetchAll();
     $prep->closeCursor();
     $prep = NULL;
     foreach ($arrAll as &$arrInscr) {
         //Accepter l'inscription
         if ($_POST['inscr_' . $arrInscr['id']] == 'ok') {
             //Activer le perso
             $query = 'UPDATE ' . DB_PREFIX . 'perso' . ' SET `inscription_valide`="1",' . ' `pa` = `pamax`,' . ' `lieu`=:lieu_depart' . ' WHERE id = :id' . ' LIMIT 1;';
             $prep = $db->prepare($query);
             $prep->bindValue('id', $arrInscr['id']);
             $prep->bindValue('lieu_depart', LIEU_DEPART);
             $prep->executePlus($db, __FILE__, __LINE__);
             $prep->closeCursor();
             $prep = NULL;
             //Ajouter le message d'accueil dans le HE
             $query = 'SELECT db_param' . ' FROM ' . DB_PREFIX . 'item_db' . ' WHERE db_id=9' . ' LIMIT 1;';
             $prep = $db->prepare($query);
             $prep->executePlus($db, __FILE__, __LINE__);
             $arr = $prep->fetch();
             $prep->closeCursor();
             $prep = NULL;
             Member_He::add('Douanier', $arrInscr['id'], 'msg', stripslashes($arr['db_param']));
             //Ajouter&equiper les items de bienvenu
             $query = 'SELECT db_id, db_resistance' . ' FROM `' . DB_PREFIX . 'item_db`' . ' WHERE `db_id` IN(309, 310, 311);';
             $prep = $db->prepare($query);
             $prep->executePlus($db, __FILE__, __LINE__);
             $arrAll = $prep->fetchAll();
             $prep->closeCursor();
             $prep = NULL;
             $query = 'INSERT INTO `' . DB_PREFIX . 'item_inv`' . ' (`inv_id`,	`inv_dbid`,	`inv_persoid`,' . ' `inv_equip`,`inv_qte`,	`inv_resistance`)' . ' VALUES' . ' (' . ' NULL, 	:db_id, 	:persoId,' . ' "1", 	1,			:resistance' . ' );';
             $prep = $db->prepare($query);
             foreach ($arrAll as &$arr) {
                 $prep->bindValue('db_id', $arr['db_id'], PDO::PARAM_INT);
                 $prep->bindValue('persoId', $arrInscr['id'], PDO::PARAM_INT);
                 $prep->bindValue('resistance', $arr['db_resistance'], PDO::PARAM_INT);
                 $prep->executePlus($db, __FILE__, __LINE__);
             }
             $prep->closeCursor();
             $prep = NULL;
             //Envoie du email :
             $tpl->set('COMMENTAIRE', $_POST['inscr_commentaire_' . $arrInscr['id']]);
             $tpl->set('MJ_EMAIL', $mj->getEmail());
             $MSG = $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Mj/emailPersoAccepte.htm', __FILE__, __LINE__);
             mail($arrInscr['email'], "Cybercity 2034", $MSG, "From: robot@cybercity2034.com\n" . "MIME-Version: 1.0\n" . "Content-type: text/html; charset=iso-8859-1\n");
         }
         //Refuser l'inscription
         if ($_POST['inscr_' . $arrInscr['id']] == 'mod') {
             //Rendre le perso modifiable
             $query = 'UPDATE ' . DB_PREFIX . 'perso' . ' SET inscription_valide="mod"' . ' WHERE id = :persoId' . ' LIMIT 1;';
             $prep = $db->prepare($query);
             $prep->bindValue('persoId', $arrInscr['id'], PDO::PARAM_INT);
             $prep->executePlus($db, __FILE__, __LINE__);
             $prep->closeCursor();
             $prep = NULL;
             //Ajouter un message dans le HE (qui sera affiché en haut de la page de modification
             Member_He::add($mj->getNom(), $arrInscr['id'], 'inscription', $_POST['inscr_commentaire_' . $arrInscr['id']]);
             //Envoie du email :
             $tpl->set('COMMENTAIRE', $_POST['inscr_commentaire_' . $arrInscr['id']]);
             $tpl->set('MJ_EMAIL', $mj->getEmail());
             $MSG = $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Mj/emailPersoRefuse.htm', __FILE__, __LINE__);
             mail($arrInscr['email'], "Cybercity 2034", $MSG, "From: robot@cybercity2034.com\n" . "MIME-Version: 1.0\n" . "Content-type: text/html; charset=iso-8859-1\n");
         }
         //Supprimer l'inscription
         if ($_POST['inscr_' . $arrInscr['id']] == 'suppr') {
             //Supprimer le perso
             Mj_Perso_Del::delete($arrInscr['id'], $mj->getNom());
             //Redonner la chance d'effectuer une inscription
             $query = 'UPDATE ' . DB_PREFIX . 'account' . ' SET auth_creation_perso= auth_creation_perso+1' . ' WHERE id=:accountId' . ' LIMIT 1;';
             $prep = $db->prepare($query);
             $prep->bindValue('accountId', $arrInscr['aid'], PDO::PARAM_INT);
             $prep->executePlus($db, __FILE__, __LINE__);
             $prep->closeCursor();
             $prep = NULL;
             //Envoie du email :
             $tpl->set('COMMENTAIRE', $_POST['inscr_commentaire_' . $arrInscr['id']]);
             $tpl->set('MJ_EMAIL', $mj->getEmail());
             $MSG = $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Mj/emailPersoSupprime.htm', __FILE__, __LINE__);
             mail($arrInscr['email'], "Cybercity 2034", $MSG, "From: robot@cybercity2034.com\n" . "MIME-Version: 1.0\n" . "Content-type: text/html; charset=utf-8\n");
         }
     }
 }
Exemplo n.º 29
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__);
     }
 }
Exemplo n.º 30
0
 public static function generatePage(&$tpl, &$session, &$account, &$perso)
 {
     //Valider si le personnage a été validé
     if (!$perso->isInscriptionValide()) {
         return fctErrorMSG('Votre personnage ' . $perso->getNom() . ' n\'a pas encore été validé par un MJ.', '?m=News', null, false);
     }
     //Valider si le personnage est non-bloqué
     if ($perso->isBloque()) {
         return fctErrorMSG('Votre personnage ' . $perso->getNom() . ' a été bloqué.', '?m=News', null, false);
     }
     //Préparer le tableau d'information
     try {
         $tpl->set('id', $perso->getId());
         //Utile pour éviter de s'auto-renommer
         $tpl->set('nom', $perso->getNom());
         $tpl->set('pa', $perso->getPa());
         $tpl->set('paMax', $perso->getPaMax());
         $tpl->set('pn', $perso->getPn());
         $tpl->set('lieu', $perso->getLieu()->getNom());
         //Peut lancer une exception
         $tpl->set('pv', $perso->getPv());
         $tpl->set('pvMax', $perso->getPvMax());
         $tpl->set('argent', fctCreditFormat($perso->getCash()));
         $tpl->set('pr', $perso->getPr());
         $tpl->set('prmax', $perso->getPrMax());
         $tpl->set('membre', $account->getMemberLevelTxt() . '<br />reste: ' . $account->getMemberRestant() . " jour(s)");
         $tpl->set('MP_LVL', $account->getMemberLevel());
         $tpl->set('actionImmediate', $perso->getCurrentAction());
         if ($perso->isEnergetique()) {
             $tpl->set('PA_COLORCLASS', 'txtStyle_valeur');
         } elseif ($perso->isFaible()) {
             $tpl->set('PA_COLORCLASS', 'txtStyle_risque');
         } else {
             $tpl->set('PA_COLORCLASS', 'txtStyle_critique');
         }
         if ($perso->isAutonome()) {
             $tpl->set('PV_COLORCLASS', 'txtStyle_valeur');
         } elseif ($perso->isConscient()) {
             $tpl->set('PV_COLORCLASS', 'txtStyle_risque');
         } else {
             $tpl->set('PV_COLORCLASS', 'txtStyle_critique');
         }
         if ($perso->isRassasie()) {
             $tpl->set('PN_COLORCLASS', 'txtStyle_valeur');
         } elseif ($perso->isFaim()) {
             $tpl->set('PN_COLORCLASS', 'txtStyle_critique');
         } else {
             $tpl->set('PN_COLORCLASS', 'txtStyle_risque');
         }
         if ($perso->isLege()) {
             $tpl->set('PR_COLORCLASS', 'txtStyle_valeur');
         } else {
             $tpl->set('PR_COLORCLASS', 'txtStyle_risque');
         }
         $tpl->set('PERSO', $perso);
         if ($account->getMemberLevel() != 3) {
             $tpl->set('SHOW_PUB', true);
         }
     } catch (Exception $e) {
         //throw $e;
         return fctErrorMSG('Votre personnage ' . $perso->getNom() . ' est dans un lieu qui semble ne pas exister (' . $e->getMessage() . '). Contactez un MJ via le forum.', '?m=News', null, false);
     }
     //Préparer le menu d'action
     $tpl->set('MENU_ITEMS', $perso->generateActionMenu());
     $code = $tpl->fetch($account->getSkinRemotePhysicalPath() . '/html/Member/menu_actions.htm');
     $tpl->set('PAGE_MENU_ACTIONS', $code);
     //Préparer le he [Entête]
     //$he = new Member_He($account, $perso);
     $from = isset($_GET['hepage']) ? $_GET['hepage'] : 1;
     $tpl->set('HE_PAGE', $from);
     $tpl->set('HE_SIZE', $perso->getHeMsgCount());
     $tpl->set('HE_MAXSPACE', Member_He::spacePerMembership($account->getMemberLevel()));
     $tpl->set('MP', $account->getMemberLevel());
     $tpl->set('HE_MSGPERPAGE', $account->getMsgPerPage());
     $code = $tpl->fetch($account->getSkinRemotePhysicalPath() . '/html/Member/he_header.htm');
     $tpl->set('PAGE_HE_HEADER', $code);
     //Préparer le he [Liste des messages]
     $mpp = $account->getMsgPerPage();
     $heMsg = Member_He::listMessages($perso, ($from - 1) * $mpp, $mpp);
     $code = '';
     $i = $account->getMsgPerPage() + 1;
     foreach ($heMsg as $msg) {
         $tpl->set('MSG', $msg);
         $tpl->set('ITEM_NO_ON_PAGE', --$i);
         $code .= $tpl->fetch($account->getSkinRemotePhysicalPath() . '/html/Member/he_item.htm');
     }
     $tpl->set('PAGE_HE_MESSAGES', $code);
     //Changement de l'action immédiate
     if (isset($_POST['saveActionImmediate'])) {
         $perso->setCurrentAction($_POST['actionImmediate']);
         $tpl->set('actionImmediate', $_POST['actionImmediate']);
     }
     //Retourner le template complété/rempli
     return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/index.htm', __FILE__, __LINE__);
 }