28-02-2007, 09:11 AM
Salutation à tous
Je suis en train de faire le système de tir des joueurs qui ont choisit la classe artillerie, qui donc son en possession de canon. Pour que le joueur puisse tirer il doit rentrer des coordonnés de tir et ensuite valider son tir.
Voici le script de rentré des données
Je suis en train de faire le système de tir des joueurs qui ont choisit la classe artillerie, qui donc son en possession de canon. Pour que le joueur puisse tirer il doit rentrer des coordonnés de tir et ensuite valider son tir.
Voici le script de rentré des données
Code PHP :
<?
include("bdd.php");
@session_start();
$id=$_SESSION['id'];
$perso=$_SESSION['perso'];
$req=mysql_query("SELECT arme,vision,attaque FROM membres WHERE id='$id'");
$perso=mysql_fetch_array($req);
$id_arme=$perso['arme'];
$vision=$perso['vision'];
$attaque=$perso['attaque'];
if($attaque!='0')
{
echo '<form action="canon_tir.php" method="post"><input name="X" size="5" maxlength="5" value="Pos X"></input> <input name="Y" size="5" maxlength="5" value="Pos Y"><br><br></input><input type="submit" value="Tirez !">';
echo '</form>';
}
else
{
echo'<center><font color=white><br>Vous n\'avez plus d\'attaque.</font></center>';
}
?>
Ensuite cela se complique, le script suivant qui traite l'action effectue de nombreuses requettes :
-On regarde si la case visé n'est pas trop loin par rapport à la portée du canon
-On regarde si la case contient un batiment ou un perso
-Si elle ne contient rien, on regarde le calibre de l'arme, si celui est supérieure à 100 on effectue une modification terrain
-Si il est inférieure à 100 on effectue rien du tout et le joueur à perdu un tir
-Si la case contient un batiment on selectionne le nombre de "Pv" restant au batiment etc
-Si elle contient un perso on effectue comme dans l'attaque, le retrait des pv's en fonction des dégats.
C'est long et chiant
Mon script que j'ai fais bug et m'affiche une page blanche, j'ai d'abord pensé à un oublie de ';' mais je n'en ai pas vue, ensuite j'ai vérifié mes acollade, rien oublié.. Donc je m'en remet à vous
Code PHP :
<?
include('bdd.php');
@session_start();
$id=$_SESSION['id'];
$perso=$_SESSION['perso'];
include('function.php');
$type=$dep[0];
$message1='';
$X =$_POST['X'];
$Y =$_POST['Y'];
if($X=="" || $Y=="") ////Les champs sont'ils remplient ?///
{
$message1.='<center>Vous devez obligatoirement rentrer des coordonnées </center>';
}
else
{
$distance = $db->extract_one("SELECT arme FROM membres WHERE id='$id'");
$id_arme=$distance['arme'];
$portee = $db->extract_one("SELECY distance FROM armes WHERE id='$id_arme'");
$portee_max=$portee['distance'];
$position_joueur = $db->extract_one ("SELECT X,Y FROM map WHERE perso='id'"(;
$X1=$position_joueur['X'];
$Y1=$position_joueur['Y'];
$portee_X = $X-$X1;
$portee_Y = $Y-$Y1;
if($portee_X>$distance OR $portee_Y>$distance )/////Le joueur peut-t-il tirez aussi loin ?////
{
$message1.='<center>Votre canon ne tir pas aussi loin que ça !</center>';
}
else
{
switch($type)
{
case 'perso':
//info sur le perso
$perso = $db->extract_one("SELECT arme,attaque,camp FROM membres WHERE id='$id'");
$id_arme=$perso['arme'];
$attaque=$perso['attaque'];
$camp=$perso['camp'];
$armes = $db->extract_one("SELECT degats,calibre FROM armes WHERE id='$id_arme'");
$degats=$armes['degats'];
$calibre=$arùes['calibre'];
///Info zone ciblé
$zone_cible = $db->extract_one("SELECT perso,bat FROM map WHERE X='$X' AND Y='$Y'");
$perso=$zone_cible['perso'];
$bat=$zone_cible['bat'];
if($bat = 0 AND $perso = 0 )///Si la zone ne contient pas de perso ou de batiment///
{
if($calibre =>100 )///Si le calibre de l'arme est supérieure ou égale à 100
{
$modif_terrain = $db->extract_one("SELECT terrain FROM map WHERE X='$X' AND Y='$Y'");
$anc_terrain=$modif_terrain['terrain'];
$nouv_terrain = $db->extract_one("SELECT modif FROM terrain WHERE id='$anc_terrain'");
$modif=$nouv_terrain['terrain'];
$attaque_restant=$attaque-1;
if($attaque!='0')
{
$sql = ("UPDATE map SET terrain= '$modif' WHERE X='$X' AND Y='$Y'");
$sql = ("UPDATE membres SET attaque = '$attaque_restant' WHERE id='$id'");
$message1.='<center>Vous avez touché la case '.$X.'/'.$Y.'</center>';
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
}
else
{
if($bat = 1 )///Si la case visé contient un batiment
{
$bat_cible = $db->extract_one("SELECT bat FROM map WHERE X='$X' AND Y='$Y'");
$bat=$bat_cible['bat'];
$bat1 = $db->extract_one("SELECT resistance,camp FROM batiments WHERE id='$bat'");
$resistance=$bat1['resistance'];
$camp=$bat1['camp'];
$nouvelle_resistance = $resistance-$degats;
$attaque_restant=$attaque-1;
if($attaque!='0')
{
$sql = "UPDATE batiments SET resistance = '$nouvelle_resistance' WHERE id='$bat'";
$camp_joueur = $db->extract_one("SELECT camp FROM membres WHERE id='$id'");
if ($camp==$camp_joueur) $gain_xp=rand(-2,0);
if ($camp!=$camp_joueur) $gain_xp=rand(1, 3);
xp($gain_xp,$id);
$message1.='<center>Vous avez touché la case '.$X.'/'.$Y.' Nos premiéres Lignes rapportent que vous avez endommagé un batiments.<br>Vous gagnez '.$gain_xp.' Xp\'s</center>';
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
else
{
if($perso = 1 )///Si la case visé contient un perso
{
$qui_cible = $db->extract_one("SELECT perso FROM map WHERE X='$X' AND Y='$Y'");
$cible_perso = $db->extract_one("SELECT pv,camp FROM membres WHERE id='$perso'");
$pv_cible=$perso_cible['pv'];
$camp=$perso_cible['camp'];
$nouveau_pv=$pv-$degats;
$attaque_restant=$attaque-1;
if($attaque!='0')
{
$sql = "UPDATE membres SET pv = '$nouveau_pv' WHERE id='$perso'";
$req = mysql_query($sql) or die(mysql_error());
$sql = "UPDATE membres SET attaque = '$attaque_restant' WHERE id='$id'";
$req = mysql_query($sql) or die(mysql_error());
$message1.='<center>Vous avez touchez la case '.$X.'/'.$Y.' avec '.$degats.' de dégats.</center>';
if ($camp==$camp_cible) $gain_xp=rand(-2,0);
if ($camp!=$camp_cible) $gain_xp=rand(3, 5);
xp($gain_xp,$id);
$message1.='<center><br>Vous gagnez '.$gain_xp.' Xp\'s</center>';
////Si le perso meurt
if($pv_restant<='0' )
{
$message1.='<center>Celui-ci s\'écroule par terre, il est mort...</center>';
////On retire la cible de la map
$sql = "UPDATE map SET perso = '0' WHERE perso='$id_cible'";
$req = mysql_query($sql) or die(mysql_error());
/////On met a jour les pv's et le nombre de mort de la victime
$sql = "UPDATE membres SET mort = mort+1 ,pv = pv_max WHERE id='$id_cible'";
$req = mysql_query($sql) or die(mysql_error());
////On met a jour les Xp's si necessaire
$mort1 = $db-> extract_one("SELECT mort FROM membres WHERE id='$id_cible'");
$mort = $mort1['mort'];
if($mort==10)
{
$cible1 = $db-> extract_one("SELECT xp FROM membres WHERE id='$id_cible'");
$xp=$cible1['xp'];
$perte_xp=$xp * 20/100;
$new_xp=$xp-$perte_xp;
$sql = "UPDATE membres SET xp = '$new_xp' ,mort = '0' WHERE id='$id_cible'";
$req = mysql_query($sql) or die(mysql_error());
}
////On met a jour le nombdre de victime du joueur.
$sql = "UPDATE membres SET victime = victime+1 WHERE id='$id'";
$req = mysql_query($sql) or die(mysql_error());
}
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
}
}
}
break;
}
}
$_SESSION['message1']=$message1;
header('location: jouer.php');
?>