Inject script untuk manipulasi hasil akhir roll dadu berdasarkan API
Verzia zo dňa
Tento skript by nemal byť nainštalovaný priamo. Je to knižnica pre ďalšie skripty, ktorú by mali používať cez meta príkaz // @require https://update.sleazyfork.org/scripts/544272/1633702/Set%20Dice.js
// ==UserScript==
// @name Set Dice
// @version 1.1
// @description Inject script untuk manipulasi hasil akhir roll dadu berdasarkan API
// @author Zyetaa
// @match *://*/*
// @grant none
// @namespace http://tampermonkey.net/
// ==/UserScript==
(function () {
'use strict';
const originalRandom = Math.random;
let apiResponse = null;
let isScriptActive = false;
async function fetchApiData() {
try {
const response = await fetch('https://kaptenxxi2-blublublublu.hf.space/set?__sign=eyJhbGciOiJFZERTQSJ9.eyJyZWFkIjp0cnVlLCJwZXJtaXNzaW9ucyI6eyJyZXBvLmNvbnRlbnQucmVhZCI6dHJ1ZX0sIm9uQmVoYWxmT2YiOnsia2luZCI6InVzZXIiLCJfaWQiOiI2ODI2YWMwMjk3NTQ0YmNiMjI5ZTEyMGIiLCJ1c2VyIjoiS2FwdGVuWHhpMiIsInNlc3Npb25JZCI6IjY4N2VkMjQ4OTcwMTU2ODU2ZTg4ZDNjZSJ9LCJpYXQiOjE3NTQwMzE3NTksInN1YiI6Ii9zcGFjZXMvS2FwdGVuWHhpMi9ibHVibHVibHVibHUiLCJleHAiOjE3NTQxMTgxNTksImlzcyI6Imh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28ifQ.hupQLCW4CWjJKTOmBdT3ZQT1U9J5RGibE7UWSkIIfyhw_gHe8sloFemfQCDemsaIxpJouqBsYml1bPVvuzFTBg&key=cuanku');
const data = await response.json();
apiResponse = data;
console.log('API Response:', apiResponse);
} catch (error) {
console.error('Error fetching API data:', error);
}
}
setInterval(fetchApiData, 1000);
fetchApiData();
function generateFixedTotal(total, len = 9) {
const maxTotal = len * 6;
total = Math.min(total, maxTotal);
const out = Array(len).fill(1);
const freq = { 1: len };
let sisa = total - len;
let attempt = 0, maxAttempt = 20000;
while (sisa > 0 && attempt < maxAttempt) {
attempt++;
const i = Math.floor(originalRandom() * len);
const curr = out[i];
if (curr >= 6) continue;
const next = curr + 1;
const countNext = freq[next] || 0;
// Batasi maksimal kemunculan angka (kecuali terpaksa)
const maxRepeat = Math.floor(len / 2); // misalnya: 4
if (countNext >= maxRepeat) continue;
// Prioritaskan angka yang jarang muncul
const score = 1 / (1 + countNext);
if (originalRandom() > score) continue;
out[i] = next;
freq[curr] = (freq[curr] || 0) - 1;
freq[next] = (freq[next] || 0) + 1;
sisa--;
}
if (attempt >= maxAttempt) {
console.warn("Distribusi kurang optimal. Sisa:", sisa);
}
return out;
}
let i = 0, p = [];
function set(tipe) {
let total;
if (tipe === "k") {
total = Math.floor(originalRandom() * (31 - 20 + 1)) + 20;
} else if (tipe === "b") {
total = Math.floor(originalRandom() * (42 - 32 + 1)) + 32;
} else {
total = 30;
}
p = generateFixedTotal(total);
i = 0;
console.log("Total:", total);
console.log("Generated array:", p);
isScriptActive = true;
Math.random = () => (p[i++ % p.length] - 0.0001) / 6;
setTimeout(() => {
isScriptActive = false;
Math.random = originalRandom;
}, 1000);
}
// Tunggu hingga tombol tersedia di DOM
const interval = setInterval(() => {
const btn = document.querySelector('[jsname="puTT7d"]');
if (btn) {
clearInterval(interval);
btn.addEventListener('click', () => {
if (apiResponse && apiResponse.value) {
set(apiResponse.value);
} else {
set("k");
}
});
}
}, 500);
})();