Bonjour,

Je suis actuellement en train de mettre à jour un solveur de combat pour une communauté jeu de rôle par forum. Plusieurs panneaux devaient être mis à jour (corps à corps, tir), mais je suis actuellement bloqué sur le panneau de tir.

J'ai modifié avec succès le panneau corps à corps qui fonctionne correctement, mais le panneau tir semble avoir un problème avec la récupération d'une valeur entrée dans un des champs du formulaire HTML où le joueur est censé mettre les données des protagonistes du combat.

Voyez:
http://warforum-jdr.com/solveur/indexV3.html

> Onglet Tir
TIR du tireur: entrez par exemple 12
Malus de distance si présent : laissez 0
Dégats arme de l'attaquant: entrez par exemple 20
END du défenseur: entrez par exemple 10.

Et cliquez sur l'image de dé: vous obtiendrez une erreur disant que deux champs sont vides. En vérité, un seul champs semble détecté comme vide (c'est tir, lié à "TIR du tireur") car le second (tirfinal) dépend de tir et donc si tir est vide, tirfinal l'est aussi.

Voici le code du script:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<script type="text/javascript">
			//  affichage des onglets et gestion jQuery UI
 
 
 
			$(function(){
				$('#tabs').tabs();
				$('#dialog_link, ul#icons li').hover(
					function() { $(this).addClass('ui-state-hover'); }, 
					function() { $(this).removeClass('ui-state-hover'); }
				);
			});
 
			$(document).ready(function() {
// ---------------------------------------------------------------					
//gestion du formulaire pour les attaques à distance
				$("#tir-but").click(function() {
 
					// vide les champs générés par le JavaScript pour permettre de relancer le formulaire
					$("#tir-dice, #tir-result").empty();
 
					// mise en Array des valeurs du formulaire
					var Valeurs = new Array();
						Valeurs ["tir"] = parseInt($("#tir").attr("value"));
						Valeurs ["tirmalus"] = (parseInt($("#tir-malus").attr("value")))*2;
						Valeurs ["tirfinal"] = Valeurs ["tir"] - Valeurs ["tirmalus"];
						Valeurs ["protect"] = parseInt($("#tir-protect").attr("value"));
						Valeurs ["attDmg"] = parseInt($("#tir-weap").attr("value"));
						Valeurs ["endadversaire"] = parseInt($("#tir-endadversaire").attr("value"));
 
					var resultat= "";
 
					// vérifie si les champs sont corrects, et renvoit un message d'erreur en fonction
					var verif_champs = "";
					for(val in Valeurs) {
						if(isNaN(Valeurs[val]))
							verif_champs += "le champs " + val + " n'est pas rempli ou n'est pas un nombre \n";
					}
 
					//si souci avec le formulaire, on n'execute pas le script
					if (verif_champs!="") {
						alert (verif_champs);
						return false;
					}
 
					//génère le jet de dés à utiliser
					var tirDice=Math.floor(Math.random()*20)+1;
 
					// traitement selon les règles du jeu des données du formulaire + jets de dés, et renvoit dans le tableau
					$("#tir-dice").append(tirDice);
 
				if (tirDice <= Valeurs ["tirfinal"]) 
				{
						resultat += "Votre tir a réussi (" + tirDice + "). ";
 
 
				//traitement des cas pour les dégats !
 
								var dmgtotaux = Valeurs ["attDmg"] - Valeurs ["endadversaire"] - Valeurs ["protect"] - Valeurs ["tirmalus"];
								resultat += "Vous lui infligez une perte de " + dmgtotaux + " PV's.";
 
				}
				else 
				{
						resultat += "Votre tir a échoué (" + tirDice + ").";
 
				}
					$("#tir-result").append(resultat);
				});
			});
</script>
Et le code du formulaire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<div id="tabs-4">
				<div id="tir">
					<table>
                    <tr>
                      <td style="text-decoration:underline"><strong>Jet de localisation <a title="1 à 2 = Tête || 3 à 7 = Bras || 8 à 11 = Jambes || 12 à 20 = Torse/Dos">(?)</a>: 
                        <script type="text/javascript">document.write(Math.floor(Math.random()*20)+1);</script>
                      </strong></td></tr>
                      <tr>
						  <td>Une armure entre-t-elle en compte suivant le jet de localisation ? </td>
						  <td><input type="text" id="tir-protect" value="0"/></td>
						  <td align="right">&nbsp;</td>
						  <td><span id ="tir"></span><span id ="tirmalus"></span></td>
						  </tr>
						<tr>
							<td>TIR du tireur</td>
                          <td><input type="text" id="tir"/></td>
                          <td>Malus de distance si pr&eacute;sent <br>(juste le chiffre)</td>
                          <td><input type="text" id="tir-malus" value="0" /></td>
						</tr>
						<tr>
							<td>Dégats arme de l'attaquant</td>
                  <td> <input type="text" id="tir-weap"/></td>
                  <td>END du d&eacute;fenseur</td>
                  <td><input type="text" id="tir-endadversaire"/></td>
					  </tr>
						<tr>
							<td>	Résultat : </td>
                          <td colspan="4"> <span id ="tir-result"></span></td>
						</tr>
						<tr>
							<td><span id="tir-but"><img src="img/de2-gris.png" height="30px" onclick="roll(champDe2);champDe2.style.backgroundColor = '#DDDDFF';" onmouseout="champDe2.style.backgroundColor = '';" style="cursor:pointer;" /></span></td>
						</tr>
					</table>
				</div>
Je ne comprends pas le problème, je vérifie depuis un certain temps maintenant mais je passe à côté de l'erreur (en plus du fait que le jquery n'est pas vraiment ma tasse de thé). Je ne comprend pas car le solveur du corps à corps est plus complexe et lui fonctionne parfaitement :/

En résumé, il semble que le problème se situe au niveau de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Valeurs ["tir"] = parseInt($("#tir").attr("value"));
qui fait référence, dans le formulaire, à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<tr>
							<td>TIR du tireur</td>
                          <td><input type="text" id="tir"/></td>
....
						</tr>
Merci d'avance pour votre aide