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__); }
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__); }
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_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érer plus que vous possédez.', $errorUrl); } //Vérifier si un perso a bien été sélectionné if (!is_numeric($_POST['toPersoId'])) { return fctErrorMSG('Vous n\'avez pas sélectionné 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__); }
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__); }
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 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 }
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_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__); }
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__); }
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 }
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&id=" . (int) $perso->getId() . "&choix=1\">Oui</a>/<a href=\"?m=Action_Perso_FouillerGo&id=" . (int) $perso->getId() . "&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__); }
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'); }
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__); }
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__); }
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__); }
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; }
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'); }
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.'); } //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__); }
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'); }
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 } }
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é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; 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é 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 }
/** 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)); } }
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__); }
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_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__); }
/** 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&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); } } }
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"; } }
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_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__); } }
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_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__); } }
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'; $errorUrl2 = '?popup=1&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__); } }
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"); } } }
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&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__); } }
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__); }