Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

Hystos

Membre
  • Compteur de contenus

    256
  • Inscription

  • Dernière visite

Messages posté(e)s par Hystos

  1. C'est parce que le script ne tient pas compte du faite que l'item puisse être empilable ou non.

     

    Je ne sais pas quelle tête à ta fonction verif_place_is() mais elle doit être comme ceci (adaption pour PDO faite à l'arrache, non testée) :

     

    function verif_place_is($account_id, $nb_item=1)
    {
    
    if(is_numeric($account_id))
    {
    
    	$requete = "SELECT COUNT(*) AS nb_safebox FROM player.safebox WHERE account_id = '$account_id'";
    	$retour	= $connexion->query($requete)
    	$donnees = $retour->fetch();
    	if($donnees['nb_safebox'] == 1)//Si l'user a bien un entrepôt
    	{
    
    		$pos = 0;
    		$go = false;
    		while($go == false)
    		{
    			$retour = $connexion->query("SELECT COUNT(*) AS nb_pos FROM player.item WHERE owner_id = '$account_id' AND pos = '$pos' AND window = 'MALL'");
    			$donnees = $retour->fetch();
    			if($donnees['nb_pos'] >= 1) {$pos++;} else  {$go = true;}
    		}
    
    		if($pos > (44-$nb_item)) { return false; } // Si le MALL est plein
    		else {return $pos;} // On renvoi le numéro de la position libre
    	} else {return false;}
    } else { return false; } // Si account n'est pas un chiffre
    
    }
    

     

    Ensuite, pour ton code, essaie de remplacer par ça. J'ai fais une sorte de mixe avec MT2-CMS un peu en live, j'ai pas testé donc c'est possible qu'il y ait quelques bugs :)

     

    Bienvenue dans l'item Shop de <?php echo $nomServeur; ?>
    
    
    
       <?php    
       if(empty($_GET['action'])){
           $sqlCategories = "SELECT * FROM yurima.catIs"; 
                   $resultCategories = $connexion->query($sqlCategories); // on va chercher tous les membres de la table qu'on trie par ordre croissant
                   $resultCategories->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
                   while($dataCategories = $resultCategories->fetch()) // on récupère la liste des membres
                   {
                       if(@$lignes->mAuthority == "IMPLEMENTOR")
                           {
                           $_SESSION['categorie'] = $dataCategories->categorie;
                           $_SESSION['id_cat'] = $dataCategories->id;
                   echo'
    '.$dataCategories->categorie.'Supprimer';
                           }else{
    
                   echo'
    '.$dataCategories->categorie.'
    ';
    
                       }
                   }
               }elseif(isset($_GET['action']) && $_GET['action'] == "categorie")
               {
                   echo'
    
                   Vous avez '.$cash.' '.$nomCash.' - Recharger mon compte 
    
    
    
    
    ';
                       $myVar = intval($_GET['id']);
                       $sqlVide = "SELECT * FROM yurima.itemIs WHERE categorie= '".$myVar."' AND actif = 1 ";
                       $resultVide = $connexion->prepare($sqlVide);
                       $resultVide->execute();
                       $countVide = $resultVide->rowCount();
                           if($countVide == 0)
                           {
                           echo'Il n\'y a aucun objet dans cette Catégorie';
                           }
                           $sqlItems = "SELECT * FROM yurima.itemIs WHERE categorie= '".$myVar."' AND actif = 1"; 
                           $resultItems = $connexion->query($sqlItems); // on va chercher tous les membres de la table qu'on trie par ordre croissant
                           $resultItems->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
                           while($dataItems = $resultItems->fetch()) // on récupère la liste des membres
                           {
                           if(@$lignes->mAuthority == "IMPLEMENTOR")
                           {
                               $_SESSION['item'] = $dataItems->nameItem;
                               $_SESSION['actif'] = $dataItems->actif;
                               echo'
        ';
                           }
                               echo'
    
    
    x'.$dataItems->nbItem.' '.$dataItems->nameItem.'
    '.$dataItems->infoItem.'
     '.$dataItems->prix.' 
    Monnaie 
    
    
    
    
    ';
    
                           }
                           echo'
    < Retour';
               }elseif(isset($_GET['action']) && $_GET['action'] == "acheter"){
                   $myVar = intval($_GET['id']);
                   $sqlItems = "SELECT * FROM yurima.itemIs WHERE actif = '1' AND id =".$myVar." "; 
                   $resultItems = $connexion->query($sqlItems); // on va chercher tous les membres de la table qu'on trie par ordre croissant
                   $resultItems->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
                   while($dataItems = $resultItems->fetch()) // on récupère la liste des membres
                       {
                           echo'Vous êts sur le point d\'acheter
    
    
    
    
    x'.$dataItems->nbItem.' '.$dataItems->nameItem.'
    '.$dataItems->infoItem.'
     '.$dataItems->prix.' 
    Monnaie 
    
    
    
    
    
    
    
    < Retour';
                       }
               }elseif(isset($_GET['action']) && $_GET['action'] == "valide")
               {
                   $myVar = intval($_GET['id']);
                   $sqlItem = "SELECT * FROM yurima.itemIs WHERE id= '".$myVar."'"; 
    
                   $resultItem = $connexion->query($sqlItem); // on va chercher tous les membres de la table qu'on trie par ordre croissant
                   $resultItem->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
                   while($dataItem = $resultItem->fetch()) // on récupère la liste des membres
                   {
                       //on liste les variable utiliser
                       $prix_item = $dataItem->prix;
                       $nb_item = $dataItem->nbItem;
                       $item = $dataItem->idItem;
                       $nom_item = $dataItem->nameItem;
    				$flag = $dataItem->flag;
    				$temps = $dataItem->value0;
    
    				if ($cash >= $prix_item)
    				{
    					if($flag==4 or $flag==20 or $flag==132 or $flag==2052 or $flag==8212)
    					{
    						//Si l'entrepot n'est pas plein
    						if (is_numeric(verif_place_is($id_membre)))
    						{
    
    							//On le débite
    							$debite=$connexion->exec("UPDATE account.account SET cash=cash-'".$prix_item."' WHERE id = '".$id_membre."' LIMIT 1");
    							//On entre dans les logs
    							$ajoutHistorique=$connexion->exec("INSERT INTO yurima.historiqueIs (idItem,nomItem,nbItem, nomMembre, idMembre,prix,type,date)    VALUES    ('".$item."','".$nom_item."','".$nb_item."', '".$login."', '".$id_membre."', '".$prix_item."','1',NOW())");
    
    							//On ajoute l'objet
    							$pos = verif_place_is($id_membre);
    							$connexion->exec("INSERT INTO player.item (owner_id, window, pos, count, vnum, socket2)	VALUES	('$id_membre', 'MALL', '$pos', '$nb_item', '$item', '$temps')");
    
    							 echo'Votre Objet a été ajouter avec succé dans votre item Shop
    
                                           Recuperez votre Objet avant d\'en racheter un
    
                                           Cela Evitera de faire beuguer votre item shop
    
                                           Redirection sur la page de l\'item shop dans 8 secondes
    
    
    
    ';
    
    						}
    						else
    						{
    							echo'Votre entrepot est plein
    
                               Redirection sur la page de l\'item shop dans 5 secondes
    
    
    
    ';
    						}
    					}
    
    					//Sinon on regroupe les items
    					else
    					{
    						//Si l'entrepot n'est pas plein
    						if (is_numeric(verif_place_is($id_membre, $nb_item)))
    						{
    							//On le débite
    							$debite=$connexion->exec("UPDATE account.account SET cash=cash-'".$prix_item."' WHERE id = '".$id_membre."' LIMIT 1");
    							//On entre dans les logs
    							$ajoutHistorique=$connexion->exec("INSERT INTO yurima.historiqueIs (idItem,nomItem,nbItem, nomMembre, idMembre,prix,type,date)    VALUES    ('".$item."','".$nom_item."','".$nb_item."', '".$login."', '".$id_membre."', '".$prix_item."','1',NOW())");
    							//On ajoute l'objet
    							for ($i = 1; $i <= $nb_item; $i++)
    							{
    								$pos = verif_place_is($id_membre);
    								$connexion->exec("INSERT INTO player.item (owner_id, window, pos, count, vnum, socket2)	VALUES	('$id_membre', 'MALL', '$pos', '1', '$item', '$temps')");
    							}
    
    							echo'Votre Objet a été ajouter avec succé dans votre item Shop
    
                                           Recuperez votre Objet avant d\'en racheter un
    
                                           Cela Evitera de faire beuguer votre item shop
    
                                           Redirection sur la page de l\'item shop dans 8 secondes
    
    
    
    ';
    
    						}
    						else
    						{
    							echo'Votre entrepot est plein
    
                               Redirection sur la page de l\'item shop dans 5 secondes
    
    
    
    ';
    						}								
    
    					}
    
    
                       }
    				else
    				{
    					echo'Vous n\'avez pas assez de '.$nomCash.'
    
                                       Redirection sur la page de l\'item shop dans 5 secondes
    
    
    
    ';
    				}    
    
                   }
    		}
    
  2. Ce qu'il a voulu faire c'est que si le niveau est supérieur ou égal a 100 ET inférieur ou égal à 100, on commence

    autrement dit, il faut qu'il soit level 100 pile poil car 100 respecte les deux conditions (100 <= 100 et 100 >= 100)

    Ne pas confondre avec "<" qui signifie strictement inférieur à. En gros, ce que moi j'ai fait pour simplifier ça:

     

    NOT fait partie de la logique binaire (and, or, nor, xor, etc) voir ici

    En gros si je mets "not" avant la fonction, ça fera tout le contraire de ce qui suit. Si je fais:

    "if pc.level == 100 then" il cherchera si le level est égal à 100 alors que si je fais ça:

    "if not pc.level == 100 then" il cherchera si le level est différent de 100. Je ne complique rien, je facilite Smiling.

    Et comme tu l'as dit oui c'est la même chose avec un pc.level == 100.

     

    On s'est parfaitement compris t'inquiète pas :) Relis bien mon message :) C'est juste que c'est comme si tu écrivais en mathématiques

    5 - (-5) = 10

    à la place de

    5 + 5 = 10

    ce qui pour moi est du tournage en bourrique vu que tu utilises 2 négations pour dire une chose que tu peux dire en une affirmation, ainsi plus facilement et plus logiquement (c'est tout de même plus logique de dire qu'un niveau doit être égal à 100 plutôt que de dire qu'un niveau ne doit pas être différent de 100 :o ).

     

    Bref, trêve de flood :angel:

  3. when login or levelup or enter with pc.get_level() >=100 and pc.get_level() <= 100 begin

     

     

    Je traduis :o

    Quand on se connecte ou qu'on change de niveau ou qu'on change de map avec le niveau plus grand ou égal à 100 (donc de 100 compris à + l'infini) et le niveau plus petit ou égal à 100 (donc de 0 à 100 compris).

     

    J'ai pas compris le truc là xD Le seul niveau qui réunira les 2 conditions, c'est 100. Je pense qu'un simple pc.get_level() == 100 aurait suffi, non ?

     

    PS : Sparkk, l'art de tourner les choses en bourriques xD "pas avec le niveau de différent de 100"

  4. Bonjour,

     

    C'est l’algorithme qui est incorrect.

     

    Quand l'user clique sur un des boutons de vote, l'url prend 2 paramètres : action qui est égal à "ok" et site qui est égal au nom du site de vote.

    Hors pour choisir quelle action effectuer (soit afficher les boutons, soit récompenses) le script vérifie le paramètre action. S'il est différent de ok on affiche les boutons sinon on crédite le compte. Le problème est que quand l'utilisateur arrive sur la page normalement, ce paramètre n'existe pas d'où l'erreur retournée.

     

    Remplace la ligne 33 par ceci :

     

    if ($_GET['p'] == "Vote" && empty($_GET['action'])) 

     

    A la place de vérifier sa valeur, je vérifie qu'elle n'existe pas ce qui revient au même vu que sa valeur n'a aucune importance.

  5. Hum...

    Première question toute bête : la quête est-elle bien mise dans locale_list avec une ligne vide après ?

     

    Ensuite, je n'aime pas trop ceci

     

    when login begin
           if pc.getqf("debut") == 0 then
                   pc.setqf("debut", 1)
                   set_state(etape1)
           end
    end
    

     

    Ce n'est pas très logique... S'il n'existe pas il ne peut théoriquement pas avoir la valeur 0 :o D'un point de vue algorythmique, ça serait mieux de vérifier qu'il n'est pas égal à 1. De plus, je ne suis pas certain mais le set_state() pourrait peut être prendre des guillemets.

     

    when login begin
           if pc.getqf("debut") != 1 then
                   pc.setqf("debut", 1)
                   set_state("etape1")
           end
    end
    

     

    Essaie comme ça.

  6. C'est plus compliqué et les requêtes utilisées sont déjà carrément tordues.

     

    S'ils ont d'autres caractères spécifiques, genre des { } ça marche aussi.

     

    WHERE player.name NOT LIKE '[%]%' AND account.status!='BLOCK'

     

    devient comme ceci :

    WHERE player.name NOT LIKE '{%}%' AND account.status!='BLOCK'

  7. La manière la plus simple est qu'à chaque fois que le joueur tue le monstre voulu on génère un nombre aléatoire et on teste sa valeur.

     

    Voici un petit exemple :

    when VNUM_MOB.kill begin
    if number(1, 100) == 1 then
    	game.drop_item_with_ownership(VNUM_ITEM)
    end
    end
    

     

    Ici, le joueur à 1% de chances de retrouver l'item. Il faut que le nombre aléatoire number(1, 100) tombe sur 1 :)

     

    Si on avait voulu 10%, on aurait fait :

    if number(1, 10) == 1 then
    

     

    ou

    if number(1, 100) <= 10 then
    

     

    Les combinaisons sont infinies :)

  8. Bonjour,

     

    Premièrement, je te conseille d'utiliser MT2-CMS qui est le meilleur d'un point de vue sécuritaire.

     

    Ensuite, ton problème vient du faite que le site n'arrive pas à se connecter à la base de données de ton serveur. Tu dois remplir dans les champs la même chose que ce que tu as mis dans navicat (quand tu as créé la nouvelle connexion).

     

    Si ça ne marche pas, vérifie auprès de l'hébergeur de ton dédié qu'il accepte les connexions distantes.

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.