Чтоб не засорять ту темку
Эксперименты с дайсами
Сообщений 1 страница 4 из 4
Поделиться22020-10-24 13:37:30
Моделируем сражение двух чародеев, один атакует, другой защищается. Модификаторы и остальные цифры в модуляции пока просто из головы, без привязки к логике. Если атакующий выкинет с разницей на 10 или меньше в пользу защищающегося - атака не прошла, если меньше на 11+ - это критический провал, и он получает контратаку и ранение.
У защищающегося те же условия - если разница будет на 10 и меньше не в его пользу - он получает ранение, если меньше на 10+ - критическое ранение.
Сражаются чародей 3 лвл и 5 лвл.
[dice=13552-3872-9680-3:10:10:Чародей 3 лвл атакует]
[dice=5808-1936-9680-3:10:25:Чародей 5 лвл защищается]
Разница составляет 6 в пользу защищающегося, атака не прошла
Поделиться32020-10-24 15:04:39
<input type="button" onclick="dice()" value="Кинуть Дайс" />
<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>100 || CountCube<=0) {
alert("Нельзя бросать столько кубиков"); return false;}
var SideCube = prompt("Сколько граней у кубика?", "10");
if(SideCube>1000 || SideCube<=0){
alert("Не бывает таких кубиков"); return false;}
var BonusCube = parseInt(prompt("Какой бонус прибавляем?", "+0"));
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+
':'+BonusCube+':'+ReasonCube+']');
}function addDice(post,from,internal)
{
var str=post.innerHTML, num=-1, date=-1, a, fCanRandomise=0, u="";
while(post=post.parentNode)
if(post.className=="container")
if(post=post.parentNode)
{
if(a=post.innerHTML.match(
/class[^<>]+permalink[^<>]+#p(\d+)[^<>]*>[^<>]*(\d+)\d+)
\d+)[^<>]*<\/a>/i))
{ num=a[1]; date=a[4];
fCanRandomise=1; break; }
}var ran=parseInt(num+date);
return str.replace(
/\[dice=((?:\d+-)*)(?\d)(\d+)|(\d+)(
(\d+)(?:
-?\d+)
[^\]]*))?)]/g,
function(a,dice,diceC,diceS,adieC,fNewScheme,adieS,adieB,adieR)
{
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(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>');
});
}
if(document.URL.indexOf("viewtopic.php")!=-1)
{
elm=document.getElementById("pun-main").getElementsByTagName("div");
for(x=0; x<elm.length; ++x)
if(elm[x].className=="post-content")
elm[x].innerHTML=addDice(elm[x]);
}
</script>
Поделиться42020-11-26 09:44:07
[dice=5808-7744-19360-3:10:9:проверка]