monoski
Messages postés132Date d'inscriptionmercredi 15 avril 2009StatutMembreDernière intervention13 mai 2013
-
29 déc. 2010 à 17:41
monoski
Messages postés132Date d'inscriptionmercredi 15 avril 2009StatutMembreDernière intervention13 mai 2013
-
29 déc. 2010 à 21:37
Bonjour tout le monde !
Je développe un mini jeu de rôle.
Voici une esquisse de fonction permettant de voir si au cours d'un déplacement, un de mes personnages tombe sur un objet :
<? session_start();
include 'include/bdd.php';
mysql_query("SET NAMES UTF8");
function loot()
{
$pseudo = $_SESSION['username'];
$chance_not_to_loot = 0;// 5% de chance de looter par déplacement ! On peut éventuellement rajouter une boucle pour donner une chance de looter plusieurs objets mais bon, j'ai pas envie !
$chance_the_loot_is_conso = 1;// 10% de chance pour que ce soit un objet et // 90% de chance pour que ce soit un consommable
$lootable = rand(1,100);
if ($lootable > $chance_not_to_loot)
{
$prerequis $recup mysql_query("SELECT xp FROM elfik_user WHERE username='$pseudo'") or die('Erreur SQL !'.$sql.'
'.mysql_error());
$fetch = mysql_fetch_array($prerequis);
$user_xp = $fetch['xp'];
$item_type = rand(1,100);
if ($item_type > $chance_the_loot_is_conso)
{
$consommable=1;
$quality_rand= rand(1,1000);
if ($quality_rand <= 800)
{
$quality = "uncommon";
$backup = "It is ".$quality."... Maybe you should keep it, a vendor will certainly buy it...";
}
elseif ($quality_rand > 800 AND $quality_rand<= 950)
{
$quality = "rare";
$backup = "It is ".$quality." ! It looks great !!!!";
}
elseif ($quality_rand > 950 AND $quality_rand<= 995)
{
$quality = "epic";
$backup = "It is ".$quality." ! Hell yeahhh !";
}
elseif ($quality_rand > 995)
{
$quality = "legendary";
$backup = "It is legen wait for it ... dary, LEGENDARY ! Motha fucka !!!!!!";
}
$items_lootable = mysql_query("SELECT name FROM T_items WHERE quality='$quality' AND (item_lvl > ('$user_xp' - 300) AND item_lvl <= ('$user_xp' + 300))") or die('Erreur SQL !'.$sql.'
'.mysql_error());
}
else
{
$consommable=1;
$backup = "It looks disgusting!";
$items_lootable = mysql_query("SELECT name FROM T_items WHERE item_lvl > ('$user_xp' - 300) AND item_lvl <= ('$user_xp' + 300) AND consommable='$consommable'") or die('Erreur SQL !'.$sql.'
'.mysql_error());
}//seuil de tolérance entre xp requis de l'objet et xp du joueur de 300XP (300 de moins et 300 de plus) !
$total = mysql_num_rows($items_lootable);
$item_looted_rand = rand(0,$total - 1);
while ($afficher = mysql_fetch_array($items_lootable))
{
$item_name = $afficher[$item_looted_rand];
}
//Faire un array avec les objets potentiels et faire un rand à partir de ces objets
$compte_rendu = "You found " .$item_name. ". ".$backup." Do you want to keep it ?"; // Le joueur veut-il garder l'objet ?
}
else
{
$compte_rendu = "What a beautiful day today, isn't it ?"; // Pas de loot
}
echo $compte_rendu; // On renvoit le compte rendu !
return $item_name; //On renvoit le nom de l'objet looté
}
loot();
?>
Bon alors tout se passe à peu près comme je veux, d'ailleurs si vous avez des critiques ou un moyen d'optimiser ça, je suis un gros noob en programmation :p, seul problème je pensais utiliser "$afficher = mysql_fetch_array($items_lootable)" un peu comme un array numéroté de php, et faire un random pour définir in fine, le nom de l'objet trouvé en affichant par exemple $afficher[1] (le 1 correspondant au résultat du random, seulement parfois cela fonctionne parfois non... Est-ce que vous voyez une erreur quelque part ?
L'erreur provient-elle de ma bdd ou bien le mysql_fetch_array ne fonctionne pas comme un array numéroté ?
PS : Les pourcentage établis au début ne correspondent pas avec les commentaires, c'est pour tester la fonction plus en détail !
monoski
Messages postés132Date d'inscriptionmercredi 15 avril 2009StatutMembreDernière intervention13 mai 20131 29 déc. 2010 à 21:37
<? session_start();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title>test</title>
</head>
<?
include 'include/bdd.php';
mysql_query("SET NAMES UTF8");
function loot()
{
$pseudo = $_SESSION['username'];
$chance_not_to_loot = 95;// 5% de chance de looter par déplacement ! On peut éventuellement rajouter une boucle pour donner une chance de looter plusieurs objets mais bon, j'ai pas envie !
$chance_the_loot_is_conso = 80;// 10% de chance pour que ce soit un objet et // 90% de chance pour que ce soit un consommable
$lootable = rand(1,100);
if ($lootable > $chance_not_to_loot)
{
$prerequis $recup mysql_query("SELECT xp FROM elfik_user WHERE username='$pseudo'") or die('Erreur SQL !'.$sql.'
'.mysql_error());
$fetch = mysql_fetch_array($prerequis);
$user_xp = $fetch['xp'];
$item_type = rand(1,100);
if ($item_type > $chance_the_loot_is_conso)
{
$consommable=0;
$quality_rand= rand(1,1000);
if ($quality_rand <= 800)
{
$quality = "uncommon";
$backup = "It is ".$quality."... Maybe you should keep it, a vendor will certainly buy it...";
}
elseif ($quality_rand > 800 AND $quality_rand<= 950)
{
$quality = "rare";
$backup = "It is ".$quality." ! It looks great !!!!";
}
elseif ($quality_rand > 950 AND $quality_rand<= 995)
{
$quality = "epic";
$backup = "It is ".$quality." ! Bloody Hell yeaaaah !";
}
elseif ($quality_rand > 995)
{
$quality = "legendary";
$backup = "It is legen wait for it ... dary, LEGENDARY ! Motha fucka !!!!!!";
}
$items_lootable = mysql_query("SELECT name FROM T_items WHERE quality='$quality' AND (item_lvl > ('$user_xp' - 300) AND item_lvl <= ('$user_xp' + 300)) AND consommable='$consommable' ORDER BY RAND() LIMIT 1") or die('Erreur SQL !'.$sql.'
'.mysql_error());
}
else
{
$consommable=1;
$backup = "It looks disgusting!";
$items_lootable = mysql_query("SELECT name FROM T_items WHERE item_lvl > ('$user_xp' - 300) AND item_lvl <= ('$user_xp' + 300) AND consommable='$consommable' ORDER BY RAND() LIMIT 1") or die('Erreur SQL !'.$sql.'
'.mysql_error());
}
$afficher = mysql_fetch_array($items_lootable);
$item_name = $afficher['name'];
//Faire un array avec les objets potentiels et faire un rand à partir de ces objets
//seuil de tolérance de 300XP (300 de moins et 300 de plus) !
$compte_rendu = "You found " .$item_name. ". ".$backup." Do you want to keep it ?"; // Le joueur veut-il garder l'objet ?
}
else
{
$compte_rendu = "What a beautiful day today, isn't it ?"; // Pas de loot
}
echo $compte_rendu;
return $item_name; // On renvoit le compte rendu !
}
loot();
?>
</html>
Voici la version final, j'ai lâché le principe de l'array et je suis passé par une requête qui renvoie un résultat aléatoire grâce à ORDER BY RAND() LIMIT 1 !
Voilà, j'espère que ça servira à d'autres :-)