Техническая поддержка сервиса Quadro.Boards

Объявление

Новости сервиса

О форуме

Quadro.Support – это форум технической поддержки различных проектов и сервисов Quadro.Systems LLC, на котором грамотные технические специалисты всегда смогут помочь вам в решении проблем, или же подсказать ответы на самые сложные вопросы. Так же на форуме собрана обширная база знаний по различным аспектам наших сервисов. Не забывайте пользоваться поиском ;)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Кубики (Дайсы). Duka

Сообщений 1 страница 20 из 59

1

Скрипт позволит "кидать" кубики прямо на форуме.
Полезно для ролевых форумов.

Старые варианты скрипта

Вариант 1.

Код:
<input type="button" onclick="dice()" value="Кинуть кубики" />
<script type="text/javascript">
function dice()
{
	var FoundErrors = '';
	var diceRes=""
	var CountCube = prompt("Количество кубиков", "3");
	var SideCube = prompt("Сколько граней у кубика?", "6");
	if(CountCube>9){
	alert("Нельзя бросать столько кубиков"); 
	return false;}
	if(SideCube>9){
	alert("Не бывает таких кубиков"); 
	return false;}
	if (!CountCube)
	{return false;}
	if (!SideCube)
	{return false;}
	for(i=0; i<CountCube;i++){
	var dice = (Math.round(Math.random()*SideCube))
	if(dice==0) dice=1;
	diceRes += dice*1936+"-"
	}
	smile('[dice='+diceRes+CountCube+SideCube+']')
}
</script>
<script>
function addDice(str,from,internal){
var pos=0,pos2=0,newpos=0
if((pos=str.indexOf("[dice=",from))==-1) return str;
if((pos2=str.indexOf("]"),pos+6)==-1) return str;
newpos=str.indexOf("]",pos+6)
if(newpos<pos2 && newpos!=-1) str=addDice(str,pos+6,true)
if((pos2=str.indexOf("]",pos+6))==-1) return str;
str=str.substring(0,pos)+makeDice(str.substring(pos+6,pos2))+str.substring(pos2+1,str.length)
if( str.indexOf("[dice=")!=-1 && internal==false) str=addDice(str,0,false)
return str}

function makeDice(dice){
diceMass = dice.split("-")
diceC = dice.substring(dice.length-2, dice.length-1)
diceS = dice.substring(dice.length-1, dice.length)
var diceR=0, diceRu="";
for(i=0;i<diceMass.length-1;i++){diceR+=diceMass[i]/1936;}
for(i=0;i<diceMass.length-1;i++){if(diceMass[i]==diceMass[diceMass.length-2]){diceRu+=diceMass[i]/1936;}else{diceRu+=parseInt(diceMass[i]/1936)+"+";}}
txt="<div class=\"quote-box\"><blockquote><p><b>Количество кубиков</b>: "+diceC+"<br /><b>Граней в кубике</b>: "+diceS+"<br /><br /><b>Результаты броска</b>: ("+diceRu+")="+diceR+"</p></blockquote></div>"
return txt}

if(document.URL.indexOf("viewtopic.php")!=-1){
elm=document.getElementById("pun-main").getElementsByTagName("div")
for(x in elm) if(elm[x].className=="post-content"){
var post=elm[x]
post.innerHTML=addDice(post.innerHTML,0,false)}}
</script>

Вариант 2.

Код:
<input type="button" onclick="dice()" value="Кинуть кубики" />
<script type="text/javascript">
function dice()
{
	var FoundErrors = '';
	var diceRes=""
	var CountCube = prompt("Количество кубиков", "3");
	var SideCube = prompt("Сколько граней у кубика?", "6");
	if(CountCube>9){
	alert("Нельзя бросать столько кубиков"); 
	return false;}
	if(SideCube>9){
	alert("Не бывает таких кубиков"); 
	return false;}
	if (!CountCube)
	{return false;}
	if (!SideCube)
	{return false;}
	for(i=0; i<CountCube;i++){
	var dice = (Math.round(Math.random()*SideCube))
	if(dice==0) dice=1;
	diceRes += dice*1936+"-"
	}
	smile('[dice='+diceRes+CountCube+SideCube+']')
}
</script>
<script>
function addDice(str,from,internal){
var pos=0,pos2=0,newpos=0
if((pos=str.indexOf("[dice=",from))==-1) return str;
if((pos2=str.indexOf("]"),pos+6)==-1) return str;
newpos=str.indexOf("]",pos+6)
if(newpos<pos2 && newpos!=-1) str=addDice(str,pos+6,true)
if((pos2=str.indexOf("]",pos+6))==-1) return str;
str=str.substring(0,pos)+makeDice(str.substring(pos+6,pos2))+str.substring(pos2+1,str.length)
if( str.indexOf("[dice=")!=-1 && internal==false) str=addDice(str,0,false)
return str}

function makeDice(dice){
diceMass = dice.split("-")
diceC = dice.substring(dice.length-2, dice.length-1)
diceS = dice.substring(dice.length-1, dice.length)
var diceR=0, diceRu="";
for(i=0;i<diceMass.length-1;i++){diceR+=diceMass[i]/1936;}
for(i=0;i<diceMass.length-1;i++){if(diceMass[i]==diceMass[diceMass.length-2]){diceRu+=diceMass[i]/1936;}else{diceRu+=parseInt(diceMass[i]/1936)+"+";}}
txt="<div class=\"quote-box\"><blockquote><p><b>Исходный бросок</b>: "+diceC+"d"+diceS+"<br /><br /><b>Результаты броска</b>: ("+diceRu+")="+diceR+"</p></blockquote></div>"
return txt}

if(document.URL.indexOf("viewtopic.php")!=-1){
elm=document.getElementById("pun-main").getElementsByTagName("div")
for(x in elm) if(elm[x].className=="post-content"){
var post=elm[x]
post.innerHTML=addDice(post.innerHTML,0,false)}}
</script>

Пользователь вводит сколько надо бросить кубиков и сколько в нем граней.
Далее получает уникальный код, который может произвольно перемещать в сообщении
После отправки в сообщении будет такая картина

Вставлять в ФОРМУ ОТВЕТА

Вариант 3, актуальный. - апдейтнутый и исправленный другими кодерами на момент 2021-го года.

Код:
<script type="text/javascript"> 
function unhtml(s)
{ return s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"); }
 
function numword(s,one,two,many)
{ return(((s%100>=10 && s%100<=20) || s%10>=5) ? many : 
          (s%10==1 ? one : two)); }
 
function dice()
{
        var FoundErrors = '';
        var diceRes=""
        var CountCube = prompt("Сколько кубиков кидаешь?", "1");
        if(CountCube>10 || CountCube<=0) {
        alert("Можно кинуть не более десяти кубиков.");  return false;}
        var SideCube = prompt("Сколько граней у твоего кубика?", "6");
        if(SideCube>100 || SideCube<=0){
        alert("Таких кубиков не может быть.");         return false;}
        var ReasonCube = unhtml(prompt("Что спрашиваешь у кубика?", "").
           replace(/\s+/g," ").replace("]"," "));
        
        for(i=0; i<CountCube;i++)
        {
          var dice = (Math.round(Math.random()*SideCube));
          if(dice==0) dice=1;
          diceRes += dice*1936+"-";
        }
        smile('[dice='+diceRes+CountCube+':'+SideCube+
              ':'+ReasonCube+']');
}
 
function addDice(post, from, internal) {
  var str = post.innerHTML;
  var a = $(post).closest('.post').innerHTML;
  var u = "";
  var num = +post.id.match(/\d+/g)[0];
  var date = new Date(+$(post).attr('data-posted')*1000).getSeconds();
  var fCanRandomise = 1;
   
  var ran = num + date;
  return str
    .replace(
        /\[dice=((?:\d+[-—])*)(?:(\d)(\d+)|(\d+)(:)(\d+)(?::)()(?:([^\]]*))?)]/g,
        function(a, dice, diceC, diceS, adieC, fNewScheme, adieS, adieB, adieR) {
            dice  = dice.replace(/[-—]/g, '-');
            adieB = adieB.replace(/[-—]/g, '-');
            diceC = parseInt(fNewScheme ? adieC : diceC);
            diceS = parseInt(fNewScheme ? adieS : diceS);
            adieB = parseInt(adieB ? adieB : 0);
            if(adieB > 0) adieB='+'+adieB;
            if(!fCanRandomise && fNewScheme)
                return '<div class="quote-box"><blockquote><p><b>Что-то не получилось, сообщите администрации</b></p></blockquote></div>';
 
            var i,
                diceR = 0,
                s = '<div class="quote-box"><blockquote '
                    + 'style="text-align:left"><p>'
                    + '<b>Игрок кинул '
                    + diceC + numword(diceC,' из кубиков с ',' кубика с ',' кубиков с ')
                    + diceS + numword(diceS,' гранью зла',' гранями зла',' гранями зла')
                    + (adieB ? (adieB>0 ? ' и бонусом ' : ' и пенальти ')+adieB : '')
                    + (adieR ? ', чтобы узнать:</b><br><i>'+adieR+'</i><b>' : '')
                    + '<br /><br />Злобные Кубики Бесконечности ответили'
                    + (fNewScheme ? '' : '(старая схема)')+'</b>: (';
 
            dice = dice.split("-"); 
            for (var i=0; i < dice.length-1; ++i) {
                var d = parseInt(dice[i]/1936); 
                date=((date>>1)+((date&1)<<21))&0x3fffff;
                num=((num>>1)+((num&1)<<22))&0x7fffff;
                if(fNewScheme)
                    d = (ran=(((ran>>1)+(((ran&1) ? 0 : 1)<<23)+d+date)^num)&0xffffff)%diceS + 1;
                diceR += d;
                s+= (i?' + ':'') + d;
            }
 
            if (adieB)
                diceR += parseInt(adieB);
            
            return (s + (adieB ? ')'+adieB : ')')
                + '=' + diceR + '</p></blockquote></div>');
        }
    );
}
$(document).ready(function() { initDices() });
$(document).on('pun_post', function() { initDices() });
$(document).on('pun_edit', function() { initDices() });

function initDices() {
    if (! FORUM.topic) return;

    $('.post-content').each(function(i, post) {
        var str = post.innerHTML;
        var isDiceInPost = /\[dice=((?:\d+[-—])*)(?:(\d)(\d+)|(\d+)(:)(\d+)(?::)()(?:([^\]]*))?)]/.test(str);
        if (!isDiceInPost) return;
        post.innerHTML = addDice(post);
    });
}

 $(document).ready(function() {
   $('#addition-area').append(function () {
        return $('<div>Кинуть кубик</div>').click(dice);
    });
});


</script>

Теги: Скрипты и дополнения, Форма ответа

+2

2

Вот что это такое то? =D Догнать не могу)

0

3

Himitsu, это для роливых форумов! Выброс кубиков!

0

4

Андрюха написал(а):

Himitsu, это для роливых форумов! Выброс кубиков!

Мне это ни о чем не говорит - у меня вот ролевой и что? Как я могу это использовать? :) Объясни пожалуйста подробно, что значит выбрасывать кубики...

0

5

Himitsu, хм....вообщето создатель Ренат, у него спроси...а я могу тебе посоветовать вставь скрипт в форму ответа и проверь сама)

0

6

Андрюха, я создал по просьбе в "спроах скриптов", и сам не понимаю для чего это.
Видимо, это где-то используется.

0

7

Duka, я читал про такое! На каком то движке есть, но там оно в систему вшито! надо будет подробней прочитать

0

8

Duka, вот, создай Пример-форум для себя, зайди в админку...модули....Выброс кубиков

Duka:В личку адрес скинь

0

9

А можете дать такой скрип кубиков, чтобы он не давал возможностьи копировать коды (результаты) броска из старых сообщений и вставлять в новые.

0

10

Ау!!!

0

11

Такой наврятли написать..

0

12

Himitsu написал(а):

меня вот ролевой и что? Как я могу это использовать

Это кажется расчёт по ходам.
Допустим шесть движений атаки и 3 защиты. Как-то так используют. Но это реально муторно на роле . Проще прописать действия защиты и действия атаки на ролевой в правилах. И продраконит нарушителей. Эффект гораздо больше.
Но скрипт интересный

0

13

Нельзя ли модифицировать скрипт так, чтобы он позволял кидать 10-, 12- и 20-гранники?

0

14

мозг орнитолога написал(а):

Нельзя ли модифицировать скрипт так, чтобы он позволял кидать 10-, 12- и 20-гранники?

Только с этими значениями?

0

15

rps написал(а):

Только с этими значениями?

в добавление к уже имеющимся.
то есть, чтобы можно было кидать дайсы с количеством граней 4, 6, 8, 10, 12 и 20.

0

16

мозг орнитолога
А разве там нельзя вводить число граней кубика?

0

17

И вообще, я с трудом представляю куб с числом граней отличным от 6!!!

Отредактировано rps (28.08.2009 18:19:41)

0

18

rps написал(а):

И вообще, я с трудом представляю куб с числом граней отличным от 6!!!

В данный алгоритм нельзя ввести более 9 граней.
А вообще да: куб с 20 гранями - зрелище жестокое)

+1

19

Duka написал(а):

А вообще да: куб с 20 гранями - зрелище жестокое)

дело привычки, наверное. это, конечно, уже не куб, но стандартный ролевой набор d20 включает себя дайсы с указанным количеством граней.
я еще раз повторяю свою просьбу ;) в скриптах не силен, не силен.

0

20

У меня так работает, и выкидывает все, что требуется.

Код:
<input type="button" onclick="dice()" value="Кинуть кубики" />
<script type="text/javascript">
function dice()
{
	var FoundErrors = '';
	var diceRes=""
	var CountCube = prompt("Количество кубиков", "3");
	var SideCube = prompt("Сколько граней у кубика?", "6");
	if(CountCube>9){
	alert("Нельзя бросать столько кубиков"); 
	return false;}
	if(SideCube>20){
	alert("Не бывает таких кубиков"); 
	return false;}
	if (!CountCube)
	{return false;}
	if (!SideCube)
	{return false;}
	for(i=0; i<CountCube;i++){
	var dice = (Math.round(Math.random()*SideCube))
	if(dice==0) dice=1;
	diceRes += dice*1936+"-"
	}
	smile('[dice='+diceRes+CountCube+SideCube+']')
}
</script>
<script>
function addDice(str,from,internal){
var pos=0,pos2=0,newpos=0
if((pos=str.indexOf("[dice=",from))==-1) return str;
if((pos2=str.indexOf("]"),pos+6)==-1) return str;
newpos=str.indexOf("]",pos+6)
if(newpos<pos2 && newpos!=-1) str=addDice(str,pos+6,true)
if((pos2=str.indexOf("]",pos+6))==-1) return str;
str=str.substring(0,pos)+makeDice(str.substring(pos+6,pos2))+str.substring(pos2+1,str.length)
if( str.indexOf("[dice=")!=-1 && internal==false) str=addDice(str,0,false)
return str}

function makeDice(dice){
diceMass = dice.split("-")
diceC = dice.substring(dice.length-2, dice.length-1)
diceS = dice.substring(dice.length-1, dice.length)
var diceR=0, diceRu="";
for(i=0;i<diceMass.length-1;i++){diceR+=diceMass[i]/1936;}
for(i=0;i<diceMass.length-1;i++){if(diceMass[i]==diceMass[diceMass.length-2]){diceRu+=diceMass[i]/1936;}else{diceRu+=parseInt(diceMass[i]/1936)+"+";}}
txt="<div class=\"quote-box\"><blockquote><p><b>Количество кубиков</b>: "+diceC+"<br /><b>Граней в кубике</b>: "+diceS+"<br /><br /><b>Результаты броска</b>: ("+diceRu+")="+diceR+"</p></blockquote></div>"
return txt}

if(document.URL.indexOf("viewtopic.php")!=-1){
elm=document.getElementById("pun-main").getElementsByTagName("div")
for(x in elm) if(elm[x].className=="post-content"){
var post=elm[x]
post.innerHTML=addDice(post.innerHTML,0,false)}}
</script>

0



Рейтинг форумов | Создать форум бесплатно