您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Faire des jets avec prise en compte des stats via des compétences
当前为
// ==UserScript== // @name Roll // @namespace InGame // @author Odul, MockingJay // @match https://www.dreadcast.net/Main // @version 1.0 // @grant none // @description Faire des jets avec prise en compte des stats via des compétences // @license MIT // ==/UserScript== // Alias de commandes, utiliser le format suivant: // alias: "commande", const aliases = { for: "force", agi: "agilite", res: "resistance", per: "perception", fur: "furtivite", fufu: "furtivite", info: "informatique", inf: "informatique", med: "medecine", inge: "ingenierie", ing: "ingenierie", } // Pour ajouter des formules personnalisées: // - Le nom doit être en minuscules, sans accents si espaces, underscores autorisés // - Les coefficients sont dans l'ordre: force, agilité, résistance, perception, furtivité, informatique, médecine, ingénierie const formulas = { force: [1, 0, 0, 0, 0, 0, 0, 0], agilite: [0, 1, 0, 0, 0, 0, 0, 0], resistance: [0, 0, 1, 0, 0, 0, 0, 0], perception: [0, 0, 0, 1, 0, 0, 0, 0], furtivite: [0, 0, 0, 0, 1, 0, 0, 0], informatique: [0, 0, 0, 0, 0, 1, 0, 0], medecine: [0, 0, 0, 0, 0, 0, 1, 0], ingenierie: [0, 0, 0, 0, 0, 0, 0, 1], dpasse: [1, 2, 0, 1, 0, 0, 0, 0], drecep: [1, 1, 0, 2, 0, 0, 0, 0], dplaque: [3, 1, 0, 0, 0, 0, 0, 0], dfeinte: [1, 1, 0, 1, 0, 0, 0, 0], dinter: [0, 1, 0, 1, 0, 0, 0, 0], dtir: [1, 1, 0, 0, 0, 0, 0, 0], darret: [1, 0, 0, 3, 0, 0, 0, 0], hack: [0, 1, 0, 0, 0, 16, 0, 3], programmation: [0, 0, 0, 0, 0, 9, 0, 1], diag_meca: [0, 0, 0, 2, 0, 1, 0, 2], cablage: [0, 0, 0, 0, 0, 3, 0, 7], assemblage: [0, 0, 0, 1, 0, 0, 0, 4], desassemblage: [1, 0, 0, 0, 0, 0, 0, 4], reparation: [1, 0, 0, 0, 0, 0, 0, 4], soudure: [1, 0, 0, 3, 0, 0, 0, 6], crochetage: [0, 1, 0, 0, 0, 0, 0, 3], desamorcer: [0, 1, 0, 3, 0, 0, 0, 16], diag_medical: [0, 0, 0, 1, 0, 0, 4, 0], chirurgie: [0, 1, 0, 1, 0, 0, 3, 0], massage_cardiaque: [3, 0, 0, 0, 0, 0, 7, 0], perfusion: [0, 1, 0, 2, 0, 0, 2, 0], desinfecter: [0, 3, 0, 0, 0, 0, 2, 0], garot: [1, 0, 0, 0, 0, 0, 1, 0], tir: [0, 1, 0, 4, 0, 0, 0, 0], parade: [0, 4, 0, 1, 0, 0, 0, 0], esquive: [1, 9, 0, 0, 0, 0, 0, 0], liberation: [4, 5, 0, 0, 0, 0, 0, 1], immobilisation: [1, 0, 1, 0, 0, 0, 0, 0], equilibre: [0, 4, 1, 0, 0, 0, 0, 0], volonte: [4, 2, 9, 1, 1, 1, 1, 1], blessure: [0, 1, 9, 0, 0, 0, 0, 0], enfoncer: [7, 0, 3, 0, 0, 0, 0, 0], mensonge: [0, 3, 0, 0, 5, 0, 2, 0], dmensonge: [0, 3, 0, 5, 0, 0, 2, 0], maquillage: [0, 8, 0, 2, 0, 0, 0, 0], musique: [0, 3, 0, 2, 0, 0, 0, 0], accorder: [0, 0, 0, 2, 0, 0, 0, 3], fee_lation: [0, 6, 0, 1, 0, 0, 4, 0], orgasme: [0, 1, 1, 0, 0, 0, 0, 0], skype: [0, 0, 0, 0, 0, 0, 2, 0], fee_niasse: [0, 1, 1, 0, 0, 0, 0, 0], overflow: [1, 1, 1, 1, 1, 1, 1, 1], } const getStats = function() { let stats = []; for (let i = 1; i <= 8; i++) { stats.push(parseInt($('#statistiques .infos .stat_' + i + '_entier').text())); } return stats; } const computeValue = function(skillName){ if (!formulas[skillName]) { return null; } const stats = getStats(); const totalWeight = formulas[skillName].reduce(((total, weight) => total + weight), 0); const skillPoints = stats.reduce(((total, stat, i) => total + stat * formulas[skillName][i]), 0); return 100 - Math.floor((skillPoints / totalWeight) / 6); } const retrieveValue = function(facesde, comp, diff) { const chatContent = $("#chatContent").text().trim().replace(/[^\S\n]{2,}/g, ' '); if (!chatContent) { return; } const lignes = chatContent.split("\n"); for (let i = lignes.length - 1; i >= 0; i--) { let ligne = lignes[i].trim(); if (ligne.includes($("txt_pseudo").text() + " lance 1 dé de " + facesde + " et fait")) { let result = parseInt(ligne.substring(ligne.indexOf("et fait") + 7).trim()) + (100 - facesde); let threshold = 0; switch(diff) { case "f": case "facile": threshold = 25; diff = "facile"; break; case "m": case "moyen": threshold = 50; diff = "moyen"; break; case "d": case "difficile": threshold = 75; diff = "difficile"; break; default: threshold = parseInt(diff) || 0; } let textResult = ""; if (!threshold) { textResult += "/me [couleur=jaune]fait "+ result +" à son jet de " + comp + "[/couleur]"; } else if (["facile", "moyen", "difficile"].includes(diff)) { textResult += result >= threshold ? "/me [couleur=vert]réussit[/couleur] " : "/me [couleur=rouge]rate[/couleur] "; textResult += "[couleur=jaune]un jet " + diff + " de " + comp + " et fait " + result + "[/couleur]"; } else { textResult += result >= threshold ? "/me [couleur=vert]réussit[/couleur] " : "/me [couleur=rouge]rate[/couleur] "; textResult += "[couleur=jaune]un jet de " + comp + " en faisant " + result + " contre un seuil de " + threshold + "[/couleur]"; } $("#chatForm .text_chat").val(textResult); nav.getChat().send(); break; } } } const jetDes = function(e) { if (e.keyCode==13) { let value = $("#chatForm .text_chat").val(); if (!value.match(/^\/roll [a-zA-Z]+/)) { return; // Ne traiter que l'envoi de /roll avec commande (ignore également les XdY) } let comp = value.trim().split(" ")[1].toLowerCase(); const diff = value.trim().split(" ")[2]; comp = aliases[comp] || comp; const facesde = computeValue(comp); if (facesde) { value = '/roll 1d' + facesde; setTimeout(function() { retrieveValue(facesde, comp, diff) }, 500); } else { e.preventDefault(); // Empêche l'envoi d'un roll mal écrit } $("#chatForm .text_chat").val(value); } } document.addEventListener('keypress', jetDes, false); console.log("Script Roll - Actif.");