public static function generatePage(&$tpl, &$session, &$account, &$perso) { $dbMgr = DbManager::getInstance(); //Instancier le gestionnaire $db = $dbMgr->getConn('game'); //Demander la connexion existante //Vérifier l'état du perso if (!$perso->isAutonome()) { die('00|' . rawurlencode('Votre n\'êtes pas en état d\'effectuer cette action.')); } //Vérifier si une carte à été sélectionnée if (!isset($_POST['carteid'])) { die('01|' . rawurlencode('Aucune carte sélectionnée.')); } $tpl->set('CARD_ID', $_POST['carteid']); //Valider si le NIP est fourni if (!isset($_POST['nip'])) { die('02|' . rawurlencode('Aucun NIP spécifiée.')); } $tpl->set('NIP', $_POST['nip']); //Créer la carte + compte $query = 'SELECT * ' . ' FROM `' . DB_PREFIX . 'banque_cartes`' . ' LEFT JOIN `' . DB_PREFIX . 'banque_comptes` ON (`compte_banque` = `carte_banque` AND `compte_compte` = `carte_compte`)' . ' WHERE `carte_id` = :carteId' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':carteId', $_POST['carteid'], PDO::PARAM_INT); $prep->execute($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; //Valider si la carte existe if ($arr === false) { die('03|' . rawurlencode('Cette carte à été supprimée ou n\'existe pas.')); } //Créer le compte bancaire $compte = new Member_BanqueCompte($arr); //Créer la carte $carte = $compte->getCarte($_POST['carteid'], $arr); $tpl->set('COMPTE', $compte->getNoBanque() . '-' . $compte->getNoCompte()); //Valider si la carte est active ou non if (!$carte->isValid()) { die('03|' . rawurlencode('Cette carte est actuellement désactivée.')); } //Formater le montant pour qu'il soit au bon format $_POST['montant'] = str_replace(',', '.', $_POST['montant']); $montant = round($_POST['montant'], 2); //Valider le montant d'argent à retirer if (!is_numeric($montant) || $montant <= 0) { die('04|' . rawurlencode('Montant invalide.')); } //Valider si le perso possède le montant qu'il retire if ($compte->getCash() < $montant && $compte->getCash() != -1) { die('05|' . rawurlencode('Vous ne pouvez pas retirer plus que le solde de votre compte.')); } //Retirer l'argent du compte $compte->changeCash('-', $montant); $compte->setCash(); //Ajouter l'argent au perso $perso->changeCash('+', $montant); $perso->setCash(); //Retirer les PA au perso $perso->changePa('-', 1); $perso->setPa(); //Ajouter la transaction à l'historique $compte->add_bq_hist('', 'RGUI', $montant, 0); //Confirmer les modifications avec les informations sur les changements die($_POST['id'] . '|OK|' . $compte->getCash() . '|' . $perso->getCash() . '|' . $perso->getPa()); }
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_Lieu_Boutique'; //Déclaration des variables pour cette action $pacost = array(); $pacost['achat'] = 5; $pacost['nego'] = 20; $pacost['vol'] = 40; $msg = ''; //Vérifier l'état du perso if (!$perso->isAutonome()) { return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl); } //Valider si le lieu actuel est une boutique if (!$perso->getLieu()->isBoutique()) { return fctErrorMSG('Ce lieu n\'est pas une boutique.'); } //Valider si le mode d'achat à été sélectionn. if (!isset($_POST['achat_type'])) { return fctErrorMSG('Vous n\'avez pas sélectionné le mode d\'achat.', $errorUrl); } //Valider si le mode d'achat est possible: if ($_POST['achat_type'] != 'achat' && $_POST['achat_type'] != 'nego' && $_POST['achat_type'] != 'vol') { return fctErrorMSG('Le mode d\'achat est invalide.', $errorUrl); } //Valider si le type de paiement à été sélectionné (dans le cas ou on ne commet pas un vol) if (!isset($_POST['pay_type']) && $_POST['achat_type'] != 'vol') { return fctErrorMSG('Vous n\'avez pas sélectionné le mode de paiement.', $errorUrl); } //Valider si le perso possède assez de PA if ($perso->getPa() <= $pacost[$_POST['achat_type']]) { return fctErrorMSG('Vous n\'avez pas assez de PA.', $errorUrl); } //Variables des totaux $prTotal = 0; $prixTotal = 0; //Achat $itemsList = ''; //Achat $prixVenteTotal = 0; //Vente $itemsVenteList = ''; //Vente $marchandage = false; //... Des items à vendre $i = 0; $vente = false; while ($item = $perso->getInventaire($i++)) { if (isset($_POST['itemv' . $item->getInvId()])) { //Valider que le perso possède l'item $found = false; $b = 0; while ($bitem = $perso->getLieu()->getBoutiqueInventaire($b++)) { if ($bitem->getDbId() == $item->getDbId()) { $found = true; break; } } if (!$found) { return fctErrorMSG('Vous tentez de vendre un item que la boutique ne veux pas.', $errorUrl); } //Valider si la quantité est possible $qte = $_POST['itemv' . $item->getInvId()]; $qte = round($qte); if (!is_numeric($qte) || $qte < 0) { return fctErrorMSG('Les quantités doivent être numérique et supérieures à zéro.', $errorUrl); } if ($qte > $item->getQte()) { return fctErrorMSG('Vous ne pouvez vendre plus d\'item que vous n\'avez.', $errorUrl); } if ($qte > 0) { //Calculer les totaux $prTotal -= $item->getPr(); $prixVenteTotal += $bitem->getBoutiquePrixAchat() * $qte; //Générer la liste des items pour l'inclure dans le message de conclusion $itemsVenteList .= ($itemsVenteList != '' ? ',' : '') . $qte . 'x[i]' . $item->getNom() . '[/i]'; $vente = true; } } } //Valider les items ... à acheter $i = 0; $achat = false; while ($item = $perso->getLieu()->getBoutiqueInventaire($i++)) { if (isset($_POST['itema' . $item->getInvId()])) { $qte = $_POST['itema' . $item->getInvId()]; $qte = round($qte); //Valider si la quantité est possible if (!is_numeric($qte) || $qte < 0) { return fctErrorMSG('Les quantités doivent être numérique et supérieures à zéro.', $errorUrl); } if ($qte > $item->getQte()) { return fctErrorMSG('Vous ne pouvez acheter plus d\'items qu\'il y en a de proposés.', $errorUrl); } if ($qte > 0) { //Calculer les totaux $prTotal += $item->getPr(); $prixTotal += $item->getBoutiquePrixVente() * $qte; //Générer la liste des items pour l'inclure dans le message de conclusion $itemsList .= ($itemsList != '' ? ',' : '') . $qte . 'x[i]' . $item->getNom() . '[/i]'; $achat = true; } } } //Valider si le perso possède assez de PR disponible if ($perso->getPr() <= $perso->getPrMax() && $perso->getPrMax() - $perso->getPr() < $prTotal) { return fctErrorMSG('Vous n\'avez pas assez de PR. (' . $prTotal . ' requis, ' . ($perso->getPrMax() - $perso->getPr()) . ' disponible)'); } //Valider si le joueur a sélectionné des items à vendre ou à achaté // ( éviter le cas ou il clique 'achat' sans rien sélectionner ) if ($_POST['buy'] && !$vente && !$achat) { return fctErrorMSG('Vous n\'avez sélectionné aucun objet.', $errorUrl); } //Valider si la personne tente de vendre et de voler en meme temps //(elle ne recevrait pas l'argent de ses ventes) if ($vente && $_POST['achat_type'] == 'vol') { return fctErrorMSG('Vous ne pouvez pas vendre et voler dans la même action.', $errorUrl); } if ($_POST['achat_type'] === 'vol' && !$perso->getLieu()->canVol()) { return fctErrorMSG('Le vol n\'est pas envisageable dans ce lieu.', $errorUrl); } if ($achat || $vente) { switch ($_POST['achat_type']) { case 'achat': if ($achat) { $msg .= "Vous effectuez l'achat de " . $itemsList . "\n"; $vol = false; $achat = true; } if ($vente) { $msg .= "Vous effectuez la vente de " . $itemsVenteList . "\n"; $vol = false; $vente = true; } $msg .= $perso->setStat(array('INT' => '+01', 'FOR' => '-01')); break; case 'nego': if ($achat) { $msg .= "Vous tentez la négociation pour acheter " . $itemsList . "\n"; $vol = false; $achat = true; } if ($vente) { $msg .= "Vous tentez la négociation pour vendre " . $itemsVenteList . "\n"; $vol = false; $vente = true; } $chances_reussite = $perso->getChancesReussite('MRCH'); $de = rand(0, 100); if (DEBUG_MODE) { echo "<br />" . $de . "<" . $chances_reussite; } if ($de < $chances_reussite) { //Reussite $marchandage = true; //Calculer le rabais $compId = $perso->convCompCodeToId('MRCH'); $level = $perso->getCompRealLevel($compId); $rabais = rand(1, $level * 5 + 5); //De 1 à 65% $prixTotal *= (100 - $rabais) / 100; $prixVenteTotal *= 1 + (100 - $rabais) / 100; $msg .= " et vous arrivez à obtenir une réduction de " . round($rabais, 2) . "%, soit un prix d'achat de " . $prixTotal . GAME_DEVISE . " et un prix de vente de " . $prixVenteTotal . GAME_DEVISE . ".\n"; $msg .= $perso->setStat(array('INT' => '+02', 'DEX' => '-01', 'FOR' => '-01')); } else { $msg .= $perso->setStat(array('INT' => '+01', 'FOR' => '-01')); $msg .= " mais c'est un échec.\n"; } $msg .= $perso->setComp(array('MRCH' => rand(1, 3))); break; case 'vol': $msg .= "Vous tentez le vol de " . $itemsList; $vol = true; $chances_reussite = $perso->getChancesReussite('PCKP'); $de = rand(0, 100); echo "<br />" . $de . "<" . $chances_reussite; if ($de < $chances_reussite) { //Reussite $achat = true; $prixTotal = 0; $msg .= " avec succès."; } else { $achat = false; $msg .= " mais c'est un échec."; } $msg .= $perso->setComp(array('PCKP' => rand(1, 3))); break; } } $clientPay = $prixTotal >= $prixVenteTotal; //True = le client paie, False = la boutique paie. if ($clientPay) { $differencePrix = $prixTotal - $prixVenteTotal; } else { $differencePrix = $prixVenteTotal - $prixTotal; } //Vérifier les fond disponible selon le mode de paiement if ($achat && !$vol || $vente) { if ($_POST['pay_type'] == 'cash') { //Valider le montant if ($clientPay && $perso->getCash() < $differencePrix) { return fctErrorMSG('Vous n\'avez pas assez d\'argent pour effectuer cette transaction.', $errorUrl); } if (!$clientPay && $perso->getLieu()->getBoutiqueCash() < $differencePrix) { return fctErrorMSG('La boutique ne possède pas suffisamment pour vous acheter pour vous payer ' . $differencePrix . GAME_DEVISE . '.', $errorUrl); } //Débiter le perso $perso->changeCash('+', $prixVenteTotal); $perso->changeCash('-', $prixTotal); $perso->setCash(); //Payer la caisse de la boutique $perso->getLieu()->changeBoutiqueCash('+', $prixTotal); $perso->getLieu()->changeBoutiqueCash('-', $prixVenteTotal); $perso->getLieu()->setBoutiqueCash(); } else { //Valider si une carte a été sélectionnée if (!isset($_POST['cardid'])) { return fctErrorMSG('Vous n\'avez pas sélectionné de carte de guichet.', $errorUrl); } //Valider si un nip a été saisi if (!isset($_POST['nip']) || empty($_POST['nip'])) { return fctErrorMSG('Vous n\'avez pas entré de NIP.', $errorUrl); } //Instancier la carte de guichet sélectionnée $i = 0; while ($item = $perso->getInventaire($i++)) { if ($item instanceof Member_ItemCartebanque) { if ($item->getInvId() == $_POST['cardid']) { $CARTE = $item; break; } } } //Valider si la carte (item) a été trouvée en inventaire if (!isset($CARTE)) { return fctErrorMSG('Carte de guichet introuvable.', $errorUrl); } //Trouver la carte et son accès $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_cartes' . ' WHERE carte_id=:carteId;'; $prep = $db->prepare($query); $prep->bindValue(':carteId', $item->getNoCarte(), PDO::PARAM_INT); $prep->executePlus($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; //Valider si la carte est associée à un compte if ($arr === false) { return fctErrorMSG('Carte de guichet est désactivée.', $errorUrl); } //Instancier la carte $CARTE_ACCESS = new Member_BanqueCarte($arr); //Valider si la carte est ... valide if (!$CARTE_ACCESS->isValid()) { return fctErrorMSG('Carte de guichet est désactivée pour le moment.', $errorUrl); } //Valider si le NIP est correcte if ($CARTE_ACCESS->getNip() != $_POST['nip']) { return fctErrorMSG('NIP est erronné.', $errorUrl); } //Rechercher le compte relié à la carte $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_cartes' . ' LEFT JOIN ' . DB_PREFIX . 'banque_comptes ON (compte_banque = carte_banque AND compte_compte = carte_compte)' . ' WHERE carte_id =:carteId' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':carteId', $item->getNoCarte(), PDO::PARAM_INT); $prep->executePlus($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; //Valider si le compte existe if ($arr === false) { return fctErrorMSG('Le compte est innexistant.', $errorUrl); } //Instancier le compte $COMPTE = new Member_BanqueCompte($arr); //Valider si le compte possède assez d'argent pour payer le total if ($clientPay && $COMPTE->getCash() < $differencePrix && $COMPTE->getCash() != -1) { return fctErrorMSG('Compte sans fond.', $errorUrl); } //Rechercher le compte bancaire de la boutique $query = 'SELECT * ' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE compte_banque=:banque' . ' AND compte_compte=:compte' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':banque', $perso->getLieu()->getBoutiqueNoBanque(), PDO::PARAM_STR); $prep->bindValue(':compte', $perso->getLieu()->getBoutiqueNoCompte(), PDO::PARAM_STR); $prep->executePlus($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; //Valider si le compte de la boutique existe if ($arr === false) { return fctErrorMSG('Le compte de la boutique est innexistant.', $errorUrl); } //Instancier le compte bancaire de la boutique $COMPTE_BOUTIQUE = new Member_BanqueCompte($arr); //Valider si le compte possède assez d'argent pour payer le total if (!$clientPay && $COMPTE_BOUTIQUE->getCash() < $differencePrix) { return fctErrorMSG('Le compte de la boutique manque de fond.', $errorUrl); } //Débiter le compte du perso $COMPTE->changeCash($clientPay ? '-' : '+', $differencePrix); $COMPTE->setCash(); $COMPTE->add_bq_hist($COMPTE_BOUTIQUE->getNoBanque() . '-' . $COMPTE_BOUTIQUE->getNoCompte(), '', 'SDPD', $differencePrix); //Payer le compte de la boutique $COMPTE_BOUTIQUE->changeCash($clientPay ? '+' : '-', $differencePrix); $COMPTE_BOUTIQUE->setCash(); $COMPTE_BOUTIQUE->add_bq_hist($COMPTE->getNoBanque() . '-' . $COMPTE->getNoCompte(), 'RCPD', 0, $differencePrix); } } //TOUT EST PAYÉ, IL FAUT MAINTENANT TRANSFÉRER CEUX-CI CORRECTEMENT. if ($achat) { $i = 0; while ($item = $perso->getLieu()->getBoutiqueInventaire($i++)) { if (isset($_POST['itema' . $item->getInvId()])) { $qte = $_POST['itema' . $item->getInvId()]; if ($qte > 0) { $item->transfererVersPerso($perso, $qte); } } } //Historique d'achat if (!$vol) { $perso->getLieu()->addBoutiqueHistorique('vente', $prixTotal, $itemsList, $marchandage, $_POST['pay_type'] != 'cash'); } } if ($vente) { $i = 0; while ($item = $perso->getInventaire($i++)) { if (isset($_POST['itemv' . $item->getInvId()])) { $qte = $_POST['itemv' . $item->getInvId()]; if ($qte > 0) { $item->transfererVersBoutique($perso->getLieu(), $qte); } } } //Historique de vente $perso->getLieu()->addBoutiqueHistorique('achat', $prixVenteTotal, $itemsVenteList, $marchandage, $_POST['pay_type'] != 'cash'); } $perso->refreshInventaire(); //Modifier les PA if ($achat) { $perso->changePa('-', $pacost[$_POST['achat_type']]); $perso->setPa(); } //Copier le message dans les HE if (!empty($msg)) { Member_He::add(NULL, $perso->getId(), 'boutique', $msg); } //Rafraichir le HE return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__); }
/** Envoie un message à un téléphone * @param string $callTo Numéro auquel le coup de téléphone est passé au format XXX-XXXX * @param string $message Message à envoyer * @param bool $anonyme Si l'appel est envoyé de facon anonyme ou non */ public function envoyerMessage($callTo, $message, $anonyme) { $dbMgr = DbManager::getInstance(); //Instancier le gestionnaire $db = $dbMgr->getConn('game'); //Demander la connexion existante //Récup des info du téléphone du destinataire $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'item_inv' . ' LEFT JOIN ' . DB_PREFIX . 'item_db ON (db_id = inv_dbid)' . ' WHERE inv_notel=:noTel' . ' AND db_type="telephone"' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':noTel', $callTo, PDO::PARAM_STR); $prep->execute($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; //Valider si le téléphone existe if ($arr === false) { throw new GameException('Le numéro que vous avez composé n\'est pas en service.'); } //Instancier le téléphone $tel_distant = new Member_ItemTelephone($arr); //Récup des info sur le compte en banque de l'appeleur $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE compte_banque=:banque' . ' AND compte_compte=:compte' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':banque', $this->getNobanque(), PDO::PARAM_STR); $prep->bindValue(':compte', $this->getNocompte(), PDO::PARAM_STR); $prep->execute($db, __FILE__, __LINE__); $arrBanque = $prep->fetch(); $prep->closeCursor(); $prep = NULL; //Valider si le compte bancaire existe if ($arrBanque === false) { throw new GameException('Le numéro que vous avez composé n\'est pas en service (compte introuvable)'); } //Instancier le compte bancaire $compteAppeleur = new Member_BanqueCompte($arrBanque); //Valider si le mode anonyme est demandé & possible if ($anonyme && $tel_distant->getAnonymeCapable()) { throw new GameException('Mode anonyme impossible avec cet appareil.'); } //destinataire n'a pas d'afficheur if ($tel_distant->getTypeAffichage() == 0) { $entete_message_dest = 'Votre téléphone ne possède pas d\'afficheur. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]'; } elseif ($tel_distant->getTypeAffichage() != 2 && $this->getAnonymeCapable()) { $entete_message_dest = 'Le numéro de votre interlocuteur est caché. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]'; } elseif ($tel_distant->getTypeAffichage() == 2 && $this->getAnonymeCapable()) { $entete_message_dest = 'Appel provenant du #[i]' . $this->getNotel() . '[/i]. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]'; } elseif ($tel_distant->getTypeAffichage() != 0 && !$this->getAnonymeCapable()) { $entete_message_dest = 'Appel provenant du #[i]' . $this->getNotel() . '[/i]. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]'; } //Si le compte de l'expéditeur contient moins que le cout de l'appel ou si aucun compte n'est associé au téléphone if ($compteAppeleur->getcash() < $this->getPrixAppel() || $this->getNotel() == 0) { throw new GameException('Vous n\'avez pas assez de crédit, ou alors aucun compte n\'est associé à ce téléphone.'); } //Si le téléphone du destinataire est dans un sac et/ou n'est pas possédé par un personnage $telDistantProprioId = $tel_distant->getIdProprio(); //Contournement d'un bug de Can't write in this context. if (empty($telDistantProprioId)) { if (!empty($arr['inv_itemid'])) { $query = 'SELECT inv_persoid' . ' FROM ' . DB_PREFIX . 'item_inv' . ' WHERE inv_id=:sacid' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':sacid', $arr['inv_itemid'], PDO::PARAM_INT); $prep->execute($db, __FILE__, __LINE__); $arrSac = $prep->fetch(); $prep->closeCursor(); $prep = NULL; if ($arrSac != NULL && !empty($arrSac['inv_persoid'])) { Member_He::add('System', $arrSac['inv_persoid'], 'Telephone', 'Un téléphone a sonné dans votre sac, vous n\'avez pas eu le temps de répondre.'); } } throw new GameException('Aucune réponse, réessayer plus tard.'); } //Retrait de l'argent du compte téléphonique $compteAppeleur->changeCash('-', $this->getPrixAppel()); $compteAppeleur->setCash(); //On le cout d'appel met dans le fond commun $query = 'UPDATE `' . DB_PREFIX . 'banque_comptes`' . ' SET `compte_cash`=`compte_cash`+:cash' . ' WHERE `compte_id`=1;'; $prep = $db->prepare($query); $prep->bindValue(':cash', $this->getPrixAppel(), PDO::PARAM_INT); $prep->execute($db, __FILE__, __LINE__); $prep->closeCursor(); $prep = NULL; //mise du message dans les HE des personnes impliquées $destMsgId = Member_He::add('System', $telDistantProprioId, 'Telephone', $entete_message_dest . '<hr />' . $message); $expMsgId = Member_He::add('System', $this->getIdProprio(), 'Telephone', $message); //log MJ: on enregistre le message qu'a reçu (et reçu dans son HE) le destinataire $query = 'INSERT INTO ' . DB_PREFIX . 'log_telephone' . ' (' . '`id_he_exp`, `id_he_dest`, `date`, `from_tel`, `from_persoid`, `to_tel`, `to_persoid`' . ' )' . ' VALUES' . ' (' . ' :expId, :destId, :date, :fromTel, :fromId, :toTel, :toId' . ' );'; $prep = $db->prepare($query); $prep->bindValue(':expId', $expMsgId, PDO::PARAM_INT); $prep->bindValue(':destId', $destMsgId, PDO::PARAM_INT); $prep->bindValue(':date', time(), PDO::PARAM_INT); $prep->bindValue(':fromTel', $this->getNotel(), PDO::PARAM_STR); $prep->bindValue(':fromId', $this->getIdProprio(), PDO::PARAM_INT); $prep->bindValue(':toTel', $callTo, PDO::PARAM_STR); $prep->bindValue(':toId', $telDistantProprioId, PDO::PARAM_INT); $prep->execute($db, __FILE__, __LINE__); $prep->closeCursor(); $prep = NULL; }
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 $actionPa = 3; $cout_ouverture = 7500; if ($perso->getPa() <= $actionPa) { return fctErrorMsg('Vous n\'avez pas assez de PA pour effectuer cette action.'); } if (!isset($_POST['url'])) { return fctErrorMsg('Paramètre requis manquant.'); } //Valider si le joueur à accès à Internet if (Member_Action_Item_Navigateur::checkAccess($perso) === false) { return fctErrorMSG('Vous n\'avez pas accès à Internet.'); } //Vérifier l'état du perso if (!$perso->isConscient()) { die('01|' . 'Votre n\'êtes pas en état d\'effectuer cette action.'); } if ($perso->getPa() < $actionPa) { die('02|' . 'Vous n\'avez pas assez de PA pour effectuer cette action.'); } if (!preg_match('/^[A-Za-z0-9\\.-_]+$/', $_POST['url'], $matches)) { die('03|' . 'L\'URL dU site est invalide.'); } if (!preg_match('/^([0-9]{4})-([0-9]{4}-[0-9]{4}-[0-9]{4})-([0-9]+)$/', $_POST['no'], $matches)) { die('04|' . 'Le # de la carte est invalide.'); } $carte_banque = $matches[1]; $carte_compte = $matches[2]; $carte_id = $matches[3]; $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_cartes' . ' WHERE carte_banque=:carteBanque' . ' AND carte_compte=:carteCompte' . ' AND carte_id =:carteId' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':carteBanque', $carte_banque, PDO::PARAM_STR); $prep->bindValue(':carteCompte', $carte_compte, PDO::PARAM_STR); $prep->bindValue(':carteId', $carte_id, PDO::PARAM_INT); $prep->executePlus($db, __FILE__, __LINE__); $carte = $prep->fetch(); $prep->closeCursor(); $prep = NULL; if ($carte === false) { die('05|' . 'Cette carte est innexistante.'); } if ($carte['carte_valid'] == 0) { die('06|' . 'Cette carte a été désactivée.'); } if ($carte['carte_nip'] != $_POST['nip']) { die('07|' . 'NIP erroné.'); } //Valider le montant du compte associé à la carte $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE compte_banque=:carteBanque' . ' AND compte_compte=:carteCompte;'; $prep = $db->prepare($query); $prep->bindValue(':carteBanque', $carte_banque, PDO::PARAM_STR); $prep->bindValue(':carteCompte', $carte_compte, PDO::PARAM_STR); $prep->executePlus($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; if ($arr === false) { die('08|' . 'Le compte associé à la carte a été fermé.'); } $compte = new Member_BanqueCompte($arr); if ($compte->getCash() < $cout_ouverture) { die('09|' . 'Compte sans fond.'); } //Vérifier si l'URL existe déjà $query = 'SELECT id' . ' FROM ' . DB_PREFIX . 'sitesweb' . ' WHERE url=:url;'; $prep = $db->prepare($query); $prep->bindValue(':url', $_POST['url'], PDO::PARAM_STR); $prep->executePlus($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; if ($arr !== false) { die('10|' . 'Cette URL existe déjà, veuillez en choisir une autre.'); } //Tout est ok, Créer le site !!!!! $perso->changePa('-', $actionPa); $perso->setPa(); $compte->changeCash('-', $cout_ouverture); $compte->setCash(); $compte->add_bq_hist('', 'WWWA', $cout_ouverture); $query = 'INSERT INTO ' . DB_PREFIX . 'sitesweb' . ' (`url`, `titre`, `acces`)' . ' VALUES' . ' (:url, :titre, "pub");'; $prep = $db->prepare($query); $prep->bindValue(':url', $_POST['url'], PDO::PARAM_STR); $prep->bindValue(':titre', $_POST['titre'], PDO::PARAM_STR); $prep->executePlus($db, __FILE__, __LINE__); $prep->closeCursor(); $prep = NULL; $siteid = $db->lastInsertId(); //Créer l'accès admin au site $query = 'INSERT INTO ' . DB_PREFIX . 'sitesweb_acces' . ' (`site_id`, `user`, `pass`, `accede`, `poste`, `modifier`, `admin`)' . ' VALUES' . ' (:siteId, :user, :pass, "1", "1", "1", "1");'; $prep = $db->prepare($query); $prep->bindValue(':siteId', $siteid, PDO::PARAM_INT); $prep->bindValue(':user', $_POST['user'], PDO::PARAM_STR); $prep->bindValue(':pass', $_POST['pass'], PDO::PARAM_STR); $prep->executePlus($db, __FILE__, __LINE__); $prep->closeCursor(); $prep = NULL; die('OK|' . $perso->getPa() . '|' . $_POST['url']); //Tout est OK }
public static function cabineTelephoner(&$perso, &$numero_destinataire, &$message) { $dbMgr = DbManager::getInstance(); //Instancier le gestionnaire $db = $dbMgr->getConn('game'); //Demander la connexion existante $errorUrl = '?popup=1&m=Action_Lieu_TelephonerCabine'; //Récup des info du téléphone de l'appelé $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'item_inv' . ' LEFT JOIN ' . DB_PREFIX . 'item_db ON (db_id = inv_dbid)' . ' WHERE db_type="telephone"' . ' AND inv_notel=:noTel' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':noTel', $numero_destinataire, PDO::PARAM_STR); $prep->execute($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; $tel_distant = new Member_ItemTelephone($arr); //Si le téléphone n'existe pas if (empty($tel_distant)) { return fctErrorMSG('Numéro pas attribué.', $errorUrl); } $affichage_dest = $tel_distant->getTypeAffichage(); $lieu_perso = $perso->getLieu()->getNom(); //Entête selon le type d'affichage que possède l'utilisateur if ($affichage_dest == 2) { $entete_mess_dest = 'Appel provenant d\'une cabine téléphonique (' . $lieu_perso . '). '; } else { $entete_mess_dest = 'Votre téléphone ne possède pas d\'afficheur. '; } $entete_mess_dest .= 'Appel reçu sur le téléphone #' . $numero_destinataire; $id_destinataire = $tel_distant->getIdProprio(); $id_expediteur = $perso->getId(); $cout_appel = 2; $cash_exp = $perso->getCash(); //Valider si le personnage à assez d'argent en poche pour téléphoner de la cabine. if ($cash_exp < $cout_appel) { return fctErrorMSG('Vous n\'avez pas assez d\'argent pour passer cet appel.', $errorUrl); } //Valider si le téléphone est possédé par quelqu'un if ($id_destinataire === NULL) { return fctErrorMSG('Ca sonne occupé. Réessayer plus tard.', $errorUrl); } //Retrait du cash du portefeuille du gars $perso->changeCash('-', $cout_appel); $perso->setCash(); //Mise de l'argent sur le compte commun $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE compte_id=1' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->execute($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; if ($arr === false) { return fctErrorMSG('Le fond commun n\'existe plus. Contacter un MJ.', $errorUrl); } $compteFC = new Member_BanqueCompte($arr); $compteFC->changeCash('+', $cout_appel); $compteFC->setCash(); //Inscription de l'opération au fond commun $compteFC->add_bq_hist('', 'TELC', 0, $cout_appel); //Mise du message dans les HE des personnes impliquées $id_mess_he_dest = Member_He::add("Telephone", $id_destinataire, 'Telephone', $entete_mess_dest . "[sep]" . $message); $id_mess_he_exp = Member_He::add("Telephone", $id_expediteur, "Telephone", $message); //Log MJ $query = 'INSERT INTO ' . DB_PREFIX . 'log_telephone' . ' (`id_he_exp`, `id_he_dest`, `date`, `from_tel`, `from_persoid`, `to_tel`, `to_persoid`)' . ' VALUES(' . ' :fromMsgId,' . ' :toMsgId,' . ' UNIX_TIMESTAMP(),' . ' :lieu,' . ' :fromPersoId,' . ' :toNoTel,' . ' :toPersoId' . ' );'; $prep = $db->prepare($query); $prep->bindValue(':fromMsgId', $id_mess_he_exp, PDO::PARAM_INT); $prep->bindValue(':toMsgId', $id_mess_he_dest, PDO::PARAM_INT); $prep->bindValue(':lieu', $lieu_perso . '(Cabine)', PDO::PARAM_STR); $prep->bindValue(':fromPersoId', $id_expediteur, PDO::PARAM_INT); $prep->bindValue(':toNoTel', $numero_destinataire, PDO::PARAM_STR); $prep->bindValue(':toPersoId', $id_destinataire, PDO::PARAM_INT); $prep->execute($db, __FILE__, __LINE__); $prep->closeCursor(); $prep = NULL; }
public static function generatePage(&$tpl, &$session, &$account, &$perso) { $dbMgr = DbManager::getInstance(); //Instancier le gestionnaire $db = $dbMgr->getConn('game'); //Demander la connexion existante $errorUrl1 = '?popup=1&m=Action_Lieu_Guichet'; $errorUrl2 = '?popup=1&m=Action_Lieu_Guichet2'; $errorUrl3 = '?popup=1&m=Action_Lieu_Guichet3'; //Vérifier l'état du perso if (!$perso->isAutonome()) { return fctErrorMSG('Votre n\'êtes pas en état d\'effectuer cette action.', $errorUrl1); } //Vérifier si une carte à été sélectionnée if (!isset($_POST['carteid']) || !is_numeric($_POST['carteid'])) { return fctErrorMSG('Aucune carte sélectionnée.', $errorUrl1); } //Vérifier si un NIP a été saisie if (!isset($_POST['nip'])) { return fctErrorMSG('Aucun NIP spécifiée.', $errorUrl, array('carteid' => $_POST['carteid'])); } //Créer la carte + compte $query = 'SELECT *' . ' FROM `' . DB_PREFIX . 'banque_cartes`' . ' LEFT JOIN `' . DB_PREFIX . 'banque_comptes` ON (`compte_banque` = `carte_banque` AND `compte_compte` = `carte_compte`)' . ' WHERE `carte_id` = :carteId' . ' LIMIT 1;'; $prep = $db->prepare($query); $prep->bindValue(':carteId', $_POST['carteid'], PDO::PARAM_INT); $prep->execute($db, __FILE__, __LINE__); $arr = $prep->fetch(); $prep->closeCursor(); $prep = NULL; //Valider si la carte existe if ($arr === false) { fctBugReport('Cette carte n\'existe pas', array('perso' => $perso, 'query' => $query), __FILE__, __LINE__, __FUNCTION__, __CLASS__, __METHOD__); } //Créer le compte de banque $compte = new Member_BanqueCompte($arr); //Créer la carte bancaire $carte = $compte->getCarte($_POST['carteid'], $arr); //Valider si la carte est active ou non if (!$carte->isValid()) { return fctErrorMSG('Cette carte à été désactivée.', $errorUrl1); } //Placer les informations sur l'accès dans le template $tpl->set('CARD_ID', $_POST['carteid']); $tpl->set('NIP', $_POST['nip']); $tpl->set('COMPTE', $compte->getNoBanque() . '-' . $compte->getNoCompte()); //Valider le montant d'argent à retirer $montant = round($_POST['retrait'], 2); if (!is_numeric($montant) || $montant <= 0) { return fctErrorMSG('Montant invalide.', '?m=Action_Lieu_Guichet3', array('carteid' => $_POST['carteid'], 'nip' => $_POST['nip'])); } //Valider si le montant if ($compte->getCash() < $montant && $compte->getCash() != -1) { return fctErrorMSG('Tentative de retrait supérieur au montant maximal autorisé.', $errorUrl3, array('carteid' => $_POST['carteid'], 'nip' => $_POST['nip'])); } //Retirer l'argent du compte $compte->changeCash('-', $montant); $compte->setCash(); //Ajouter l'argent au perso $perso->changeCash('+', $montant); $perso->setCash(); //Retirer les PA au perso $perso->changePa('-', 1); $perso->setPa(); //Ajouter le message à l'historique bancaire Member_BanqueCompte::addHist($noCompte, '', 'RGUI', $montant, 0, $compte->getCash() - $montant); //Copier le message dans les HE Member_He::add('', $perso->getId(), 'parler', "Vous effectuez un retrait de " . fctCreditFormat($montant, true) . " au guichet automatique."); //Rafraichir le HE return $tpl->fetch($account->getSkinRemotePhysicalPath() . 'html/Member/herefresh.htm', __FILE__, __LINE__); }