Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.12.2023, 01:04
Новичок на форуме
Отправить личное сообщение для Canis Major Посмотреть профиль Найти все сообщения от Canis Major
 
Регистрация: 02.12.2023
Сообщений: 1

Переделать скрипт дайсов
Привет!
Есть запрос на скрипт дайсов на платформу 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. Необязательный вариант логики оформления интерфейса.

Последний раз редактировалось Canis Major, 02.12.2023 в 01:15.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделать скрипт с article и aside Vaska Элементы интерфейса 1 07.01.2021 01:56
Переделать скрипт для анимаций ethereal Элементы интерфейса 1 30.06.2020 07:32
Хочу немного переделать скрипт Chmil Элементы интерфейса 4 11.07.2017 12:28
Написать Ява скрипт Kavan Events/DOM/Window 2 20.05.2017 08:25
Помогите переделать скрипт TheBabka Общие вопросы Javascript 2 04.11.2010 22:46