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:
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
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>
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 :/
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"> </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é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é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>
En résumé, il semble que le problème se situe au niveau de
qui fait référence, dans le formulaire, à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Valeurs ["tir"] = parseInt($("#tir").attr("value"));
Merci d'avance pour votre aide
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>![]()
Partager