From f76e0db046b09c8251dcccbb70f44930a933b569 Mon Sep 17 00:00:00 2001 From: Vincent Vandemeulebrouck Date: Thu, 29 Apr 2021 02:57:56 +0200 Subject: [PATCH] =?UTF-8?q?Jolis=20d=C3=A9s=20draconiques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- icons/heures/hdragon.webp | Bin 0 -> 2116 bytes module/actor.js | 3 +- module/constants.js | 1 + module/de-draconique.js | 27 ------------ module/rdd-commands.js | 3 +- module/rdd-dice.js | 84 +++++++++++++++++++++++++++++++++++++- module/rdd-main.js | 10 ++++- module/tmr-rencontres.js | 3 +- 8 files changed, 94 insertions(+), 37 deletions(-) create mode 100644 icons/heures/hdragon.webp create mode 100644 module/constants.js delete mode 100644 module/de-draconique.js diff --git a/icons/heures/hdragon.webp b/icons/heures/hdragon.webp new file mode 100644 index 0000000000000000000000000000000000000000..48659c684006b41c1f75af8fd13668768ee6c366 GIT binary patch literal 2116 zcmb`I=|9ws8peN<>`P+}HMYTIIS64gq_M<2lE}U`WGPF=*5tu>3PZNg3>s3l!I(6b z&{!(V7_u+fRkmVm6$v>$=e#)oz_~y7{pxyi-7l`|Yhz(%hTsAK2UDcAy|tbr4*&q* z<2(A#UbeJ0kK_aZP+`K+Go{zReY37g)YJz~MMMR{h;@Na%LDbvfl$>iBUdAK58O$) z@S4C45-|zST^MlWyMJlwXyQ+Qn%7F}tl~?!`{A-#-pwrZwy7dY!u!SEL= z2N@mw!*SarXtnU#GmrP&&(BsNwhoV)+1p+rTF>`{@gJzTW#d(O!vN}^MU_?EK5n6x z(gYA)Y98%v*bYTifCqzf`Q{Hh$HbK8LK7rqX!SW*c<7@_$J64`qgRs1*X4MP4pz`Y zlOfLHLoU2aqL^0o%}pQ0ABWj^l;J!mt;l0R+vf4&W+wVaR5e5eC5YvZIt8?<2(lLl z0~v;`2|3a#afWRVC?h)U0Z-UvD(i(Fcd^R?4oBOfn`pORz~6x>#0yFKAVAGI8-HS5 z0?;fntKag~_RQZ0CUJWPTRkfSuBqfTUTAN_mnq`f-|v$T0S+y-Ca!GHUR(KZeaXS- zaFvOhz5Z8W)F+{{lAXHpdWnM1QMCnw#Eui$`HrLTl_!4Q4LxMtT}a=IG)H6Xb6cg<=(egz5NY6_)u&PO=F zl2791I`E95{-trD0V}5P40aaW=j0H7yEH0qoJ(-=+r?$t3e#wh%&E?Rd zB%Q789{2rp9jzDfV5H3$ zx`YxeBe$!mDk4a=miY5D@70BeH0|ILsQw)~1x0GXI9CrKS+lfvw;B<*AemXuw9HxV z)#zJ;eD1!wb#WnO>hsEu!Jk)9rO*B(8 z(bjE|`Mu={0hSaOV)Gl*ROxzW*4$qk_Y+Z;Qb3BeTZhf^V6j=^D=I~5z656Kk}0D| z-O;~Ah#3+=p2oOSg#9?#vg8+*T{YObLXdZPpp|*&gZm7gJcZ&|KTEFns6wdA8Vm2S zFEE#q0Aiwj@Sea7@=@rjfU_2;;MD}ck&luoJ(CQIK1hUC!G;umAxlJ ztDW|%`KfC%mSN&&a8D|ibiwB#KKVm*V_OH;<10rWmkmkO`7|9R6Ku;jzZ6E@)H11# z9&Guj=5TIHS;=)Pqb@3q@@y-Vf3-_Pe40pQE@^fMtXD?2{*LvFDW^k=*JQ!3SsUJa zg-Z|S9A<(f0PtbrexmK1nzif1^csEqPS?L$ijTV{cwO3j-fL4mi{=tQ8s1C7C-Wt< z;Tk+B(*H#1os6|94vA%#C`zP^Uv7_Jg+qY#-LMenGy||@Z@GC{23-B)K!Cj-xAT2> zPMlUMDSH(#;mpzmz2t0^IG4@TQ$Tv}X$k-lb`fTOgu&4{wk5c~?Apmy#zZG0{5juN zZD6uqdB|A-*}zsVO6yz#zmR4D)uW~<4Bu@RU~;Fz22rLbgGju=+c0X5zfb4HeKN!I zBus$(J~dO!D6$sdbeghw?P7u4$Y%xMhpx$um@*DP=_bVBWW@)|hi`dfiqUN|o`Mzm zJU~&3pxsRA<&B0{_lGV$e^4roiu+`K%|<&w%7+!XZud)r5hs9C|yXc_;YjongZWo48-Oz-;*PXIztcZ z&4}kde!FA9nWHmLlDZ$p-zEYj>{Il8@MJeRT$MXIHZHIxM~=tv#QfgI`ibWeeY~38 zgg7TasB9z@Do0GX(l&R8fLD$;KHA=H*<1z(`WN7vt{8vDXpX{-(R{4>JQcZdfu|lx zdWwyi+>yaLe#5yBYiqlF#q3J|2TrOya7<*Gf@2zQf`NRHG5`WVhJ${uY|kmmzbHHh z0wlTpgFZ#PI%CAW#x@r~N^F^cpNghor1rfR40gI1QLL= 7) { // Rêve de Dragon ! diff --git a/module/constants.js b/module/constants.js new file mode 100644 index 00000000..708e4ab5 --- /dev/null +++ b/module/constants.js @@ -0,0 +1 @@ +export const SYSTEM_RDD = "foundryvtt-reve-de-dragon"; diff --git a/module/de-draconique.js b/module/de-draconique.js deleted file mode 100644 index abfa4d45..00000000 --- a/module/de-draconique.js +++ /dev/null @@ -1,27 +0,0 @@ -import { RdDDice } from "./rdd-dice.js"; - -export class DeDraconique extends Roll{ - - static async ddr(rollMode=undefined) { - let ddr = new DeDraconique().evaluate(); - await RdDDice.show(ddr, rollMode); - return ddr; - } - - constructor(){ - super("1d8x8 - 0") - } - - evaluate() { - super.evaluate(); - const rerolls = Math.ceil(this.total / 8); - this.terms[this.terms.length - 1] = rerolls; - this.results[this.results.length - 1] = rerolls; - this._total -= rerolls; - return this; - } - - async render(chatOptions) { - return super.render(chatOptions) - } -} \ No newline at end of file diff --git a/module/rdd-commands.js b/module/rdd-commands.js index db0985d7..bce05efc 100644 --- a/module/rdd-commands.js +++ b/module/rdd-commands.js @@ -1,6 +1,5 @@ /* -------------------------------------------- */ -import { DeDraconique } from "./de-draconique.js"; import { RdDItemCompetence } from "./item-competence.js"; import { Misc } from "./misc.js"; import { RdDCarac } from "./rdd-carac.js"; @@ -258,7 +257,7 @@ export class RdDCommands { /* -------------------------------------------- */ async rollDeDraconique(msg) { - let ddr = new DeDraconique().evaluate(); + let ddr = new Roll("1dr + 7").evaluate(); ddr.showDice = true; await RdDDice.showDiceSoNice(ddr); RdDCommands._chatAnswer(msg, `Lancer d'un Dé draconique: ${ddr.total}`); diff --git a/module/rdd-dice.js b/module/rdd-dice.js index 81d41057..9ba7aa11 100644 --- a/module/rdd-dice.js +++ b/module/rdd-dice.js @@ -1,15 +1,95 @@ import { ChatUtility } from "./chat-utility.js"; +import { SYSTEM_RDD } from "./constants.js"; +import { Misc } from "./misc.js"; + +const signeDragon = 'systems/foundryvtt-reve-de-dragon/icons/heures/hdragon.webp'; +const imgSigneDragon = ``; +const labelsDeDragon = ['1', '2', '3', '4', '5', '6', signeDragon, '0']; +const bumpsDeDragon = [, , , , , , signeDragon, ]; + +/** De7 pour les jets de rencontre */ +export class De7 extends Die { + /** @override */ + static DENOMINATION = "7"; + + static diceSoNiceData() { + return { type: "d7", labels: labelsDeDragon, bumpMaps: bumpsDeDragon, system: SYSTEM_RDD } + } + + constructor(termData) { + termData.faces = 8; + super(termData); + } + + evaluate() { + super.evaluate(); + this.explode("x=8"); + return this; + } + + get total() { + return this.values.filter(it => it != 8).reduce(Misc.sum(), 0); + } + + static getResultLabel(result) { + switch (result) { + case '7': return imgSigneDragon + } + return result; + } +} + +/** DeDraconique pour le D8 sans limite avec 8=>0 */ +export class DeDraconique extends Die { + static DENOMINATION = "r"; + + static diceSoNiceData() { + return { type: "dr", labels: labelsDeDragon, bumpMaps: bumpsDeDragon, system: SYSTEM_RDD } + } + + constructor(termData) { + termData.faces = 8; + super(termData); + } + + evaluate() { + super.evaluate(); + this.explode("x=7"); + return this; + } + + get total() { + return this.values.filter(it => it != 8).reduce(Misc.sum(), 0); + } + + static getResultLabel(result) { + switch (result) { + case '7': return imgSigneDragon + } + return result; + } +} export class RdDDice { + static init() { + CONFIG.Dice.terms[De7.DENOMINATION] = De7; + CONFIG.Dice.terms[DeDraconique.DENOMINATION] = DeDraconique; + } + + static diceSoNiceReady(dice3d) { + dice3d.addSystem({ id: SYSTEM_RDD, name: "Rêve de Dragon" }); + dice3d.addDicePreset(De7.diceSoNiceData()); + dice3d.addDicePreset(DeDraconique.diceSoNiceData()); + } /* -------------------------------------------- */ static async show(roll, rollMode = undefined) { - if (roll.showDice || game.settings.get("foundryvtt-reve-de-dragon", "dice-so-nice") == true) { + if (roll.showDice || game.settings.get(SYSTEM_RDD, "dice-so-nice") == true) { await this.showDiceSoNice(roll, rollMode); } return roll; } - + /* -------------------------------------------- */ static async showDiceSoNice(roll, rollMode = undefined) { if (game.modules.get("dice-so-nice") && game.modules.get("dice-so-nice").active) { diff --git a/module/rdd-main.js b/module/rdd-main.js index 0d030779..dbdc66d0 100644 --- a/module/rdd-main.js +++ b/module/rdd-main.js @@ -22,13 +22,13 @@ import { RdDTokenHud } from "./rdd-token-hud.js"; import { RdDCommands } from "./rdd-commands.js"; import { RdDCombatManager, RdDCombat } from "./rdd-combat.js"; import { ChatUtility } from "./chat-utility.js"; -import { RdDItemCompetence } from "./item-competence.js"; import { StatusEffects } from "./status-effects.js"; import { RddCompendiumOrganiser } from "./rdd-compendium-organiser.js"; import { ReglesOptionelles } from "./regles-optionelles.js"; import { TMRRencontres } from "./tmr-rencontres.js"; import { RdDHotbar } from "./rdd-hotbar-drop.js" import { EffetsDraconiques } from "./tmr/effets-draconiques.js"; +import { RdDDice } from "./rdd-dice.js"; /* -------------------------------------------- */ /* Foundry VTT Initialization */ @@ -154,6 +154,7 @@ Hooks.once("init", async function () { CONFIG.Combat.entityClass = RdDCombatManager; // préparation des différents modules + RdDDice.init(); RdDCommands.init(); RdDCombat.init(); RdDCombatManager.init(), @@ -212,7 +213,12 @@ Hooks.once("ready", function () { }); /* -------------------------------------------- */ -/* Foundry VTT Initialization */ +/* Dice-so-nice ready */ +/* -------------------------------------------- */ +Hooks.once('diceSoNiceReady', (dice3d) => RdDDice.diceSoNiceReady(dice3d)); + +/* -------------------------------------------- */ +/* Foundry VTT chat message */ /* -------------------------------------------- */ Hooks.on("chatMessage", (html, content, msg) => { if (content[0] == '/') { diff --git a/module/tmr-rencontres.js b/module/tmr-rencontres.js index 6905b6cc..4babca0f 100644 --- a/module/tmr-rencontres.js +++ b/module/tmr-rencontres.js @@ -1,4 +1,3 @@ -import { DeDraconique } from "./de-draconique.js"; import { Grammar } from "./grammar.js"; import { Misc } from "./misc.js"; import { TMRUtility } from "./tmr-utility.js"; @@ -382,7 +381,7 @@ export class TMRRencontres { /* -------------------------------------------- */ static async evaluerForceRencontre(rencontre) { if (TMRRencontres.isReveDeDragon(rencontre)) { - const ddr = await DeDraconique.ddr("selfroll") + const ddr = new Roll("1dr + 7").evaluate(); rencontre.force = 7 + ddr.total; } else {