Bonsoir,

Je suis actuellement en train de concevoir un script de lancer de dés pour du JDR; parti d'un vieux script préexistant, je suis arrivé à ceci (c'est sûrement pas propre mais c'est du WIP):

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
 
<body>
<!-- Début lanceur -->
<SCRIPT language="JavaScript">
<!--
function rnd(x) {
return Math.floor(Math.random()*x)+1}
function droll(s) {
var pos=0
var posp
var posm
var moins=1
var oldm
var sd
var v=0
var arrs
do {
if(pos>=s.length) return v
posp=s.indexOf("+",pos)
posm=s.indexOf("-",pos)
if(posp<0) posp=9999
if(posm<0) posm=9999
if(posm==posp) {
oldm=moins
sd=s.substr(pos)
pos=s.length+1
} else {
if(posm<posp) {
oldm=moins
moins=-1
sd=s.substr(pos,posm-pos)
pos=posm+1
} else {
oldm=moins
moins=1
sd=s.substr(pos,posp-pos)
pos=posp+1
}
}
arrs=sd.split("d")
if(arrs.length==1) {
v=v+arrs[0]*oldm
} else {
if(arrs[0]=='') arrs[0]="1"
for(var a=0;a<arrs[0];a++) {
v+=rnd(arrs[1])*oldm
}
}
} while(true)
}
function calcul(s,n) {
var txt
var msgWindow=null
var cpt3=0
var nl=0
txt='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'
txt+='<HTML><HEAD><TITLE>Résultat</TITLE></HEAD>'
txt+='<BODY TEXT="#FFFFFF" background="http://warforum-jdr.com/phpBB3/styles/chronicles/theme/images/border_background.jpg" LINK="#FFFF00" VLINK="#FF0000" ALINK="#FF8040">'
txt+='<FORM><CENTER> <p>Comment faire ? Décrivez simplement le types de dés (1d6,1d20,3d8+3,2d6+,1d8-1,...) et indiquez ensuite le nombre de lancers</p>'
txt+='<FONT SIZE=+1>Type de dés &agrave; lancer&nbsp;:&nbsp;<INPUT TYPE="text" NAME="des" VALUE="'+s+'" SIZE=30><BR>'
txt+='Nombre de lancers&nbsp;:&nbsp;<INPUT TYPE="text" SIZE=3 NAME="nbr" VALUE="' + n + '"></CENTER>&nbsp;<BR>'
txt+='<CENTER><INPUT TYPE="button" VALUE="Lancer&nbsp;!" NAME="BtnLan" onClick="window.opener.calcul(des.value,nbr.value)"></CENTER>'
txt+='</FORM><HR WIDTH="100%"><BR>'
txt+='<TABLE ALIGN=CENTER BORDER="1" CELLSPACING="1"  background="http://warforum-jdr.com//phpBB3/sjdr/bgform.png" CELLPADDING="10" WIDTH="90%">'
txt+='<TR ALIGN=CENTER> <TD COLSPAN=10><FONT SIZE=+2 color="#000000">Résultat&nbsp;:</FONT></TD> </TR>'
txt+='<TR ALIGN=CENTER> <TD COLSPAN=10><FONT color="#000000">Dés&nbsp;: ' + s + '&nbsp;&nbsp;</FONT>'
txt+='<TR ALIGN=CENTER> <TD COLSPAN=10><FONT color="#000000">Nombre de lancers&nbsp;: ' + n + '</FONT></TD> </TR>'
txt+='<TR ALIGN=CENTER>'
for(var a=0;a<n;a++) {
if((cpt3/10==Math.floor(cpt3/10))&&(cpt3!=n)&&(cpt3!=0)) {
txt+='</TR><TR ALIGN=CENTER>'
nl++
cpt3=0
}
b=droll(s)
txt+='<TD WIDTH="10%"><FONT color="#000000">' + b + '</FONT></TD>'
cpt3++
}
for(a=cpt3;a<10;a++) {
txt+='<TD WIDTH="10%"><FONT color="#000000">&nbsp;</FONT></TD>'
}
txt+='</TABLE>'
txt+='</FONT><CENTER><IMG SRC="http://warforum-jdr.com/wiki-v2/lib/tpl/monobook/user/logo.png" /><br>&copy;<a href="http://warforum-jdr.com">Warforum JDR</a></CENTER></BODY></HTML>'
msgWindow=window.open("","msgWindow","toolbar=0,menubar=0,locationbar=0,personalbar=0,scrollbars")
msgWindow.innerWidth=600
msgWindow.innerHeight=100
msgWindow.document.close()
msgWindow.document.open()
var dh=msgWindow.outerHeight-msgWindow.innerHeight
msgWindow.innerHeight=580
msgWindow.document.write(txt)
msgWindow.document.close
}
//-->
</SCRIPT>
<span style="font-size:11px;">
<FORM>
 
<CENTER>
  <p title="Décrivez simplement le types de dés (1d6,1d20,3d8+3,2d6+,1d8-1,...) et indiquez ensuite le nombre de lancers" style="text-decoration:underline">Comment faire ?</p>
  <p>Type de dés &agrave; lancer&nbsp;:&nbsp;<INPUT TYPE="text" NAME="des" SIZE=30><BR>
    Nombre de lancers&nbsp;:&nbsp;
    <INPUT TYPE="text" SIZE=3 NAME="nbr">
  </p>
</CENTER>
&nbsp;<BR>
<CENTER><INPUT TYPE="image"  src="http://warforum-jdr.com/phpBB3/sjdr/de2-gris.png" VALUE="Lancer&nbsp;!" NAME="BtnLan" onClick="calcul(des.value,nbr.value)"></CENTER>
 
</FORM>
<!-- Fin lanceur -->
      </small><br/>
 </span>
</body>
</html>
Seulement, j'ai un problème: lorsque, sur la page initiale contenant ce code, on appuie sur le bouton de lancer (qui ouvre une page en pop up avec le lanceur + les résultats), la page initiale est rafraichie, ce qui efface les données dans le lanceur initial, mais aussi les données de possibles autres formulaires sur la page. Je ne vois pas d'où cela vient, hormis que cela fait partie du code du script de base.

Pouvez-vous m'éclairer sur ça ?

Merci d'avance