Привет!
Есть запрос на скрипт дайсов на платформу rusff.
Проблема: переделать скрипт нужно до 03.12 13:00 мск.
Компенсация проблемы: цену устанавливает исполнитель. Возможна частичная предоплата.
Ключи от форума с предустановленной «жертвой» грядущей переделки выдам в личку.
Собственно, исходник.
Код:
|
<!-- Dice (c) Spiritus Tergi, ч1 в хтмл-верх -->
<script type="text/javascript" src="https://forumstatic.ru/files/000f/3e/d5/42785.js" charset="UTF-8"></script> |
Код:
|
<!-- Dice Roller BEGIN (c) Spiritus Tergi, ч2 в хтмл-низ -->
<template id="dice-box-template">
<div class="dice-box">
<p>
<span class="roll-dice"></span>
<span class="roll-value"></span>
</p>
<p class="roll-reason"></p>
<p class="roll-result"></p>
</div>
</template>
<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/2.4.4/seedrandom.min.js"></script>
<script>
diceResults = [
{'max' : 16, 'result' : 'неудача, тяжелые травмы.'},
{'max' : 29, 'result' : 'неудача, персонаж зарабатывает легкие ушибы.'},
{'max' : 49, 'result' : 'неудача, но без увечий и травм.'},
{'max' : 60, 'result' : 'удача с большим трудом и возможными тяжелыми увечьями.'},
{'max' : 90, 'result' : 'удача, с легкими ранениями.'},
{'max' : 1000, 'result' : 'удача без единой травмы или увечья.'}
]
isTagged = (document.querySelector('#pun').innerHTML.indexOf('[dice]') >= 0)
if (isTagged) {
diceRoller = new DiceRoller(diceResults)
diceRoller.initDiceBoxes()
}
</script>
<!-- Dice Roller END -->
<!-- Dice Roller Form BEGIN -->
<form id="dice-form" class="hidden" autocomplete="off">
<div>
<label><span>#Кубиков</span> <input type="text" name="count" maxlength="3" value="1"></label>
<label><span>#Граней</span> <input type="text" name="sides" maxlength="3" value="100"></label>
<label><span>Бонус</span> <input type="text" name="bonus" maxlength="3" value="0"></label>
</div>
<div>
<label><span>Действие</span> <textarea name="reason" cols="10" rows="5"></textarea></label>
</div>
<button type="submit">Вставить</button>
</form>
<script>
replyForm = document.getElementById('post')
diceForm = document.getElementById('dice-form')
diceButtonString = '<td id="button-dice" title="Форма Кубиков" class="hidden"><img src="/i/blank.gif"></td>'
function handleDiceFormSubmit(event) {
event.preventDefault()
let tagArguments = []
for(let control of event.target.elements)
if (control.tagName != 'BUTTON')
tagArguments.push(control.name + ' = ' + control.value)
replyForm['main-reply'].value += '\n[dice]' + tagArguments.join(' | ') + '[/dice]'
}
function handleDiceButtonClick(event) {
diceForm.classList.toggle('hidden')
}
if (replyForm != null) {
replyForm.querySelector('.fs-box.hashelp').insertAdjacentElement('beforeend', diceForm)
diceForm.addEventListener('submit', handleDiceFormSubmit)
let row = replyForm.querySelector('#form-buttons tr')
row.innerHTML += diceButtonString
let diceButton = document.getElementById('button-dice')
diceButton.classList.remove('hidden')
diceButton.addEventListener('click', handleDiceButtonClick)
}
</script>
<!-- Dice Roller Form END --></div> |
Код:
|
/* Оформление к Dice Roller (c) Spiritus Tergi, ч3 */
.hidden {
display: none !important;
}
#button-dice {
background: url("/files/000f/3e/d5/81483.png") center;
}
form#dice-form {
width: 340px;
padding: 18px;
text-align: right;
position: absolute;
top: 40px;
right: -12px;
background: rgb(188, 165, 138);
border: 1px solid;
border-radius: 2px;
}
form#dice-form input {
width: 22px;
}
#dice-form label {
display: block;
margin: 3px;
vertical-align: top;
}
#dice-form span {
font-weight: bold;
width: 100px;
text-align: right;
display: inline-block;
vertical-align: top;
}
#dice-form label > span::after {
content: ":"
}
#dice-form textarea {
width: 130px !important;
height: 69px !important;
}
#dice-form > div {
width: 160px;
display: inline-block;
vertical-align: top;
}
#dice-form > label {
display: inline-block;
}
#dice-form > div:nth-child(2) {
margin-top: -18px;
}
.roll-dice::before, .roll-value::before, .roll-reason::before, .roll-result::before {
font-weight: bold;
}
.roll-dice::before {
content: "Бросок: ";
}
.roll-dice::after {
content: " (бонус)";
margin-right: -5px;
}
.roll-value::before {
content: " , с результатом: ";
}
.roll-reason::before {
content: "Действие: "
}
.roll-result::before {
content: "Итог: "
}
#pun .roll-result {
padding-bottom: 0px;
} |
Что должен уметь новый скрипт.
1. Должна быть возможность бросить от 1d2 до как минимум 10d50, всё что выше не принципиально. По умолчанию в форме для заполнения подставлять 1d10.
2. Нужна возможность вводить в форму до 4 бонусов и до 4 штрафов на один бросок. По умолчанию подставляем по нулям. Сейчас в скрипте реализован учёт только 1 бонуса. Да, после вычета штрафов итог может быть отрицательным. Это ок, здесь ничего дополнительно учитывать не надо.
3. Минималистичный вывод конечной информации.
Конфигурация броска: результат броска + баф1 + баф2 .... - дебаф2 - дебаф 4 = итог. Например ↓
Цитата:
|
Бросок 2d10: 8 + 3 + 1 + 0 + 0 - 1 - 2 - 0 - 0 = 9
|
Отдельный вывод результата до применения модификаторов принципиально важен. Вывод нулей не обязателен — как проще, так и окей.
4. Поле для комментария к броску (на что бросаем) не обязательно, но если будет, то в случае незаполнения поля не должно выводиться вообще ничего.
5. Пояснение последствий броска совсем не нужно.
6. Необязательный вариант
логики оформления интерфейса.