![](https://fr.metin2.dev/uploads/set_resources_42/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://fr.metin2.dev/uploads/set_resources_42/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
Hystos
-
Compteur de contenus
256 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Boutique
Calendrier
Messages posté(e)s par Hystos
-
-
Redonnes ton code tel qu'il est actuellement.
-
As-tu fais ce que j'ai dis ? (pour la variable $ip et les autres requêtes)
-
Bah pour ton warning je te l'ai corrigé mais il faut que tu le mettes partout
Maintenant, je n'ai pas vu d'où tu sors ta variable $ip. Dans le doute, rajoute ceci en début de page :
$ip = $_SERVER['REMOTE_ADDR'];
-
Oui, remplacez account par account.account
-
Plusieurs possibilités :
- Vous triez dès votre première requête avec la variable $ip. Êtes vous sur de cette variable
- Avez vous bien pensé à sélectionné la base account ?
mysql_select_db(account);
Ceci n'est pas obligatoire si vous rajoutez a chaque fois base.champs dans vos requêtes comme par exemple :
$sql = mysql_query("SELECT (UNIX_TIMESTAMP(last_vote) - UNIX_TIMESTAMP()) AS last_vote FROM account.account WHERE ip = '$ip'");
-
Je n'ai rien d'autre à dire que :
if(isset($_POST['idd']) and $_GET['valid']=='ok') { //Déclaration des variables $ident=$idp=$ids=$idd=$codes=$code1=$code2=$code3=$code4=$code5=$datas=''; //On récupère les identifiants sous la forme "xxx;xxx;xxx" if(isset($_POST['idp'])) $idp = $_POST['idp']; if(isset($_POST['ids'])) $ids = $_POST['ids']; //$ids n'est plus utilisé, mais il faut conserver la variable pour une question de compatibilité if(isset($_POST['idd'])) $idd = $_POST['idd']; $ident=$idp.";".$ids.";".$idd; //On récupère le(s) code(s) sous la forme "xxxxxxxx;xxxxxxxx" if(isset($_POST['code1'])) $code1 = $_POST['code1']; if(isset($_POST['code2'])) $code2 = ";".$_POST['code2']; if(isset($_POST['code3'])) $code3 = ";".$_POST['code3']; if(isset($_POST['code4'])) $code4 = ";".$_POST['code4']; if(isset($_POST['code5'])) $code5 = ";".$_POST['code5']; $codes=$code1.$code2.$code3.$code4.$code5; //On récupère le champ DATAS" if(isset($_POST['DATAS'])) $datas = $_POST['DATAS']; //On encode les trois chaines en URL $ident=urlencode($ident); $codes=urlencode($codes); $datas=urlencode($datas); /* Envoie de la requête vers le serveur StarPass Dans la variable tab[0] on récupère la réponse du serveur Dans la variable tab[1] on récupère l'URL d'accès ou d'erreur suivant la réponse du serveur */ $get_f=@file("http://script.starpass.fr/check_php.php?ident=$ident&codes=$codes&DATAS=$datas"); //Si on contact le serveur if($get_f) { $tab = explode("|",$get_f[0]); // dans $pays on a le pays de l'offre. exemple "fr" $pays = $tab[2]; // dans $palier on a le palier de l'offre. exemple "Plus A" $palier = urldecode($tab[3]); // dans $id_palier on a l'identifiant de l'offre $id_palier = urldecode($tab[4]); // dans $type on a le type de l'offre. exemple "sms", "audiotel, "cb", etc. $type = urldecode($tab[5]); // vous pouvez à tout moment consulter la liste des paliers à l'adresse : http://script.starpass.fr/palier.php //Si $tab[0] répond "OUI" if(substr($tab[0],0,3) == "OUI") { $payement=true; } else { $tpl->assign('valid_pay', 'nok'); } } else { $tpl->assign('valid_pay', 'error'); } } /** *Si on ne recoi pas de payement **/ else { $tpl->assign('valid_pay', '0'); } if($payement) { $sql="UPDATE account.account SET cash = cash+".$CONFIG_is['nb_cash']." WHERE id = $id_membre"; mysql_query($sql) or die (mysql_error()); $tpl->assign('valid_pay', 'ok'); }
(code de Jigsaw dans MT2-CMS).
Si tu ne comprends pas quelque chose là dedans, demande moi
Je ne te conseille pas de te focaliser sur le code en lui même en rapport avec starpass mais sur le fonctionnement général pour l'adapter avec succès sur ton site.
-
Alors tu trouver les deux ligne la :
mysql_query("UPDATE $db_account.account SET cash=cash+5 WHERE $db_account.account.id='$idcompte'");//Vote valid� on add les valeurs
mysql_query("UPDATE $db_account.account SET cash=cash+5 WHERE $db_account.account.id='$idcompte'");//Vote valid� on add les valeurs > :
et tu modifie le +5 par ce que tu veux !!
Le problème est au niveau de la gestion du temps. Il faut vérifier les paramètres d'entrées dans l'historique (avec la date du vote) et vérifier la génération de la condition "si l'écart entre les deux dates est supérieur à X heures".
-
site
dans Questions & Réponses
Qu'est-ce que tu n'arrives pas à installer exactement ?
-
Le code est dedans. Il te suffit de l'adapter à ton site ce qui est largement possible avec un niveau intermédiaire.
-
Il y en a un pas mal dans MT2-CMS de Jigsaw.
Regarde la page payement.php
-
Dans le cas où le gm rentre une chaîne de caractère dans le input, tonumber(input()) renvoie nil et type(nil) renvoie "nil", donc est bien différent de "number"
(pour répondre à ta question prindo)
Le input() renvoie automatiquement une chaîne ou bien si l'utilisateur rentre des nombres il sera de forme numérique ?
-
Autant pour moi, j'avais mal lu la description de la fonction (qui est d'ailleurs totalement débile mais bon *.*). Je pensais que les chaines de texte étaient converties en numériques.
-
Non, non et renon !
Il y a une incohérence, voici un exemple
coord_x_chunjo = tonumber(input()) while type(coord_x_chunjo) != "number" do say_reward("Erreur de saisie. Vous devez saisir un nombre.") say_reward("Réésayez:") coord_x_chunjo = tonumber(input()) end
Ta variable cord_x_chunjo sera OBLIGATOIREMENT de type nombre vu que tu traduis ce qu'écris l'utilisateur dans le input en nombre avec la fonction tonumber(). Ce qui signifie que le type sera toujours number même si tu rentres du texte
-
Il vous faut travailler sur 3 fronts. D'un côté, le formulaire d'affichage, d'un autre, le traitement du champs et enfin l'enregistrement dans la base de données.
Commençons par voir le formulaire. Si vous n'avez pas modifié votre CMS, il est contenu dans inscription.tpl.
Rajoutez un champs textarea où vous le voulez entre les balises
comme ceci :Vous avez créé le nouveau champs dans le formulaire.
Passons maintenant à son traitement via PHP ! Pour cela, direction inscription.php. Repérez les lignes de traitement :
Commençons par sécuriser la variable comme ceci :
$texte = mysql_real_escape_string($_POST['texte']);
//Si on envoie le formulaire et que l'inscription est activé if(isset($_POST['login']) and isset($_POST['mail']) and isset($_POST['mdp']) and $CONFIG['inscription'] == 1) { $tpl->assign('envoie_form', '1'); //Sécurité : On protège les variables. $pseudo=mysql_real_escape_string($_POST['login']); $mdp=mysql_real_escape_string($_POST['mdp']); $mail=mysql_real_escape_string($_POST['mail']); $texte = mysql_real_escape_string($_POST['texte']); $errors = ''; //Si le mail est valide if(preg_match('#^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$#', $mail)) { //Si le pseudo est supérieur à 4 caractères et inférieur à 17 caractères. if (strlen(trim($pseudo)) > 4 && strlen(trim($pseudo)) < 17) { //Si le mot de passe est supérieur à 4 caractères et inférieur à 17 caractères. if (strlen(trim($mdp)) > 4 && strlen(trim($mdp)) < 17) { //On vérifie que le pseudo n'existe pas. mysql_select_db("account"); $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM `account` WHERE login='$pseudo'"); if (mysql_result($sql, 0, 'nb_pseudo') == 0) { $date = date("Y-m-d H:i:s"); //Insertion dans la base de donnée $sql="INSERT INTO account (login, password, email, create_time, cash, rang) VALUES ('$pseudo', password ('$mdp'), '$mail', '$date', '0', '1')"; mysql_query($sql) or die (mysql_error()); } else { $errors =5; }//5: Ce pseudo est déjà utilisé. } else { $errors =4; }//4: Le mot de passe doit être compris entre 5 et 16 caractères. } else { $errors =3; }//3:Le pseudo doit être compris entre 5 et 16 caractères. } else { $errors =2; }//2: Votre email est invalide. if($errors == '') //Si l'inscription a fonctioné { $tpl->assign('valid_form', '1'); } else //Sinon on charge les erreurs { $tpl->assign('valid_form', $errors); } }
Notre objectif est de rajouter le traitement de notre champs variable. Pour cela, il nous faut rajouter une condition.
if (isset($texte) AND $texte != "") //Si l'utilisateur a rempli le champs { ... //on continue } else { $errorrs = 15; //L'utilisateur n'a pas rempli le champs de texte. On génère une erreur qui sera identifiée sous le chiffre 15 purement arbitraire pour la suite. }
Glissons ça dans notre code
//Si on envoie le formulaire et que l'inscription est activé if(isset($_POST['login']) and isset($_POST['mail']) and isset($_POST['mdp']) and $CONFIG['inscription'] == 1) { $tpl->assign('envoie_form', '1'); //Sécurité : On protège les varriables. $pseudo=mysql_real_escape_string($_POST['login']); $mdp=mysql_real_escape_string($_POST['mdp']); $mail=mysql_real_escape_string($_POST['mail']); $texte = mysql_real_escape_string($_POST['texte']); $errors = ''; //Si le mail est valide if(preg_match('#^[a-zA-Z0-9_\.-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$#', $mail)) { //Si le pseudo est supérieur à 4 caractères et inférieur à 17 caractères. if (strlen(trim($pseudo)) > 4 && strlen(trim($pseudo)) < 17) { //Si le mot de passe est supérieur à 4 caractères et inférieur à 17 caractères. if (strlen(trim($mdp)) > 4 && strlen(trim($mdp)) < 17) { if (isset($texte) AND $texte != "") //Si l'utilisateur a rempli le champs texte { //On vérifie que le pseudo n'existe pas. mysql_select_db("account"); $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM `account` WHERE login='$pseudo'"); if (mysql_result($sql, 0, 'nb_pseudo') == 0) { $date = date("Y-m-d H:i:s"); //Insertion dans la base de donnée $sql="INSERT INTO account (login, password, email, create_time, cash, rang) VALUES ('$pseudo', password ('$mdp'), '$mail', '$date', '0', '1')"; mysql_query($sql) or die (mysql_error()); } else { $errors =5; }//5: Ce pseudo est déjà utilisé. } else { $errors = 15; } //15 : champs de texte non rempli. } else { $errors =4; }//4: Le mot de passe doit être compris entre 5 et 16 caractères. } else { $errors =3; }//3:Le pseudo doit être compris entre 5 et 16 caractères. } else { $errors =2; }//2: Votre email est invalide. if($errors == '') //Si l'inscription a fonctioné { $tpl->assign('valid_form', '1'); } else //Sinon on charge les erreurs { $tpl->assign('valid_form', $errors); } }
Nous avons presque fini !
Allons dans la base de données account. Rajoutez un champs de type text de nom texte dans votre table account (je pense que vous savez faire).
Il nous faut modifier la requête sql de manière à ce qu'il enregistre notre variable.
Transformons la requête comme ceci :
$sql="INSERT INTO account (login, password, email, create_time, cash, rang, texte) VALUES ('$pseudo', password ('$mdp'), '$mail', '$date', '0', '1', '$texte')";
Une dernière chose, nous avons parlé d'un code erreur toute à l'heure :
$errors = 15;
Retournons dans inscription.tpl et repérons ces lignes
Votre email est invalide. Le pseudo doit être compris entre 5 et 16 caractères. Le mot de passe doit être compris entre 5 et 16 caractères. Ce pseudo est déjà utilisé.
C'est la définition des messages d'erreur en fonction du numéro que nous avons mis toute à l'heure, 15 ! Rajoutons donc la ligne :
Vous n'avez pas rempli la zone de texte.
Et voilà ! Nous avons fini !
PS : Un mini tuto de la sorte prend un peu de temps ! Il est possible que j'ai oublié des choses, c'est tellement vite arrivé...
-
https://fr.metin2.dev/topic/5845-gameplay-bloquer-lexp/
Prends le 2e code, changes le 250 en 150 et voilà
-
A noter que pour moi il faut un code d'effacement de 7 caractères (1234567 par exemple).
-
php
dans Questions & Réponses
Tu peux essayer de bloquer les proxys les plus connus... Mais comme je te l'ai dis ça ne sert pas à grand chose.
-
php
dans Questions & Réponses
C'est extrêmement compliqué.
Déjà tu peux faire un truc simple : bloquer les votes toutes les 2 heures sur le compte. Ce système est inviolable mais il est possible de changer de compte.
Tu peux toujours essayer de bloquer l'IP, il reviendra sous un proxy. Tu peux toujours essayer de bloquer la plupart des proxys, il y en a tellement d'autres...
Il n'y a pas de solution à ton problème
-
Comment recevoir les 100 Gold ? C'est très simple, connectez vous au site ensuite il suffit de cliquer sur les logo du "top-site" ci dessous, saisir un code de vérification et le tour est joué ! Votez sur topmetin.com et root-top.com ensuite gagnez 100 Gold Par vote ! (Toutes les 2Heures)
Ton système affiche 100 mais il donne 5. En effet, les requêtes SQL modifiant les golds des utilisateurs sont ici :
mysql_query("UPDATE $db_account.account SET cash=cash+5 WHERE $db_account.account.id='$idcompte'");//Vote valid� on add les valeurs mysql_query("UPDATE $db_account.account SET cash=cash+5 WHERE $db_account.account.id='$idcompte'");//Vote valid� on add les valeurs > :
Tu rajoutes donc bien 5 à l'utilisateur, mais tu affiches 100. Vérifies les textes
-
1
-
-
Validation de l'inscription Vérification <?php if($securite!='JEREMaimelaquequete!numero:0687541251'){ exit();} $ipbox = gethostbyaddr($_SERVER['REMOTE_ADDR']); $captcha=$_POST["captcha"]; if ($captcha == "blanc" || $captcha == "Blanc" || $captcha == "BLANC") { $password1=$_POST["password1"]; $password2=$_POST["password2"]; if ($password1 == $password2) { $compte=mysql_real_escape_string($_POST["compte"]); $suppr=$_POST["suppr"]; $mail=mysql_real_escape_string($_POST["mail"]); $question=mysql_real_escape_string($_POST["question"]); $reponse=$_POST["reponse"]; if(is_numeric($_POST['stat'])){ $stat=$_POST['stat']; } if (empty($password1) || empty($password2) || empty($compte) || empty($suppr) || empty($mail) || empty($question) || empty($reponse) || empty($stat)) { echo 'Erreur! Assurez vous de ne laissé aucun champs vide. Revenez au formulaire, et remplissez tous les champs.'; } else { $time=date("Y-m-d H:i:s",time()); $search=mysql_query("SELECT COUNT('account.account.id') as nb FROM account.account WHERE account.account.login='$compte'"); $find=mysql_fetch_array($search); if ($find["nb"] == "0") { $ipboxverif=mysql_query("SELECT COUNT('account.account.ipbox') as nb FROM account.account WHERE account.account.ipbox='$ipbox'"); $ipboxverif2=mysql_fetch_array($ipboxverif); if ($ipboxverif2["nb"]>3) { echo "Il y à déjà trop de comptes créés depuis ce lieu."; } else { mysql_query("INSERT INTO account.account (login, password, social_id, email, question1, answer1, create_time, cash, rang, ipbox) VALUES ('$compte', password('$password1'), '$suppr', '$mail', '$question', password('$reponse'), '$time', '0', '1', '$ipbox')"); //mysql_query("INSERT INTO account.account VALUES('','$compte',PASSWORD('$password1'),'','$suppr','$mail','','','','','$time','$question',PASSWORD('$reponse'),'','','','OK','','','','','','','','$time','$time','0000-00-00 00:00:00','0000-00-00 00:00:00','$time','$time','$time','','','')"); echo 'Le compte '.$compte.' a bien été créé. Vous pouvez désormais jouer à Ton serveur -Online. Bon jeu sur Ton serveur -Online!'; $mois = date('n'); //mysql_connect('178.32.163.115', 'oregonc2', 'oregonc2oregonc2'); mysql_query("INSERT INTO site.stats (mois, rep) VALUES ('$mois', '$stat')"); } } else { echo 'Erreur! Un compte possède déjà ce nom. Revenez au formulaire, et changez votre nom de compte.'; } } } else { echo 'Erreur! Le mot de passe et la vérification du mot de passe ne sont pas les mêmes. Revenez au formulaire, et vérifiez les deux mots de passe.'; } } else { echo 'Erreur! La réponse est fausse. Revenez au formulaire, et répondez correctement à la question.'; }?>
Je t'ai enlevé le système de protection contre les proxys.
-
1
-
-
Poste ton code.
-
Il suffit d'ajouter des lignes dans le fichier stone.txt de la map en question.
-
De rien c'était un plaisir
-
Ces mots de passe sont hashés via un algorithme md5. Par définition, le hashage ne fonctionne que dans un sens : vous pouvez hasher quelque chose mais pas le déhasher.
Il y a cependant plusieurs types de moyens pour décrypter :
- le brut force, on teste toutes les combinaisons possibles (c'est assez lourd comme manip, parfait pour le *.*)
- la méthode "intelligente", où on enregistre les occurrences au fur et à mesure des décryptages pour en arriver à une table de hashage.
En clair, cherchez sur google et vous devriez trouver votre bonheur.
Vote (CMS-MT2)
dans Questions & Réponses
Posté(e)
Qu'est-ce que j'ai dis dans mes messages précédent ? Remplace par ça :
Pour ce que tu appelles navicat, vérifie que tu as bien un champs last_vote, vote et ip dans la table account de ta base account.