HT_lz_cont_head

Würfeln 🎲 🎲 🎲...

17.03.2023 13:36
#1 Würfeln 🎲 🎲 🎲...
l2

würfeln - eine Idee aus dem Support Wuerfelfunktion-bbCode

ein 1. Versuch
auf creators Idee aufbauend, ein neuer HTML-Code für die Iconbar


z. B. :

1
2
3
4
5
6
7
8
9
10
11
12
13
 
<div id="custom_iconbar_wuerfel" class="xob_icon_cont">Würfel</div>
<script>
document.getElementById("custom_iconbar_wuerfel").addEventListener("click", function(){
 
function wuerfel() {
let x=Math.floor(1+ 6*Math.random());
return "[size=4] "+String.fromCharCode(0x2680 -1 +x)+"[/size]";
}
xob_insert(wuerfel());
});
</script>
 

 

~ ~ a smile 😃 says more than 1000 words ~ ~


 Antworten

 Beitrag melden
17.03.2023 14:15
#2 RE: würfeln
l2

mit dem obigen Beispiel wird, der 'Wurf' gleich ins Messagefeld kopiert.

und wenn das Ergebnis nicht 'passt', könnte man den 'Wurf' löschen und einen neuen tätigen.

die hier vorgestellte Notation https://en.m.wikipedia.org/wiki/Dice_notation

https://de.wikipedia.org/wiki/Tri-Stat_dX

wenn nur ein Platzhalter z.B. [3D6] ins Messagefeld geschrieben wird, bleibt das Ergebnis zunächst verborgen

[​3D6]: ⚂ ⚂ ⚁ (8)

1
2
3
4
5
6
7
8
 
<div id="custom_iconbar_3D6" class="xob_icon_cont">[ 3D6]</div>
<script>
document.getElementById("custom_iconbar_3D6").addEventListener("click", function(){
let bbc="[3D"+"6]"; // Schreibweise, damit hier nix ersetzt wird
xob_insert(bbc);
});
</script>
 
 



so lassen sich noch weitere Buttons definieren
[​3D6+4]: ⚀ ⚁ ⚀[+4] (8)

1
2
3
4
5
6
7
 
<div id="custom_iconbar_3D6_4" class="xob_icon_cont">[ 3D6+4]</div>
<script>
document.getElementById("custom_iconbar_3D6_4").addEventListener("click", function(){
let bbc="[3D"+"6+4]";
xob_insert(bbc);
});
</script>
 



nun muss man nur noch dafür sorgen, dass diese Dice-Regeln ausgeführt (gewürfelt) wird, ohne dass der User das Ergebnis manipulieren kann.
Dazu bekommt der Speichern-Button eine zusätzliche click-Funktion, die das Würfeln übernimmt und das Ergebnis vorm Abspeichern im Messagetext ersetzt.
Der Einfachheit halber definiere ich diese Funktion im Scriptblock eines Würfelbuttons.

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
 
<div id="custom_iconbar_5D10_8" class="xob_icon_cont">[ 5D10+8]</div>
<script>
document.getElementById("custom_iconbar_5D10_8").addEventListener("click", function(){
let bbc="[5D10"+"+8]";
xob_insert(bbc);
});
 
document.addEventListener('DOMContentLoaded', function(){
const qs="[type='submit'][name='a1'], [i][url=/search.php?zeit=9999&s=2&forum=0&q=kw%3Asubmit][style=display:none]kw:[/style]#submit[/url][/i]";
var submit_but=document.querySelector(qs);
if ( ! submit_but) {alert ("wuerfel: submit Button? "+qs); return}
 
submit_but.addEventListener("click", function() {
let ta=document.getElementById("messagetext");
if ( !ta ) {alert ("wuerfel: kein messagetxt"); return}
 
function wuerfel3(anzahl,seiten,bonus) {
let sum=bonus;
let txt="";
for (var n=0; n < anzahl;n++) {
let x=Math.floor(1+ seiten*Math.random());
txt+=" "+(seiten>6 ? ("["+x+"]") : String.fromCharCode(0x2680 -1 +x));
sum +=x;
}
 
txt="[size=4] "+txt+"[/size]";
if (bonus>0) txt +="[+" +bonus+"]";
return txt+" ("+sum+")";
}
 
var r, rg=/\[(\d+)D(\d+)\]/;
while( r=rg.exec(ta.value)) {
// console.log("würfel r:" +r);
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],0));
}
 
rg=/\[(\d+)D(\d+)\+(\d+)\]/;
while( r=rg.exec(ta.value)) {
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],1*r[3]));
}
});
});
</script>
 



ausprobieren kann man es in diesem Thread würfeln ... ⚂ ⚀ ⚁ . . . testen
[​3D6]: ⚀ ⚂ ⚄ (9)
[​3D6]: ⚅ ⚃ ⚂ (13)

~ ~ a smile 😃 says more than 1000 words ~ ~


 Antworten

 Beitrag melden
18.03.2023 09:28 (zuletzt bearbeitet: 19.03.2023 22:21)
#3 RE: würfeln
l2

die vielen Iconbar-Bausteine sind mir zu umständlich.
Jetzt gibt es nur noch einen, der weitere xob_icons dynamisch erstellt.

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
 

<div class="wuerfel xob_icon_cont">[Würfel]</div>
<script>
(function() {
console.log("Wuerfel random zufall konfu Vers 18.3. ");
let dv=document.querySelector(".wuerfel");
if (!dv) alert("würfel no dv");
for (var tt of "Random,Konfu,Zufall,2D6,6D6,3D6,3D6+4,3D10+8".split(",")) {
let nd=dv.cloneNode(true);
nd.innerText="["+tt+"]";
dv.parentNode.insertBefore(nd,dv);
if (tt.charAt(0)=="Z") nd.onclick=function(){
let orte=["Dublin", "den Aldi","die Schule","den Wald"];
let taeter=["ein Vampir","ein Räuber","eine Nachbarin","ein Nachtwächter"];
let waffen=["einem Messer","einer Taschenlampe","seinem Daumen","einem Handy"];
function one_of(liste) {
let r="Fehler - kein Array! ";
if (Array.isArray(liste) ) {
r=liste[Math.floor(liste.length * Math.random())];
}
return r;
}
let txt="Ihr schlendert nichtsahnend durch "+one_of(orte)
+", als plötzlich "+one_of(taeter)
+" vor euch steht. Er bedroht euch mit "+one_of(waffen)
+".";
xob_insert(txt);
}
 
else if (tt.charAt(0)=="K") nd.onclick=function(){
let s=prompt("Konfu's Text eingeben","");
if (s) {s="\n[konfu]"+s.replace(/R/g,"L").replace(/r/g,"l")+"[/konfu]";
xob_insert(s);
}
}
 
else if (tt.charAt(0)=="R") nd.onclick=function(){
let s=prompt("Test Wuerfelverteilung Math.random()"
+"\n\nWie oft soll gewuerfelt werden?","100");
if (s && 1*s>0 ) {
let lst=[0,0,0,0,0,0,0];
for (var l=1*s;l>0 ;l--) {
lst[Math.floor( 6*Math.random())]++;
}
s="\nAnzahl der Würfe: "+1*s;
for(var l=1; l<7 ;l++){
s+="\n"+l+": "+lst[l-1];
}
}
xob_insert(s);
}
else
nd.onclick=function(){xob_insert(this.innerText)};
 
} // tt
dv.onclick=function(){
let x=Math.floor(1+ 6*Math.random());
xob_insert( "[size=4] "+String.fromCharCode(0x2680 -1 +x)+"[/size]");
}
})();
 
document.addEventListener('DOMContentLoaded', function(){
 
const qs="input[type='submit'][name='a1'], #submit";
var submit_but=document.querySelector(qs);
 
if ( ! submit_but) {alert ("wuerfel: submit Button? "+qs); return}

submit_but.addEventListener("click", function() {
let ta=document.getElementById("messagetext");
if ( !ta ) {alert ("wuerfel: kein messagetxt"); return}

function wuerfel3(anzahl,seiten,bonus) {
let sum=bonus;
let txt="";
for (var n=0;n < 1*anzahl;n++) {
let x=Math.floor(1+ seiten*Math.random());
txt+=" "+(seiten>6 ? ("["+x+"]") : String.fromCharCode(0x2680 -1 +x));
sum +=x;
}

// txt="[size=4] "+txt+"[/size]";
txt=" ["+String.fromCharCode(0x200b)+ anzahl+"D"+seiten+(bonus>0 ? ("+"+bonus):"")
+"]: [size=4] "+txt+"[/size]";

if (bonus>0) txt +="[+" +bonus+"]";
return txt+" ("+sum+")";
}
 
var r, rg=/\[(\d+)D(\d+)\]/;
while( r=rg.exec(ta.value)) {
console.log("würfel r:" +r);
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],0));
}
 
rg=/\[(\d+)D(\d+)\+(\d+)\]/;
while( r=rg.exec(ta.value)) {
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],1*r[3]));
}
});
});
</script>
 
 



Edit 19.3.
function wuerfel3() verbessert ... würfeln ... ⚂ ⚀ ⚁ . . . testen

~ ~ a smile 😃 says more than 1000 words ~ ~


 Antworten

 Beitrag melden
24.03.2023 10:11
#4 RE: würfeln
l2

für TreeTalk musste das Script angepasst werden.

Hier eine vorläufige Version:

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
 
<div class="wuerfel xob_icon_cont">[Würfel]</div>
<script>
(function() {
console.log("Wuerfel talk random zufall konfu Vers 22.3. ");
let dv=document.querySelector("div.wuerfel");
 
function one_of(liste) {
let r="Fehler - kein Array! ";
if (Array.isArray(liste) && liste.length ) {
r=liste[Math.floor(liste.length * Math.random())];
}
return r;
}
 
var t3_text = function(t3_listen) {
let txt="";
for (var liste of t3_listen) {
let zs=liste.split("\n");
for (var z=zs.length-1;z>=0;z--) {if (zs[z]=="") zs.splice(z,1);}
txt += one_of(zs);
}
return txt;
}
 

if (!dv) alert("würfel no dv");
for (var tt of "Random,Konfu,meinText,Zufall,1D6,2D6,6D6,3D6,3D6+4,3D10+8".split(",")) {
let nd=dv.cloneNode(true);
nd.innerText="["+tt+"]";
dv.parentNode.insertBefore(nd,dv);
 
if (tt.charAt(0)=="Z") nd.onclick=function(){
let t3=l2b.loc.get2("Zufall",["","",""]);
function t3_add(n,t3,liste) {
let zs=t3[n].split("\n");
for (var z=zs.length-1;z>=0;z--) {if (zs[z]=="") zs.splice(z,1);}
return zs.length? zs : liste ;
}
 
let orte=t3_add(0,t3,["Dublin", "den Aldi","die Schule","den Wald"]);
let taeter=t3_add(1,t3,["ein Vampir","ein Räuber","eine Nachbarin","ein Nachtwächter"]);
let waffen=t3_add(2,t3,["einem Messer","einer Taschenlampe","seinem Daumen","einem Handy"]);
let txt="Ihr schlendert nichtsahnend durch "+one_of(orte)
+", als plötzlich "+one_of(taeter)
+" vor euch steht. Er bedroht euch mit "+one_of(waffen)
+".";
xob_insert(txt);
}
 
else if (tt.charAt(0)=="m") nd.onclick=function(){
let t3=l2b.loc.get2("meinText",["noch keine Zufallstexte definiert, "
,"erzeuge [meinText] - Zufallstexte auf: "
,"dieser Seite https://test-v6.xobor.de/page-bbc.html"]);
 
xob_insert(t3_text(t3));
}
 
else if (tt.charAt(0)=="yy") nd.onclick=function(){
 
}
 
else if (tt.charAt(0)=="K") nd.onclick=function(){
let s=prompt("Konfu's Text eingeben","");
if (s) {s="\n[konfu]"+s.replace(/R/g,"L").replace(/r/g,"l")+"[/konfu]";
xob_insert(s);
}
}
 
else if (tt.charAt(0)=="R") nd.onclick=function(){
let s=prompt("Test Wuerfelverteilung Math.random()"
+"\n\nWie oft soll gewuerfelt werden?","100");
if (s && 1*s>0 ) {
let lst=[0,0,0,0,0,0,0];
for (var l=1*s;l>0 ;l--) {
lst[Math.floor( 6*Math.random())]++;
}
s="\nAnzahl der Würfe: "+1*s;
for(var l=1; l<7 ;l++){
s+="\n"+l+": "+lst[l-1];
}
}
xob_insert(s);
}
else
nd.onclick=function(){xob_insert(this.innerText)};
 
} // tt
dv.onclick=function(){
let x=Math.floor(1+ 6*Math.random());
xob_insert( "[size=4] "+String.fromCharCode(0x2680 -1 +x)+"[/size]");
}
})();
 

document.addEventListener('DOMContentLoaded', function(){
 
function wuerfeln_ta(ta){
 
if ( !ta ) {alert ("wuerfel: kein messagetxt"); return}

function wuerfel3(anzahl,seiten,bonus) {
let sum=bonus;
let txt="";
for (var n=0;n < 1*anzahl;n++) {
let x=Math.floor(1+ seiten*Math.random());
txt+=" "+(seiten>6 ? ("["+x+"]") : String.fromCharCode(0x2680 -1 +x));
sum +=x;
}
txt=" ["+String.fromCharCode(0x200b)+ anzahl+"D"+seiten+(bonus>0 ? ("+"+bonus):"")
+"]: [size=4] "+txt+"[/size]";
if (bonus>0) txt +="[+" +bonus+"]";
return txt+" ("+sum+")";
}
 
var r, rg=/\[(\d+)D(\d+)\]/;
while( r=rg.exec(ta.value)) {
console.log("würfel r:" +r);
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],0));
}
 
rg=/\[(\d+)D(\d+)\+(\d+)\]/;
while( r=rg.exec(ta.value)) {
ta.value=ta.value.replace(r[0],wuerfel3(1*r[1],1*r[2],1*r[3]));
}
} // wuerfeln_ta()
 
const qs="input[type='submit'][name='a1'], #submit"
+", input.treetalk_button[type='submit']";
var submit_buts=document.querySelectorAll(qs);
console.log("in domcont: "+qs);
 
if ( ! submit_buts) {alert ("wuerfel: submit Button? "+qs); return}
 
for (let i=0; submit_buts && i<submit_buts.length; i++) {
let submit_but=submit_buts[i];
 
if (submit_but.classList.contains("treetalk_button")) {
var frm=submit_but.form;
frm.onsubmit=function(){
let ta=this.elements.tree_msg;
wuerfeln_ta(ta);
debugger;
return tree_formfieldcheck(ta.value);
}
}
 
var ta=document.getElementById("messagetext");
if (ta) submit_but.addEventListener('click',function(){
console.log("submit_but click");
wuerfeln_ta(ta);
debugger;
});
}
}); // domcontent
</script>
 

 

~ ~ a smile 😃 says more than 1000 words ~ ~


 Antworten

 Beitrag melden
24.03.2023 10:19
#5 RE: würfeln 🎲 🎲 🎲...
l2

Würfeln im Chat ist noch eine weitere Herausforderung:

https://www.hpm-support.de/t545537f11769...ntegrieren.html

im Chat gibt's keine herkömmliche Iconbar, ein paar Ideen hab ich mir schon gemacht.
Bevor sie wieder vergessen werden, hier ein vorläufiger ungetesteter Teil

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
 
document.addEventListener('DOMContentLoaded', function(){
 
const vers="23.3. "
const Regeln="3D6,1D6";
const position= -10;
 
const cn= "xsbemoji";
 
var clog = function(s) {
console.log("XSHOUT: "+s);
}
var cloge = function(s) {
c.log("ERROR: "+s);
}
 
var qs;
let xshout=document.getElementById("xShoutbox");
if (xshout) {
clog("Start Vers:"+vers);
qs="#xShoutbox span."+cn;
let symbol_lst=document.querySelectorAll(qs);
clog("Anzahl der Symbole: "+symbol_lst.length);
if (symbol_lst && symbol_lst.length>2)
for (var regel of Regeln.split(",")) {
let span=document.createElement("span");
span.classList.add(cn);
span.appendChild(document.createTextNode("["+regel+"]"));
let span_pos=symbol_lst[postion>0?(position-1): (symbol_lst.length-2+position)];
span_pos.parentNode.insertBefore(span,span_pos);
}
else {
cloge("keine Symbol-Liste/iconBar? "+qs);
}
 
let qs="#xShoutbox input.SbNewMessage";
let inp=document.querySelector(qs);
if (!inp) cloge("kein Input? "+qs)
 
let qs="#xShoutbox input.btn.btn-primary"
let submit_shout=document.querySelector(qs);
if (submit_shout && inp) {
 
submit_shout.addEventListener("click", function() {

function wuerfel3(anzahl,seiten,bonus) {
let sum=bonus;
let txt="";
for (let n=0;n < 1*anzahl;n++) {
let x=Math.floor(1+ seiten*Math.random());
txt+=" "+(seiten>6 ? ("["+x+"]") : String.fromCharCode(0x2680 -1 +x));
sum +=x;
}
txt=" ["+String.fromCharCode(0x200b)+ anzahl+"D"+seiten+(bonus>0 ? ("+"+bonus):"")
+"]: "+txt;
if (bonus>0) txt +="[+" +bonus+"]";
return txt+" ("+sum+")";
}
 
var r, rg=/\[(\d+)D(\d+)\]/;
while( r=rg.exec(ta.value)) {
inp.value=inp.value.replace(r[0],wuerfel3(1*r[1],1*r[2],0));
}
 
rg=/\[(\d+)D(\d+)\+(\d+)\]/;
while( r=rg.exec(ta.value)) {
inp.value=inp.value.replace(r[0],wuerfel3(1*r[1],1*r[2],1*r[3]));
}
});
 
} else cloge("kein submit? "+qs);

} // xshout
 
}); // DOMContentLoaded
 

 
 



hier eine Test-Ansicht der Support-Seite:

Gäste können sich hier würfeln ... ⚂ ⚀ ⚁ . . . testen an der Diskussion beteiligen.

~ ~ a smile 😃 says more than 1000 words ~ ~


 Antworten

 Beitrag melden
Bereits Mitglied?
Jetzt anmelden!
Mitglied werden?
Jetzt registrieren!