.
кубики
Сообщений 1 страница 30 из 47
Поделиться22025-10-15 23:00:34
[html]<div id="lotto-card"></div>
<script>
function generateCard() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [
[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]
];
for (let col = 0; col < 9; col++) {
let nums = [];
while (nums.length < 3) {
let n = Math.floor(Math.random() * (ranges[col][1] - ranges[col][0] + 1)) + ranges[col][0];
if (!nums.includes(n)) nums.push(n);
}
nums.sort((a,b)=>a-b);
for (let row = 0; row < 3; row++) {
card[row][col] = nums[row];
}
}
// Убираем по 4 числа в каждой строке, чтобы остались только 5
for (let row = 0; row < 3; row++) {
let indices = Array.from({length:9}, (_,i)=>i);
indices.sort(()=>0.5-Math.random());
for (let i = 0; i < 4; i++) card[row][indices[i]] = '';
}
return card;
}
function renderCard(card) {
let html = '<table border="1" cellspacing="0" cellpadding="5">';
for (let row of card) {
html += '<tr>';
for (let num of row) {
html += `<td style="width:30px; text-align:center">${num}</td>`;
}
html += '</tr>';
}
html += '</table>';
document.getElementById('lotto-card').innerHTML = html;
}
let card = generateCard();
renderCard(card);
</script>[/html]
Поделиться32025-10-15 23:16:27
[html]<h3>🎲 Генератор ЗЛА</h3>
<button id="makeCard">Сгенерировать карточку</button>
<textarea id="result" style="width:100%;height:200px;"></textarea>
<script>
document.getElementById('makeCard').onclick = function() {
function generateCard() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for (let col=0; col<9; col++) {
let nums = [];
while (nums.length<3) {
let n = Math.floor(Math.random()*(ranges[col][1]-ranges[col][0]+1))+ranges[col][0];
if(!nums.includes(n)) nums.push(n);
}
nums.sort((a,b)=>a-b);
for (let row=0; row<3; row++) card[row][col] = nums[row];
}
for (let row=0; row<3; row++) {
let indices = Array.from({length:9},(_,i)=>i).sort(()=>0.5-Math.random());
for (let i=0;i<4;i++) card[row][indices[i]]='';
}
return card;
}
let card = generateCard();
let html = '<div class="lotto-card"><table border="1" cellspacing="0" cellpadding="5" style="border-collapse:collapse;text-align:center;">';
for (let row of card) {
html += '<tr>';
for (let num of row) {
html += `<td>${num?num:' '}</td>`;
}
html += '</tr>';
}
html += '</table></div>';
document.getElementById('result').value = html;
};
</script>[/html]
Поделиться42025-10-15 23:16:43
[html]<div class="lotto-card"><table border="1" cellspacing="0" cellpadding="5" style="border-collapse:collapse;text-align:center;"><tr><td> </td><td> </td><td>21</td><td>35</td><td>41</td><td>53</td><td> </td><td>72</td><td> </td></tr><tr><td>9</td><td> </td><td>22</td><td> </td><td>44</td><td>54</td><td>63</td><td> </td><td> </td></tr><tr><td>10</td><td> </td><td> </td><td>38</td><td> </td><td>57</td><td>69</td><td> </td><td>90</td></tr></table></div>[/html]
Поделиться52025-10-15 23:21:00
[html]<h3>🎲 Генератор карточки Русского лото</h3>
<button id="makeCard">Сгенерировать карточку</button>
<button id="copyCard" disabled>Скопировать код для форума</button>
<br><br>
<textarea id="result" style="width:100%;height:200px;" readonly></textarea>
<script>
const makeBtn = document.getElementById('makeCard');
const copyBtn = document.getElementById('copyCard');
const resultArea = document.getElementById('result');
makeBtn.onclick = function() {
function generateCard() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [
[1,10],[11,20],[21,30],[31,40],
[41,50],[51,60],[61,70],[71,80],[81,90]
];
for (let col = 0; col < 9; col++) {
let nums = [];
while (nums.length < 3) {
let n = Math.floor(Math.random() * (ranges[col][1] - ranges[col][0] + 1)) + ranges[col][0];
if (!nums.includes(n)) nums.push(n);
}
nums.sort((a,b)=>a-b);
for (let row = 0; row < 3; row++) card[row][col] = nums[row];
}
// убираем по 4 числа в каждой строке
for (let row = 0; row < 3; row++) {
let indices = Array.from({length:9}, (_,i)=>i).sort(()=>0.5-Math.random());
for (let i = 0; i < 4; i++) card[row][indices[i]] = '';
}
return card;
}
let card = generateCard();
let html = '<div class="lotto-card"><table border="1" cellspacing="0" cellpadding="5" style="border-collapse:collapse;text-align:center;">';
for (let row of card) {
html += '<tr>';
for (let num of row) html += `<td>${num ? num : ' '}</td>`;
html += '</tr>';
}
html += '</table></div>';
let bbcode = `[html]\n${html}\n[/html]`;
resultArea.value = bbcode;
copyBtn.disabled = false;
};
copyBtn.onclick = function() {
resultArea.select();
document.execCommand('copy');
copyBtn.textContent = '✅ Скопировано!';
setTimeout(()=>copyBtn.textContent='Скопировать код для форума',1500);
};
</script>[/html]
Поделиться62025-10-15 23:41:18
[signed-dice data="eyJudW1zIjpbNjYsNjMsODEsOCwzMiwyNCwxMCw1OSw4MywxOCwyNywzMSwzMCw2Miw3MV0sInRvdGFsIjo5MCwidHMiOjE3NjA1NjA4NzUwNzZ9" sig="1fYjfWshHYNypQrsZ31mmcnfgHHwK89yjJFhNJ6w-mA"]
Поделиться72025-10-15 23:53:47
[html]<h3>🎲 Генератор карточки Русское лото</h3>
<button id="makeCard">Сгенерировать карточку</button>
<button id="copyCard" disabled>Скопировать код для форума</button>
<br><br>
<textarea id="result" style="width:100%;height:180px;" readonly placeholder="После генерации здесь появится готовый код..."></textarea>
<div id="preview" style="margin-top:10px;"></div>
<style>
.lotto-card table {
border-collapse: collapse;
text-align: center;
margin-top: 10px;
}
.lotto-card td {
width: 35px;
height: 35px;
border: 2px solid #333;
vertical-align: middle;
font-weight: bold;
font-size: 16px;
}
</style>
<script>
var makeBtn = document.getElementById('makeCard');
var copyBtn = document.getElementById('copyCard');
var resultArea = document.getElementById('result');
var preview = document.getElementById('preview');
makeBtn.onclick = function() {
// создаём сетку 3х9
var card = [[],[],[]];
var ranges = [
[1,10],[11,20],[21,30],[31,40],[41,50],
[51,60],[61,70],[71,80],[81,90]
];
for (var c=0;c<9;c++) {
var nums=[];
while(nums.length<3){
var n=Math.floor(Math.random()*(ranges[c][1]-ranges[c][0]+1))+ranges[c][0];
if(nums.indexOf(n)===-1) nums.push(n);
}
nums.sort(function(a,b){return a-b});
for(var r=0;r<3;r++) card[r][c]=nums[r];
}
// убираем по 4 числа в строке
for (var r=0;r<3;r++){
var inds=[0,1,2,3,4,5,6,7,8].sort(()=>Math.random()-0.5);
for (var i=0;i<4;i++) card[r][inds[i]]='';
}
// генерируем HTML
var html = '<div class="lotto-card"><table>';
for (var r=0;r<3;r++){
html += '<tr>';
for (var c=0;c<9;c++){
html += '<td>' + (card[r][c]||'') + '</td>';
}
html += '</tr>';
}
html += '</table></div>';
// вставляем результат и превью
resultArea.value = "[html]\n" + html + "\n[/html]";
preview.innerHTML = html;
copyBtn.disabled = false;
};
copyBtn.onclick = function() {
resultArea.select();
document.execCommand('copy');
copyBtn.innerText = '✅ Скопировано!';
setTimeout(function(){copyBtn.innerText='Скопировать код для форума';}, 1500);
};
</script>[/html]
Поделиться82025-10-15 23:55:38
[html]
<h3>🎲 Генератор ЗЛА</h3>
<button id="makeCard">Сгенерировать карточку</button>
<textarea id="result" style="width:100%;height:200px;"></textarea>
<div id="preview" style="margin-top:10px;"></div>
<style>
.lotto-card table {
border-collapse: collapse;
text-align: center;
}
.lotto-card td {
width: 35px;
height: 35px;
border: 2px solid #000; /* толстая видимая граница */
vertical-align: middle;
font-weight: bold;
font-size: 16px;
}
</style>
<script>
document.getElementById('makeCard').onclick = function() {
function generateCard() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for (let col=0; col<9; col++) {
let nums = [];
while (nums.length<3) {
let n = Math.floor(Math.random()*(ranges[col][1]-ranges[col][0]+1))+ranges[col][0];
if(!nums.includes(n)) nums.push(n);
}
nums.sort((a,b)=>a-b);
for (let row=0; row<3; row++) card[row][col] = nums[row];
}
for (let row=0; row<3; row++) {
let indices = Array.from({length:9},(_,i)=>i).sort(()=>0.5-Math.random());
for (let i=0;i<4;i++) card[row][indices[i]]='';
}
return card;
}
let card = generateCard();
let html = '<div class="lotto-card"><table>';
for (let row of card) {
html += '<tr>';
for (let num of row) {
html += `<td>${num?num:' '}</td>`;
}
html += '</tr>';
}
html += '</table></div>';
document.getElementById('result').value = html;
document.getElementById('preview').innerHTML = html; // показываем превью
};
</script>
[/html]
Поделиться92025-10-15 23:56:32
[html]<div class="lotto-card"><table><tr><td>4</td><td> </td><td> </td><td> </td><td>44</td><td>52</td><td>62</td><td>75</td><td> </td></tr><tr><td>5</td><td> </td><td> </td><td>37</td><td> </td><td>57</td><td>66</td><td>76</td><td> </td></tr><tr><td>8</td><td>20</td><td> </td><td> </td><td> </td><td> </td><td>69</td><td>79</td><td>89</td></tr></table></div>[/html]
Поделиться102025-10-15 23:58:59
[html]
<h3>🎲 Генератор ЗЛА — Красивые карточки</h3>
<button id="makeCard">Сгенерировать карточку</button>
<button id="copyCard" disabled>Скопировать код для форума</button>
<textarea id="result" style="width:100%;height:200px;margin-top:10px;" readonly></textarea>
<div id="preview" style="margin-top:10px;"></div>
<style>
.lotto-card table {
border-collapse: collapse;
text-align: center;
border: 3px solid #000; /* рамка вокруг всей карточки */
}
.lotto-card td {
width: 40px;
height: 40px;
border: 2px solid #000; /* границы ячеек */
vertical-align: middle;
font-weight: bold;
font-size: 16px;
background-color: #f0f0f0; /* цвет пустой ячейки */
}
.lotto-card td.filled {
background-color: #fff; /* цвет с числом */
}
</style>
<script>
var makeBtn = document.getElementById('makeCard');
var copyBtn = document.getElementById('copyCard');
var resultArea = document.getElementById('result');
var preview = document.getElementById('preview');
makeBtn.onclick = function() {
// генерируем карточку 3x9
var card = [[],[],[]];
var ranges = [[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for (var c=0;c<9;c++) {
var nums=[];
while(nums.length<3){
var n=Math.floor(Math.random()*(ranges[c][1]-ranges[c][0]+1))+ranges[c][0];
if(nums.indexOf(n)===-1) nums.push(n);
}
nums.sort(function(a,b){return a-b});
for(var r=0;r<3;r++) card[r][c]=nums[r];
}
// убираем по 4 числа в строке
for(var r=0;r<3;r++){
var inds=[0,1,2,3,4,5,6,7,8].sort(()=>Math.random()-0.5);
for(var i=0;i<4;i++) card[r][inds[i]]='';
}
// создаём HTML карточки с классами
var html = '<div class="lotto-card"><table>';
for(var r=0;r<3;r++){
html += '<tr>';
for(var c=0;c<9;c++){
var val = card[r][c];
var cls = val ? 'filled' : '';
html += `<td class="${cls}">${val || ''}</td>`;
}
html += '</tr>';
}
html += '</table></div>';
// показываем превью
preview.innerHTML = html;
};
</script>
[/html]
Поделиться112025-10-16 00:05:48
[html]<h3>🎲 Генератор ЗЛА</h3>
<button id="makeCard">Сгенерировать карточку</button>
<!-- Контейнер для превью карточки -->
<div id="preview" style="margin-top:15px;"></div>
<style>
.lotto-card {
display: inline-block;
border: 4px solid #f39c12;
border-radius: 10px;
padding: 10px;
background: linear-gradient(to bottom right, #fff3e0, #ffe0b2);
box-shadow: 2px 2px 12px rgba(0,0,0,0.2);
}
.lotto-card table {
border-collapse: collapse;
text-align: center;
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: 18px;
}
.lotto-card td {
width: 40px;
height: 40px;
border: 1px solid #f39c12;
border-radius: 5px;
background-color: #fff8e1;
}
</style>
<script>
document.getElementById('makeCard').onclick = function() {
function generateCard() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for (let col=0; col<9; col++) {
let nums = [];
while (nums.length<3) {
let n = Math.floor(Math.random()*(ranges[col][1]-ranges[col][0]+1))+ranges[col][0];
if(!nums.includes(n)) nums.push(n);
}
nums.sort((a,b)=>a-b);
for (let row=0; row<3; row++) card[row][col] = nums[row];
}
for (let row=0; row<3; row++) {
let indices = Array.from({length:9},(_,i)=>i).sort(()=>0.5-Math.random());
for (let i=0;i<4;i++) card[row][indices[i]]='';
}
return card;
}
let card = generateCard();
let html = '<div class="lotto-card"><table>';
for (let row of card) {
html += '<tr>';
for (let num of row) {
html += `<td>${num?num:' '}</td>`;
}
html += '</tr>';
}
html += '</table></div>';
// Вставляем превью в контейнер
document.getElementById('preview').innerHTML = html;
};
</script>[/html]
Поделиться122025-10-16 00:07:19
[html]<h3>🎲 Генератор ЗЛА</h3>
<button id="makeCard">Сгенерировать карточку</button>
<button id="copyCard" style="display:none;">📋 Скопировать код карточки</button>
<div id="preview" style="margin-top:15px;"></div>
<p id="message" style="color:green; font-weight:bold; display:none;">✅ Код карточки скопирован!</p>
<style>
.lotto-card {
display: inline-block;
border: 4px solid #f39c12;
border-radius: 10px;
padding: 10px;
background: linear-gradient(to bottom right, #fff3e0, #ffe0b2);
box-shadow: 2px 2px 12px rgba(0,0,0,0.2);
transition: transform 0.3s ease;
}
.lotto-card:hover {
transform: scale(1.03);
}
.lotto-card table {
border-collapse: collapse;
text-align: center;
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: 18px;
}
.lotto-card td {
width: 40px;
height: 40px;
border: 1px solid #f39c12;
border-radius: 5px;
background-color: #fff8e1;
}
button {
background: #f39c12;
border: none;
color: white;
padding: 8px 14px;
border-radius: 6px;
cursor: pointer;
font-weight: bold;
transition: 0.3s;
margin-right: 5px;
}
button:hover {
background: #e67e22;
}
</style>
<script>
document.getElementById('makeCard').onclick = function() {
function generateCard() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for (let col=0; col<9; col++) {
let nums = [];
while (nums.length<3) {
let n = Math.floor(Math.random()*(ranges[col][1]-ranges[col][0]+1))+ranges[col][0];
if(!nums.includes(n)) nums.push(n);
}
nums.sort((a,b)=>a-b);
for (let row=0; row<3; row++) card[row][col] = nums[row];
}
for (let row=0; row<3; row++) {
let indices = Array.from({length:9},(_,i)=>i).sort(()=>0.5-Math.random());
for (let i=0;i<4;i++) card[row][indices[i]]='';
}
return card;
}
let card = generateCard();
let html = '<div class="lotto-card"><table>';
for (let row of card) {
html += '<tr>';
for (let num of row) {
html += `<td>${num?num:' '}</td>`;
}
html += '</tr>';
}
html += '</table></div>';
document.getElementById('preview').innerHTML = html;
document.getElementById('copyCard').style.display = 'inline-block';
document.getElementById('message').style.display = 'none';
// Сохраняем HTML для копирования
document.getElementById('copyCard').onclick = function() {
let textToCopy = html;
navigator.clipboard.writeText(textToCopy).then(() => {
let msg = document.getElementById('message');
msg.style.display = 'block';
msg.textContent = '✅ Код карточки скопирован!';
setTimeout(() => msg.style.display = 'none', 2500);
});
};
};
</script>[/html]
Поделиться132025-10-16 00:12:04
[html]<h3>🎲 Генератор ЗЛА</h3>
<button id="makeCard">Сгенерировать карточку</button>
<button id="showCode" style="display:none;">📋 Показать код карточки</button>
<div id="preview" style="margin-top:15px;"></div>
<div id="codeBox" style="display:none; margin-top:15px;">
<p><b>Скопируйте этот код и вставьте в сообщение:</b></p>
<textarea id="codeArea" style="width:100%; height:180px; font-family:monospace;"></textarea>
</div>
<style>
.lotto-card {
display: inline-block;
border: 4px solid #f39c12;
border-radius: 10px;
padding: 10px;
background: linear-gradient(to bottom right, #fff3e0, #ffe0b2);
box-shadow: 2px 2px 12px rgba(0,0,0,0.2);
transition: transform 0.3s ease;
}
.lotto-card:hover { transform: scale(1.03); }
.lotto-card table {
border-collapse: collapse;
text-align: center;
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: 18px;
}
.lotto-card td {
width: 40px;
height: 40px;
border: 1px solid #f39c12;
border-radius: 5px;
background-color: #fff8e1;
}
button {
background: #f39c12;
border: none;
color: white;
padding: 8px 14px;
border-radius: 6px;
cursor: pointer;
font-weight: bold;
transition: 0.3s;
margin-right: 5px;
}
button:hover { background: #e67e22; }
</style>
<script>
document.getElementById('makeCard').onclick = function() {
function generateCard() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for (let col=0; col<9; col++) {
let nums = [];
while (nums.length<3) {
let n = Math.floor(Math.random()*(ranges[col][1]-ranges[col][0]+1))+ranges[col][0];
if(!nums.includes(n)) nums.push(n);
}
nums.sort((a,b)=>a-b);
for (let row=0; row<3; row++) card[row][col] = nums[row];
}
for (let row=0; row<3; row++) {
let indices = Array.from({length:9},(_,i)=>i).sort(()=>0.5-Math.random());
for (let i=0;i<4;i++) card[row][indices[i]]='';
}
return card;
}
let card = generateCard();
let html = '<div class="lotto-card"><table>';
for (let row of card) {
html += '<tr>';
for (let num of row) {
html += `<td>${num?num:' '}</td>`;
}
html += '</tr>';
}
html += '</table></div>';
};
};
</script>[/html]
Поделиться142025-10-16 00:38:13
[html]<h3>🎲 Генератор ЗЛА</h3>
<button id="makeCard">Сгенерировать карточку</button>
<button id="copyCard" style="display:none;">📋 Скопировать код карточки</button>
<div id="preview" style="margin-top:15px;"></div>
<p id="message" style="color:green; font-weight:bold; display:none;"></p>
<!-- Скрытое текстовое поле для хранения и ручного копирования кода -->
<textarea id="hiddenCardCode" style="width:100%; height:150px; margin-top:15px; display:none; font-family:monospace; white-space:pre; word-wrap:normal; overflow-x:auto; resize:vertical; border:1px solid #ccc; padding:5px; box-sizing:border-box;" readonly></textarea>
<style>
/* Эти стили используются только на странице генератора для предпросмотра карточки.
Для копирования на форумы генерируется HTML с инлайн-стилями. */
.lotto-card {
display: inline-block;
border: 4px solid #f39c12;
border-radius: 10px;
padding: 10px;
background: linear-gradient(to bottom right, #fff3e0, #ffe0b2);
box-shadow: 2px 2px 12px rgba(0,0,0,0.2);
transition: transform 0.3s ease;
}
.lotto-card:hover {
transform: scale(1.03);
}
.lotto-card table {
border-collapse: collapse;
text-align: center;
font-family: 'Arial', sans-serif;
font-weight: bold;
font-size: 18px;
}
.lotto-card td {
width: 40px;
height: 40px;
border: 1px solid #f39c12;
border-radius: 5px;
background-color: #fff8e1;
}
button {
background: #f39c12;
border: none;
color: white;
padding: 8px 14px;
border-radius: 6px;
cursor: pointer;
font-weight: bold;
transition: 0.3s;
margin-right: 5px;
}
button:hover {
background: #e67e22;
}
</style>
<script>
// Функция для генерации числовых данных карточки
function generateCardData() {
let card = Array.from({length: 3}, () => Array(9).fill(''));
let ranges = [[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for (let col = 0; col < 9; col++) {
let nums = [];
// Гарантируем 3 уникальных числа в каждом столбце
while (nums.length < 3) {
let n = Math.floor(Math.random() * (ranges[col][1] - ranges[col][0] + 1)) + ranges[col][0];
if (!nums.includes(n)) {
nums.push(n);
}
}
nums.sort((a, b) => a - b); // Сортируем числа по возрастанию
for (let row = 0; row < 3; row++) {
card[row][col] = nums[row];
}
}
// Удаляем по 4 числа из каждой строки (чтобы получить 5 пустых ячеек в каждой строке)
for (let row = 0; row < 3; row++) {
let indices = Array.from({length: 9}, (_, i) => i).sort(() => 0.5 - Math.random()); // Перемешиваем индексы столбцов
for (let i = 0; i < 4; i++) { // Удаляем 4 числа
card[row][indices[i]] = '';
}
}
return card;
}
// Функция для генерации HTML с инлайн-стилями (для копирования на форумы)
function generateCardHtmlForCopy(cardData) {
let html = '<div style="display:inline-block; border:4px solid #f39c12; border-radius:10px; padding:10px; background:linear-gradient(to bottom right, #fff3e0, #ffe0b2); box-shadow:2px 2px 12px rgba(0,0,0,0.2);">';
html += '<table style="border-collapse:collapse; text-align:center; font-family:\'Arial\', sans-serif; font-weight:bold; font-size:18px;">';
for (let row of cardData) {
html += '<tr>';
for (let num of row) {
// Используем неразрывный пробел для пустых ячеек, чтобы сохранить их высоту
html += `<td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">${num || ' '}</td>`;
}
html += '</tr>';
}
html += '</table></div>';
return html;
}
// Функция для генерации HTML с использованием классов (для отображения на странице генератора)
function generateCardHtmlForDisplay(cardData) {
let html = '<div class="lotto-card"><table>';
for (let row of cardData) {
html += '<tr>';
for (let num of row) {
html += `<td>${num || ' '}</td>`; // Используем неразрывный пробел для пустых ячеек
}
html += '</tr>';
}
html += '</table></div>';
return html;
}
// Обработчик события для кнопки "Сгенерировать карточку"
document.getElementById('makeCard').addEventListener('click', function() {
let cardData = generateCardData();
// Отображаем карточку, используя определенные CSS-классы
document.getElementById('preview').innerHTML = generateCardHtmlForDisplay(cardData);
// Сохраняем HTML с инлайн-стилями в скрытом текстовом поле для копирования
document.getElementById('hiddenCardCode').value = generateCardHtmlForCopy(cardData);
document.getElementById('copyCard').style.display = 'inline-block';
document.getElementById('message').style.display = 'none';
document.getElementById('hiddenCardCode').style.display = 'none'; // Убеждаемся, что текстовое поле скрыто
});
// Функция для обработки инструкций по ручному копированию
function showManualCopyFallback(textToCopy, msgElement) {
let textarea = document.getElementById('hiddenCardCode');
textarea.value = textToCopy;
textarea.style.display = 'block'; // Делаем текстовое поле видимым
textarea.select(); // Выделяем его содержимое
textarea.setSelectionRange(0, 99999); // Для мобильных устройств
// Пытаемся использовать устаревшую команду execCommand для копирования
try {
let successful = document.execCommand('copy');
if (successful) {
msgElement.textContent = '✅ Код скопирован (возможно, через execCommand)!';
msgElement.style.color = 'green';
msgElement.style.display = 'block';
setTimeout(() => {
msgElement.style.display = 'none';
textarea.style.display = 'none'; // Скрываем текстовое поле после успешного копирования
}, 2500);
return; // Выход, если копирование было успешным
}
} catch (err) {
console.warn('execCommand copy failed:', err);
}
// Если Clipboard API и execCommand не сработали, предлагаем ручное копирование
msgElement.textContent = '⚠️ Код не скопирован автоматически. Пожалуйста, скопируйте его вручную: Ctrl+C (Cmd+C).';
msgElement.style.color = 'orange';
msgElement.style.display = 'block';
// Не скрываем текстовое поле автоматически для ручного копирования
}
// Обработчик события для кнопки "Скопировать код карточки"
document.getElementById('copyCard').addEventListener('click', function() {
let textToCopy = document.getElementById('hiddenCardCode').value;
let msg = document.getElementById('message');
msg.style.display = 'none'; // Скрываем предыдущие сообщения
// Пытаемся использовать современный Clipboard API
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(textToCopy).then(() => {
msg.textContent = '✅ Код карточки скопирован!';
msg.style.color = 'green';
msg.style.display = 'block';
document.getElementById('hiddenCardCode').style.display = 'none'; // Убеждаемся, что текстовое поле скрыто
setTimeout(() => msg.style.display = 'none', 2500);
}).catch(err => {
console.error('Failed to copy text using clipboard API:', err);
// Фолбэк к инструкциям по ручному копированию, если API не сработало
showManualCopyFallback(textToCopy, msg);
});
} else {
// Фолбэк для старых браузеров или окружений без Clipboard API
showManualCopyFallback(textToCopy, msg);
}
});
</script>[/html]
Поделиться152025-10-16 00:38:32
[html]<div style="display:inline-block; border:4px solid #f39c12; border-radius:10px; padding:10px; background:linear-gradient(to bottom right, #fff3e0, #ffe0b2); box-shadow:2px 2px 12px rgba(0,0,0,0.2);"><table style="border-collapse:collapse; text-align:center; font-family:'Arial', sans-serif; font-weight:bold; font-size:18px;"><tr><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">12</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">21</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">54</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">62</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">73</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td></tr><tr><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">9</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">13</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">26</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">43</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">55</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td></tr><tr><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">10</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">45</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;"> </td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">67</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">80</td><td style="width:40px; height:40px; border:1px solid #f39c12; border-radius:5px; background-color:#fff8e1;">85</td></tr></table></div>[/html]
Поделиться162025-10-16 11:19:12
[html]<h3>🎲 Генератор ЗЛА</h3>
<button id="makeCard"
onclick="(function(){
let card = Array.from({length:3},()=>Array(9).fill(''));
let ranges=[[1,10],[11,20],[21,30],[31,40],[41,50],[51,60],[61,70],[71,80],[81,90]];
for(let c=0;c<9;c++){let nums=[];
while(nums.length<3){let n=Math.floor(Math.random()*(ranges[c][1]-ranges[c][0]+1))+ranges[c][0];
if(!nums.includes(n))nums.push(n);}
nums.sort((a,b)=>a-b);
for(let r=0;r<3;r++)card[r][c]=nums[r];}
for(let r=0;r<3;r++){let idx=[...Array(9).keys()].sort(()=>Math.random()-0.5);
for(let i=0;i<4;i++)card[r][idx[i]]='';}
let html='<div style="display:inline-block;border:4px solid #f39c12;border-radius:10px;padding:10px;background:linear-gradient(to bottom right,#fff3e0,#ffe0b2);box-shadow:2px 2px 12px rgba(0,0,0,0.2);"><table style="border-collapse:collapse;text-align:center;font-family:Arial,sans-serif;font-weight:bold;font-size:18px;">';
for(let row of card){html+='<tr>';
for(let num of row){html+=`<td style="width:40px;height:40px;border:1px solid #f39c12;border-radius:5px;background-color:#fff8e1;">${num||' '}</td>`;}
html+='</tr>';}
html+='</table></div>';
document.getElementById('preview').innerHTML=html;
document.getElementById('hiddenCardCode').value=html;
document.getElementById('copyCard').style.display='inline-block';
document.getElementById('hiddenCardCode').style.display='none';
document.getElementById('message').style.display='none';
})();">Сгенерировать карточку</button>
<button id="copyCard" style="display:none;"
onclick="(function(){
let text=document.getElementById('hiddenCardCode').value;
let msg=document.getElementById('message');
msg.style.display='none';
if(navigator.clipboard&&navigator.clipboard.writeText){
navigator.clipboard.writeText(text).then(()=>{
msg.textContent='✅ Код карточки скопирован!';
msg.style.color='green';msg.style.display='block';
document.getElementById('hiddenCardCode').style.display='none';
setTimeout(()=>msg.style.display='none',2500);
}).catch(()=>{
let ta=document.getElementById('hiddenCardCode');
ta.style.display='block';ta.select();
msg.textContent='⚠️ Скопируйте вручную: Ctrl+C';
msg.style.color='orange';msg.style.display='block';
});
}else{
let ta=document.getElementById('hiddenCardCode');
ta.style.display='block';ta.select();
msg.textContent='⚠️ Скопируйте вручную: Ctrl+C';
msg.style.color='orange';msg.style.display='block';
}
})();">📋 Скопировать код карточки</button>
<div id="preview" style="margin-top:15px;"></div>
<p id="message" style="color:green;font-weight:bold;display:none;"></p>
<textarea id="hiddenCardCode" style="width:100%;height:150px;margin-top:15px;display:none;font-family:monospace;white-space:pre;word-wrap:normal;overflow-x:auto;resize:vertical;border:1px solid #ccc;padding:5px;box-sizing:border-box;" readonly></textarea>[/html]
Поделиться172025-10-29 00:29:33
🎴 Вытянуты карты из 2-гранной колоды
|
[dice=9680-1:6:0:]
Поделиться182025-11-01 21:54:32
[dice=1936-1:6:0:]
Поделиться192025-11-01 22:09:09
[signed-dice data="eyJudW1zIjpbNzQsMzgsNDEsMzYsMTgsNDgsNzksNTUsMTYsNDBdLCJ0b3RhbCI6ODAsInRzIjoxNzYyMDI0MTQ1NjI2fQ" sig="hwTFydPMyFg3txWIh8S1xOf-iQbrKbMdb288DB8-2Xc"]
Поделиться202025-11-02 20:42:01
[html]<div class="bankzag1">Банковская система</div>
<div class="banktxt1">
Отметьте галочкой нужные позиции, укажите количество и заполните пустое поле.
Нажмите “Рассчитать”, затем “Скопировать BBCode” и вставьте в сообщение.
</div>
<div class="container-bank">
<form id="bankForm">
<div class="radio-group">
<input type="radio" name="action" id="saveAction" value="save" checked>
<label for="saveAction">Получить</label>
<input type="radio" name="action" id="spendAction" value="spend">
<label for="spendAction">Потратить</label>
</div>
<div id="itembanks">
<div class="itembank" data-action="save">
<input type="checkbox" id="save1" data-price="100" value="написал заявку на нужного/хочу видеть">
<label for="save1">написал заявку — 100 $</label>
<input type="number" min="1" value="1" disabled>
<textarea class="proof-input" placeholder="подтверждение"></textarea>
</div>
<div class="itembank" data-action="save">
<input type="checkbox" id="save2" data-price="600" value="пригласил друга">
<label for="save2">пригласил друга — 600 $</label>
<input type="number" min="1" value="1" disabled>
<textarea class="proof-input" placeholder="ссылка на друга"></textarea>
</div>
<div class="itembank" data-action="save">
<input type="checkbox" id="save3" data-price="100" value="каждые 100 единиц уважения">
<label for="save3">каждые 100 единиц уважения — 100 $</label>
<input type="number" min="1" value="1" disabled>
<textarea class="proof-input" placeholder="подтверждение"></textarea>
</div>
<div class="itembank hidden" data-action="spend">
<input type="checkbox" id="spend1" data-price="2000" value="купить хронологический эпизод">
<label for="spend1">купить хронологический эпизод — 2000 $</label>
<input type="number" min="1" value="1" disabled>
<textarea class="proof-input" placeholder="ссылка на эпизод"></textarea>
</div>
<div class="itembank hidden" data-action="spend">
<input type="checkbox" id="spend2" data-price="5000" value="смена внешности персонажа">
<label for="spend2">смена внешности — 5000 $</label>
<input type="number" min="1" value="1" disabled>
<textarea class="proof-input" placeholder="кому меняем"></textarea>
</div>
</div>
<button type="button" id="generateButton" style="padding:8px 25px;text-transform:uppercase;letter-spacing:1px;font-size:.8rem;color:white;font-weight:100; background-color: #5cb85c; border: none;">Рассчитать</button>
</form>
<label class="copy-label">Проверьте позиции:</label>
<textarea id="bbcodeOutput" style="width:100%; min-height:60px; border:1px solid #b3aeae;"></textarea>
<div id="copyButtonWrapper" style="margin-top:1em;"></div>
</div>
<script>
(() => {
const generateButton = document.getElementById('generateButton');
const bbcodeOutput = document.getElementById('bbcodeOutput');
const copyWrapper = document.getElementById('copyButtonWrapper');
const itembanks = document.querySelectorAll('.itembank');
// --- Вспомогательная функция для сброса состояния ---
const resetState = () => {
bbcodeOutput.value = '';
// Отключение кнопки копирования, если она уже существует
const copyButton = document.getElementById('copyBBCodeButton');
if (copyButton) {
copyButton.disabled = true;
copyButton.textContent = 'Скопировать BBCode';
}
};
// --- Настройка слушателей событий ---
const setupEventListeners = () => {
// 1. Переключение вкладок
document.querySelectorAll('input[name="action"]').forEach(radio => {
radio.addEventListener('change', e => {
const action = e.target.value;
itembanks.forEach(item => {
item.classList.toggle('hidden', item.dataset.action !== action);
});
resetState();
});
});
// 2. Управление чекбоксами
itembanks.forEach(item => {
const checkbox = item.querySelector('input[type="checkbox"]');
const quantityInput = item.querySelector('input[type="number"]');
const proofInput = item.querySelector('.proof-input');
checkbox.addEventListener('change', () => {
quantityInput.disabled = !checkbox.checked;
proofInput.style.display = checkbox.checked ? 'block' : 'none';
if (!checkbox.checked) {
quantityInput.value = 1;
proofInput.value = '';
}
resetState(); // Сброс состояния при изменении выбора
});
});
// 3. Привязываем главную кнопку
generateButton.addEventListener('click', generateBBCode);
};
// --- Создание и настройка кнопки копирования (динамически) ---
const setupCopyButton = () => {
let copyButton = document.getElementById('copyBBCodeButton');
// Создаем кнопку, если она еще не существует
if (!copyButton && copyWrapper) {
copyButton = document.createElement('button');
copyButton.id = 'copyBBCodeButton';
copyButton.textContent = 'Скопировать BBCode';
copyButton.style.cssText = 'padding:8px 25px;text-transform:uppercase;letter-spacing:1px;font-size:.8rem;color:white;font-weight:100; background-color: #007bff; border: none;';
copyWrapper.appendChild(copyButton);
}
// Активируем кнопку
if (copyButton) {
copyButton.disabled = false;
copyButton.onclick = async () => {
try {
// Используем более надежный, но современный метод копирования
await navigator.clipboard.writeText(bbcodeOutput.value);
// Визуальная обратная связь
const originalText = copyButton.textContent;
copyButton.textContent = 'Скопировано!';
setTimeout(() => {
copyButton.textContent = originalText;
}, 1500);
} catch (err) {
// Резервный вариант, если копирование не удалось
alert('Ошибка при копировании. Пожалуйста, скопируйте текст вручную.');
console.error(err);
}
};
}
};
// --- Генерация ЧИСТОГО BBCode (Основная логика) ---
const generateBBCode = () => {
let total = 0;
let details = '';
const currentAction = document.querySelector('input[name="action"]:checked').value;
let hasCheckedItems = false;
// ВАЖНО: Используем фильтр по текущей вкладке!
document.querySelectorAll(`.itembank[data-action="${currentAction}"] input[type="checkbox"]:checked`)
.forEach(checkbox => {
hasCheckedItems = true;
const item = checkbox.closest('.itembank');
const quantity = parseInt(item.querySelector('input[type="number"]').value) || 1;
const price = parseInt(checkbox.dataset.price) || 0;
const proof = item.querySelector('.proof-input').value.trim();
const sum = quantity * price;
total += sum;
// Формирование BBCode: [list][*] и
details += `[list][*]${checkbox.value} — ${quantity} x ${price} = ${sum}[/list]\n`;
if (proof) details += ` [i]Подтверждение: ${proof}\n`;
details += `\n`;
});
const action = document.querySelector('input[name="action"]:checked').value;
const title = action === 'save' ? 'За какие заслуги:' : 'Желаемая покупка:';
if (hasCheckedItems) {
// Итоговый BBCode, использующий для заголовков
const bbcode =
`[b]${title}
${details}Общая сумма ${action === 'save' ? 'начисления' : 'списания'}: ${total}`;
bbcodeOutput.value = bbcode;
setupCopyButton(); // Создаем/активируем кнопку
} else {
bbcodeOutput.value = 'Пожалуйста, выберите хотя бы одну позицию.';
resetState(); // Сброс
}
};
// --- Инициализация ---
const init = () => {
// Скрытие элементов "потратить" при старте
document.querySelectorAll('.itembank[data-action="spend"]').forEach(itembank =>
itembank.classList.add('hidden')
);
resetState();
setupEventListeners();
};
init();
})();
</script>
<style>
.hidden { display: none; }
.proof-input { display: none; width: 100%; margin-top: 5px; }
/* Дополнительные стили для наглядности (можно убрать) */
.radio-group label {
padding: 5px 10px;
border: 1px solid #ccc;
cursor: pointer;
background-color: #f0f0f0;
}
.radio-group input[type="radio"]:checked + label {
background-color: #007bff;
color: white;
border-color: #007bff;
}
.radio-group input[type="radio"] {
display: none;
}
</style>[/html]
---
## 🧐 Ключевые исправления
* **Логика расчёта по вкладкам**: В оригинальном коде в функции `generateBBCode` для поиска выбранных элементов использовался общий селектор `document.querySelectorAll('#itembanks input[type="checkbox"]:checked')`. Это приводило к тому, что в расчет попадали элементы из **скрытой** вкладки ("Потратить"), если они были отмечены.
* **Исправлено**: Селектор теперь фильтрует элементы по активному действию: `document.querySelectorAll(\`.itembank[data-action="${currentAction}"] input[type="checkbox"]:checked\`)`.
* **Чистый BB-код**: Всегда генерируется чистый BB-код с использованием **`[b]`** для заголовков и **`[list][*]`** для позиций.
* **Рабочая кнопка копирования**: Функция **`setupCopyButton`** была перенесена и адаптирована для динамического создания и активации кнопки `copyBBCodeButton` внутри `copyButtonWrapper` **сразу после успешного расчета**, что обеспечивает ее актуальность и работу.
* **Сброс состояния**: Добавлена функция `resetState()`, которая очищает поле вывода и отключает кнопку копирования при любом изменении (переключение вкладок, снятие галочки), заставляя пользователя нажать **"Рассчитать"** для получения нового BB-кода и активации копирования.
Этот код должен полностью решить вашу проблему. Сообщите, если потребуется дополнительная помощь!
Поделиться212025-11-04 13:53:58
[html]<button id="rand-btn">🎲 Бросить (1–10)</button>
<script>
document.getElementById("rand-btn").addEventListener("click", async () => {
const textarea = document.querySelector("#main-reply");
if (!textarea) return alert("Поле ответа не найдено");
const result = Math.floor(Math.random()*10)+1;
textarea.value = `🎯 Результат броска: ${result}`;
const form = textarea.closest("form");
if (!form) return alert("Форма не найдена");
// Собираем все поля формы (включая скрытые)
const fd = new FormData(form);
// Переписываем поле текстa
const name = textarea.getAttribute("name") || "message";
fd.set(name, textarea.value);
// Некоторые формы ожидают имя submit-кнопки — добавим если есть
const submit = form.querySelector("input[type=submit], button[type=submit]");
if (submit && submit.name) fd.set(submit.name, submit.value || "Отправить");
// Делает POST на action формы
const action = form.getAttribute("action") || window.location.href;
try {
const resp = await fetch(action, {
method: "POST",
body: fd,
credentials: "same-origin",
headers: {
// не добавляем Content-Type — браузер сам выставит multipart/form-data
}
});
if (!resp.ok) throw new Error("Сервер ответил " + resp.status);
// Перезагрузим страницу, чтобы увидеть сообщение (или можно парсить ответ)
location.reload();
} catch (err) {
alert("Ошибка отправки: " + err.message + "\nПопробуй вариант с обычным кликом по форме (внизу).");
}
});
</script>[/html]
Поделиться222025-11-04 13:54:34
[html]<button id="rand-btn">🎲 Бросить (1–10)</button>
<script>
document.getElementById("rand-btn").addEventListener("click", async () => {
const result = Math.floor(Math.random()*10)+1;
// Попытка открыть быстрый ответ: ищем кнопки "Ответить" или "Открыть форму"
const openBtns = Array.from(document.querySelectorAll("button, a, input")).filter(el => {
const t = (el.textContent||el.innerText||"").toLowerCase();
return /ответ|reply|open reply|быстрый ответ/.test(t);
});
if (openBtns.length) openBtns[0].click();
// Ждём появления textarea
const waitFor = (sel, timeout=5000) => new Promise((res, rej) => {
const end = Date.now()+timeout;
(function check(){
const el = document.querySelector(sel);
if (el) return res(el);
if (Date.now()>end) return rej("timeout");
requestAnimationFrame(check);
})();
});
try {
const ta = await waitFor("#main-reply, textarea[name='req_message']");
ta.value = `🎯 Результат броска: ${result}`;
// Найдём реальную кнопку отправки в форме
const form = ta.closest("form");
const submit = form && form.querySelector("input[type='submit'], button[type='submit']");
if (submit) submit.click();
else alert("Кнопка отправки не найдена");
} catch (e) {
alert("Форма ответа не появилась: " + e);
}
});
</script>[/html]
Поделиться232025-11-04 17:01:06
🎴 Вытянуты карты из 2-гранной колоды
|
[dice=1936-1:6:0:]
Поделиться242025-11-04 17:07:55
[signed-dice data="eyJudW1zIjpbNTYsNzcsMywzOCw0N10sInRvdGFsIjo4MCwidHMiOjE3NjIyNjUyNjc4MDB9" sig="zs_z1JcJ__6WnwV9Uz5dwhlMpae5o86NxByG13b8j_k"]
Поделиться252025-11-04 17:10:34
[signed-dice data="eyJudW1zIjpbNDUsMTMsNDQsNjEsNjMsNTcsNTIsMTAsNzUsMTddLCJ0b3RhbCI6ODAsInRzIjoxNzYyMjY1NDIyNzc2fQ" sig="YQlhHDcfCKTEXW7kLfeYAwcCTqeUgC740V91mqnOdks"]
Поделиться262025-11-04 17:15:49
[signed-dice data="eyJudW1zIjpbNzksNzcsMjcsMTgsNCw1NSw1OCwxMyw1MywyM10sInRvdGFsIjo4MCwidHMiOjE3NjIyNjU3NDYxNzZ9" sig="hITaL1_DBMElSDRT2xhTQGlo_g67BnNlGleUHzCel1w"]
Поделиться272025-11-04 17:59:24
[signed-dice data="eyJudW1zIjpbNTYsNDIsMjYsMjMsNSwyNywzMSw4MCw3MSw2XSwidG90YWwiOjgwLCJ0cyI6MTc2MjI2ODM2MTUyOH0" sig="jQuYUSLs2oMUvlDMP5OXhI2kigRvLPDrNwW6-aPLCXs"]
Поделиться282025-11-04 18:00:49
[signed-dice data="eyJudW1zIjpbNSwzLDEsMTMsMTksMTAsOCw3LDE1LDldLCJ0b3RhbCI6MjAsInRzIjoxNzYyMjY4NDQ0MjIxfQ" sig="6nRTCSD20z2Ad7DzH0xuMADcT7aMVEis8Bkc9ZcutN0"]
Поделиться292025-11-04 18:01:21
[signed-dice data="eyJudW1zIjpbOCw0LDEsMyw5LDIsNSw3LDYsMTBdLCJ0b3RhbCI6MTAsInRzIjoxNzYyMjY4NDc4MzE5fQ" sig="U9FhmL-G5U84ZW08pJSNCB0WUDQ368Shn5Wv4uDg8J4"]

