您需要先安装一个扩展,例如 篡改猴、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.");