forked from public/foundryvtt-reve-de-dragon
Add new Compendium
This commit is contained in:
@ -272,7 +272,41 @@ export class RdDActor extends Actor {
|
||||
await this.update( {"data.reve.refoulement": refoulement } );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async deleteTMRRencontreAtPosition( ) {
|
||||
let rencontres = duplicate(this.data.data.reve.rencontre);
|
||||
let len = rencontres.list.length;
|
||||
let i = 0;
|
||||
//console.log("List", rencontres, len);
|
||||
let newTable = [];
|
||||
for( i=0; i < len; i++) {
|
||||
if (rencontres.list[i].coord != this.data.data.reve.tmrpos.coord )
|
||||
newTable.push(rencontres.list[i]);
|
||||
}
|
||||
if ( newTable.length != len ) {
|
||||
rencontres.list = newTable;
|
||||
//console.log("Result: ", rencontres);
|
||||
await this.update( {"data.reve.rencontre": rencontres } );
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async addTMRRencontre( currentRencontre ) {
|
||||
let rencontres = duplicate(this.data.data.reve.rencontre);
|
||||
let len = rencontres.list.length;
|
||||
let i = 0;
|
||||
let already = false;
|
||||
for( i=0; i < len; i++) {
|
||||
if (rencontres.list[i].coord == this.data.data.reve.tmrpos.coord )
|
||||
already = true;
|
||||
}
|
||||
if ( !already ) {
|
||||
rencontres.list.push( {coord: this.data.data.reve.tmrpos.coord, rencontre: currentRencontre} );
|
||||
await this.update( {"data.reve.rencontre": rencontres } );
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async updatePointsDeReve( value ) {
|
||||
let reve = duplicate(this.data.data.reve.reve);
|
||||
@ -423,12 +457,23 @@ export class RdDActor extends Actor {
|
||||
return sortList;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getDraconicList( ) {
|
||||
let draconicList = []
|
||||
for (const item of this.data.items) {
|
||||
if (item.type == "competence" && item.data.categorie == 'draconic' )
|
||||
draconicList.push(item);
|
||||
}
|
||||
return draconicList;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollSort( sortID )
|
||||
{
|
||||
console.log("Loading TMR template!!!");
|
||||
let data = {
|
||||
fatigueHTML:"<table class='table-fatigue'>" + RdDUtility.makeHTMLfatigueMatrix( this.data.data.sante.fatigue.value, this.data.data.sante.endurance.max ).html() + "</table>",
|
||||
draconic: this.getDraconicList(),
|
||||
sort: this.getSortList(),
|
||||
caracReve: this.data.data.carac.reve.value
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import { RdDActor } from "./actor.js";
|
||||
import { RdDItemSheet } from "./item-sheet.js";
|
||||
import { RdDActorSheet } from "./actor-sheet.js";
|
||||
import { RdDUtility } from "./rdd-utility.js";
|
||||
import { TMRUtility } from "./tmr-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
@ -50,7 +51,32 @@ Hooks.once("init", async function() {
|
||||
Actors.registerSheet("foundryvtt-reve-de-dragon", RdDActorSheet, { makeDefault: true });
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("foundryvtt-reve-de-dragon", RdDItemSheet, {makeDefault: true});
|
||||
|
||||
|
||||
});
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/* Foundry VTT Initialization */
|
||||
/* -------------------------------------------- */
|
||||
const table2func = { "queues": TMRUtility.getQueue, "ombre": TMRUtility.getOmbre, "tetehr": TMRUtility.getTeteHR, "tete": TMRUtility.getTete, "souffle": TMRUtility.getSouffle };
|
||||
Hooks.on("chatMessage", (html, content, msg) => {
|
||||
|
||||
// Setup new message's visibility
|
||||
let rollMode = game.settings.get("core", "rollMode");
|
||||
if (["gmroll", "blindroll"].includes(rollMode)) msg["whisper"] = ChatMessage.getWhisperIDs("GM");
|
||||
if (rollMode === "blindroll") msg["blind"] = true;
|
||||
msg["type"] = 0;
|
||||
|
||||
let regExp;
|
||||
regExp = /(\S+)/g;
|
||||
let commands = content.match(regExp);
|
||||
let command = commands[0];
|
||||
|
||||
|
||||
// Roll on a table
|
||||
if (command === "/table") {
|
||||
let tableName = commands[1].toLowerCase();
|
||||
table2func[tableName]();
|
||||
return false
|
||||
}
|
||||
|
||||
return true;
|
||||
} );
|
||||
|
@ -37,20 +37,51 @@ export class RdDTMRDialog extends Dialog {
|
||||
this.cellw = 55;
|
||||
this.actor = actor;
|
||||
this.sort = sort;
|
||||
this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list);
|
||||
//console.log(this.rencontresExistantes);
|
||||
this.pixiApp = new PIXI.Application( {width: 720, height: 860 } );
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
displayPreviousRencontres() {
|
||||
for (let rencontre of this.rencontresExistantes) {
|
||||
rencontre.circle = new PIXI.Graphics();
|
||||
rencontre.circle.beginFill(0x101010, 0.8);
|
||||
rencontre.circle.drawCircle(0, 0, 6);
|
||||
rencontre.circle.endFill();
|
||||
let coordXY = TMRUtility.convertToCellCoord( rencontre.coord );
|
||||
let basey = (coordXY.x % 2 == 0) ? this.col1_y : this.col2_y;
|
||||
let myx = 28+(coordXY.x * this.cellw);
|
||||
let myy = basey+28+(coordXY.y * this.cellh);
|
||||
rencontre.circle.x = myx - (this.cellw/2)+16;
|
||||
rencontre.circle.y = myy - (this.cellh/2)+16;
|
||||
this.pixiApp.stage.addChild(rencontre.circle);
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updatePreviousRencontres() {
|
||||
for (let rencontre of this.rencontresExistantes) {
|
||||
this.pixiApp.stage.removeChild( rencontre.circle );
|
||||
}
|
||||
this.rencontresExistantes = duplicate(this.actor.data.data.reve.rencontre.list);
|
||||
this.displayPreviousRencontres();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async derober() {
|
||||
await this.maximize();
|
||||
let rencontre = duplicate(this.actor.data.data.reve.rencontre);
|
||||
rencontre.list.push( {coord: this.actor.data.data.reve.tmrpos.coord, rencontre: this.currentRencontre} );
|
||||
await this.actor.addTMRRencontre( this.currentRencontre );
|
||||
console.log("-> derober", this.currentRencontre);
|
||||
ChatMessage.create( { title: "TMR", content: game.user.name + " s'est dérobé et quitte les TMR.", user: game.user._id, whisper: ChatMessage.getWhisperRecipients("GM") } );
|
||||
this.close();
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async refouler(data) {
|
||||
ChatMessage.create( { title: "TMR", content: game.user.name + " a refoulé une rencontre.", user: game.user._id, whisper: ChatMessage.getWhisperRecipients("GM") } );
|
||||
await this.actor.deleteTMRRencontreAtPosition( ); // Remove the stored rencontre if necessary
|
||||
let result = await this.actor.ajouterRefoulement(1);
|
||||
this.updatePreviousRencontres();
|
||||
if (result == "souffle") {
|
||||
let souffle = TMRUtility.getSouffle();
|
||||
}
|
||||
@ -60,20 +91,24 @@ export class RdDTMRDialog extends Dialog {
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async matriser(data) {
|
||||
|
||||
this.actor.deleteTMRRencontreAtPosition( ); // Remove the stored rencontre if necessary
|
||||
this.updatePreviousRencontres();
|
||||
await this.maximize();
|
||||
|
||||
let draconic = this.actor.getBestDraconic();
|
||||
let carac = this.actor.getCurrentReve();
|
||||
let level = draconic.data.niveau - this.currentRencontre.force;
|
||||
console.log("Maitriser", carac, draconic.data.niveau, this.currentRencontre.force);
|
||||
let scoreDef = CONFIG.RDD.resolutionTable[carac][level+10];
|
||||
let myroll = new Roll("d100");
|
||||
myroll.roll();
|
||||
if ( myroll.total > scoreDef.score ) {
|
||||
TMRUtility.processRencontreEchec( this.actor, this.rencontre);
|
||||
this.close();
|
||||
ChatMessage.create( { title: "TMR", content: game.user.name + " a perdu sa rencontre.", user: game.user._id, whisper: ChatMessage.getWhisperRecipients("GM") } );
|
||||
this.close();
|
||||
} else {
|
||||
TMRUtility.processRencontreReussite( this.actor, this.rencontre);
|
||||
ChatMessage.create( { title: "TMR", content: game.user.name + " a gagné sa rencontre.", user: game.user._id, whisper: ChatMessage.getWhisperRecipients("GM") } );
|
||||
}
|
||||
console.log("-> matriser", this.currentRencontre);
|
||||
this.updateValuesDisplay();
|
||||
@ -83,26 +118,30 @@ export class RdDTMRDialog extends Dialog {
|
||||
async manageRencontre(coordTMR, cellDescr)
|
||||
{
|
||||
// Roll until diffent than '8'
|
||||
this.currentRencontre = undefined;
|
||||
let rencontre
|
||||
let val = 8;
|
||||
while (val == 8) {
|
||||
let myroll = new Roll("d7");
|
||||
myroll.roll();
|
||||
val = myroll.total;
|
||||
if ( val == 7 ) {
|
||||
rencontre = TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
|
||||
this.currentRencontre = undefined;
|
||||
for (let previousRencontre of this.rencontresExistantes ) {
|
||||
if ( previousRencontre.coord == coordTMR)
|
||||
rencontre = previousRencontre.rencontre;
|
||||
}
|
||||
if ( rencontre == undefined ) {
|
||||
let val = 8;
|
||||
while (val == 8) {
|
||||
let myroll = new Roll("d7");
|
||||
myroll.roll();
|
||||
val = myroll.total;
|
||||
if ( val == 7 ) {
|
||||
rencontre = TMRUtility.rencontreTMRRoll(coordTMR, cellDescr);
|
||||
rencontre.force = new Roll(rencontre.data.force).roll().total;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (rencontre) { // Manages it
|
||||
let myroll = new Roll(rencontre.data.force);
|
||||
myroll.roll();
|
||||
rencontre.force = myroll.total;
|
||||
this.currentRencontre = rencontre;
|
||||
this.currentRencontre = duplicate(rencontre);
|
||||
await this.minimize();
|
||||
let diag = new Dialog( { title: "Rencontre en TMR!",
|
||||
content: "Vous recontrez un " + rencontre.name + " de force " + myroll.total + "<br>",
|
||||
content: "Vous recontrez un " + rencontre.name + " de force " + rencontre.force + "<br>",
|
||||
buttons: {
|
||||
derober: {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
@ -251,7 +290,7 @@ export class RdDTMRDialog extends Dialog {
|
||||
cell1.append( this.pixiApp.view );
|
||||
|
||||
// load the texture we need
|
||||
this.pixiApp.loader.add('tmr', 'systems/foundryvtt-reve-de-dragon/styles/ui/tmp_main_r1.webp').load((loader, resources) => {
|
||||
await this.pixiApp.loader.add('tmr', 'systems/foundryvtt-reve-de-dragon/styles/ui/tmp_main_r1.webp').load((loader, resources) => {
|
||||
// This creates a texture from a 'bunny.png' image
|
||||
const mytmr = new PIXI.Sprite(resources.tmr.texture);
|
||||
// Setup the position of the bunny
|
||||
@ -272,11 +311,12 @@ export class RdDTMRDialog extends Dialog {
|
||||
this.circle.drawCircle(0, 0, 15);
|
||||
this.circle.endFill();
|
||||
this.updateSprites( this );
|
||||
|
||||
|
||||
// Add the bunny to the scene we are building
|
||||
this.pixiApp.stage.addChild(mytmr);
|
||||
this.pixiApp.stage.addChild(this.circle);
|
||||
//this.updateSprites();
|
||||
|
||||
this.displayPreviousRencontres();
|
||||
} );
|
||||
|
||||
await this.actor.santeIncDec("fatigue", 1); // 1 point defatigue
|
||||
|
@ -1,12 +1,210 @@
|
||||
/* -------------------------------------------- */
|
||||
const TMRMapping = { A1: { type: "cite", label: "Cité VIDE"}, B1: { type:"plaines", label: "Plaines d'ASSORH"}, C1: { type:"necropole", label: "Nécropole de KROAK"}, D1: { type: "fleuve", label: "Fleuve de l'Oubli"}, E1: { type: "monts", label: "Monts de KANAI"},
|
||||
F1: { type: "cite", label: "Cité GLAUQUE"}, G1: { type: "desolation", label: "Désolation de JAMAIS"}, H1: {type: "lac", label: "Lac d'ANTI-CALME"}, I1: { type: "plaines", label: "Plaines GRISES"}, J1: { type: "monts", label: "Monts FAINEANTS"},
|
||||
K1: { type: "cite", label: "Cité d'ONKAUS"}, L1: { type: "fleuve", label: "Fleuve de l'Oubli"}, M1: { type: "cite", label: "Cité JALOUSE"},
|
||||
|
||||
A2: { type: "desert", label: "Désert de MIEUX"}, B2: { type:"collines", label: "Collines de DAWELL"}, C2: { type:"monts", label: "Monts GLIGNANTS"}, D2: { type: "cite", label: "Cité de FROST"}, E2: { type: "plaines", label: "Plaines de FIASK"},
|
||||
F2: { type: "lac", label: "Lac de MISERE"}, G2: { type: "marais", label: "Marais NUISANTS"}, H2: {type: "collines", label: "Collines de PARTA"}, I2: { type: "foret", label: "Forêt FADE"}, J2: { type: "desert", label: "Désert de POLY"},
|
||||
K2: { type: "foret", label: "Forêt TAMEE"}, L2: { type: "fleuve", label: "Fleuve de l'Oubli"}, M2: { type: "necropole", label: "Nécropole de LOGOS"}
|
||||
}
|
||||
const TMRMapping = {
|
||||
A1: { type: "cite", label: "Cité Vide"},
|
||||
B1: { type: "plaines", label: "Plaines d’Assorh"},
|
||||
C1: { type: "necropole", label: "Nécropole de Kroak"},
|
||||
D1: { type: "fleuve", label: "Fleuve"},
|
||||
E1: { type: "monts", label: "Monts de Kanaï"},
|
||||
F1: { type: "cite", label: "Cité Glauque"},
|
||||
G1: { type: "desolation", label: "Désolation de Demain"},
|
||||
H1: { type: "lac", label: "Lac d’Anticalme"},
|
||||
I1: { type: "plaines", label: "Plaines Grises"},
|
||||
J1: { type: "monts", label: "Monts Fainéants"},
|
||||
K1: { type: "cite", label: "Cité d’Onkause"},
|
||||
L1: { type: "fleuve", label: "Fleuve"},
|
||||
M1: { type: "cite", label: "Cité Jalouse"},
|
||||
|
||||
A2: { type: "desert", label: "Désert de Mieux"},
|
||||
B2: { type: "collines", label: "Collines de Dawell"},
|
||||
C2: { type: "marais", label: "Marais Glignants"},
|
||||
D2: { type: "cite", label: "Cité de Frost"},
|
||||
E2: { type: "plaines", label: "Plaines de Fiask"},
|
||||
F2: { type: "lac", label: "Lac de Misère"},
|
||||
G2: { type: "marais", label: "Marais Nuisants"},
|
||||
H2: { type: "collines", label: "Collines de Parta"},
|
||||
I2: { type: "foret", label: "Forêt Fade"},
|
||||
J2: { type: "desert", label: "Désert de Poly"},
|
||||
K2: { type: "foret", label: "Forêt Tamée"},
|
||||
L2: { type: "fleuve", label: "Fleuve"},
|
||||
M2: { type: "necropole", label: "Nécropole de Logos"},
|
||||
|
||||
A3: { type: "desolation", label: "Désolation de Demain"},
|
||||
B3: { type: "plaines", label: "Plaines de Rubéga"},
|
||||
C3: { type: "fleuve", label: "Fleuve"},
|
||||
D3: { type: "gouffre", label: "Gouffre d’Oki"},
|
||||
E3: { type: "foret", label: "Forêt d’Estoubh"},
|
||||
F3: { type: "fleuve", label: "Fleuve"},
|
||||
G3: { type: "gouffre", label: "Gouffre de Sun"},
|
||||
H3: { type: "foret", label: "Forêt de Ganna"},
|
||||
I3: { type: "monts", label: "Monts Grinçants"},
|
||||
J3: { type: "cite", label: "Cité Venin"},
|
||||
K3: { type: "plaines", label: "Plaines de Dois"},
|
||||
L3: { type: "lac", label: "Lac Laineux"},
|
||||
M3: { type: "monts", label: "Monts de Vdah"},
|
||||
|
||||
A4: { type: "foret", label: "Forêt de Falconax"},
|
||||
B4: { type: "monts", label: "Monts Crâneurs"},
|
||||
C4: { type: "pont", label: "Pont de Giolii"},
|
||||
D4: { type: "lac", label: "Lac de Foam"},
|
||||
E4: { type: "plaines", label: "Plaines d’Orti"},
|
||||
F4: { type: "fleuve", label: "Fleuve"},
|
||||
G4: { type: "sanctuaire", label: "Sanctuaire Blanc"},
|
||||
H4: { type: "plaines", label: "Plaines de Psark"},
|
||||
I4: { type: "plaines", label: "Plaines de Xiax"},
|
||||
J4: { type: "collines", label: "Collines d’Encre"},
|
||||
K4: { type: "pont", label: "Pont de Fah"},
|
||||
L4: { type: "sanctuaire", label: "Sanctuaire Mauve"},
|
||||
M4: { type: "gouffre ", label: "Gouffre Grisant"},
|
||||
|
||||
A5: { type: "plaines", label: "Plaines de Trilkh"},
|
||||
B5: { type: "collines", label: "Collines de Tanegy"},
|
||||
C5: { type: "marais", label: "Marais Flouants"},
|
||||
D5: { type: "fleuve", label: "Fleuve"},
|
||||
E5: { type: "monts", label: "Monts Brûlants"},
|
||||
F5: { type: "cite", label: "Cité de Panople"},
|
||||
G5: { type: "pont", label: "Pont d’Ik"},
|
||||
H5: { type: "desert", label: "Désert de Krane"},
|
||||
I5: { type: "desolation", label: "Désolation de Demain"},
|
||||
J5: { type: "marais", label: "Marais de Jab"},
|
||||
K5: { type: "fleuve", label: "Fleuve"},
|
||||
L5: { type: "collines", label: "Collines Suaves"},
|
||||
M5: { type: "cite", label: "Cité Rimarde"},
|
||||
|
||||
A6: { type: "necropole", label: "Nécropole de Zniak"},
|
||||
B6: { type: "foret", label: "Forêt de Bust"},
|
||||
C6: { type: "cite", label: "Cité Pavois"},
|
||||
D6: { type: "fleuve", label: "Fleuve"},
|
||||
E6: { type: "sanctuaire", label: "Sanctuaire de Plaine"},
|
||||
F6: { type: "fleuve", label: "Fleuve"},
|
||||
G6: { type: "marais", label: "Marais Glutants"},
|
||||
H6: { type: "monts", label: "Monts Gurdes"},
|
||||
I6: { type: "necropole", label: "Nécropole de Xotar"},
|
||||
J6: { type: "lac", label: "Lac d’Iaupe"},
|
||||
K6: { type: "desolation", label: "Désolation de Demain"},
|
||||
L6: { type: "foret", label: "Forêt Gueuse"},
|
||||
M6: { type: "desolation", label: "Désolation de Demain"},
|
||||
|
||||
A7: { type: "plaines", label: "Plaines de l’Arc"},
|
||||
B7: { type: "marais", label: "Marais Bluants"},
|
||||
C7: { type: "fleuve", label: "Fleuve"},
|
||||
D7: { type: "plaines", label: "Plaines d’A!a"},
|
||||
E7: { type: "foret", label: "Forêt de Glusks"},
|
||||
F7: { type: "fleuve", label: "Fleuve"},
|
||||
G7: { type: "cite", label: "Cité de Terwa"},
|
||||
H7: { type: "gouffre", label: "Gouffre de Kapfa"},
|
||||
I7: { type: "plaines", label: "Plaines de Troo"},
|
||||
J7: { type: "fleuve", label: "Fleuve"},
|
||||
K7: { type: "cite", label: "Cité de Kolix"},
|
||||
L7: { type: "gouffre", label: "Gouffre d’Episophe"},
|
||||
M7: { type: "desert", label: "Désert de Lave"},
|
||||
|
||||
A8: { type: "gouffre", label: "Gouffre de Shok"},
|
||||
B8: { type: "fleuve", label: "Fleuve"},
|
||||
C8: { type: "foret", label: "Forêt Turmide"},
|
||||
D8: { type: "cite", label: "Cité d’Olak"},
|
||||
E8: { type: "plaines", label: "Plaines d’Iolise"},
|
||||
F8: { type: "lac", label: "Lac des Chats"},
|
||||
G8: { type: "plaines", label: "Plaines Sans Joie"},
|
||||
H8: { type: "foret", label: "Forêt d’Ourf"},
|
||||
I8: { type: "fleuve", label: "Fleuve"},
|
||||
J8: { type: "monts", label: "Monts Barask"},
|
||||
K8: { type: "desert", label: "Désert de Fumée"},
|
||||
L8: { type: "monts", label: "Monts Tavelés"},
|
||||
M8: { type: "plaines", label: "Plaines Lavées"},
|
||||
|
||||
A9: { type: "collines", label: "Collines de Korrex"},
|
||||
B9: { type: "lac", label: "Lac de Lucre"},
|
||||
C9: { type: "monts", label: "Monts Tuméfiés"},
|
||||
D9: { type: "pont", label: "Pont d’Orx"},
|
||||
E9: { type: "fleuve", label: "Fleuve"},
|
||||
F9: { type: "plaines", label: "Plaines de Foe"},
|
||||
G9: { type: "desolation", label: "Désolation de Demain"},
|
||||
H9: { type: "collines", label: "Collines de Noirseul"},
|
||||
I9: { type: "fleuve", label: "Fleuve"},
|
||||
J9: { type: "marais", label: "Marais Gronchants"},
|
||||
K9: { type: "sanctuaire", label: "Sanctuaire Noir"},
|
||||
L9: { type: "collines", label: "Collines Cornues"},
|
||||
M9: { type: "necropole", label: "Nécropole de Zonar"},
|
||||
|
||||
A10: { type: "sanctuaire", label: "Sanctuaire d’Olis"},
|
||||
B10: { type: "monts", label: "Monts Salés"},
|
||||
C10: { type: "marais", label: "Marais de Dom"},
|
||||
D10: { type: "fleuve", label: "Fleuve"},
|
||||
E10: { type: "gouffre", label: "Gouffre de Junk"},
|
||||
F10: { type: "marais", label: "Marais Zultants"},
|
||||
G10: { type: "cite", label: "Cité de Sergal"},
|
||||
H10: { type: "plaines", label: "Plaines Noires"},
|
||||
I10: { type: "lac", label: "Lac Wanito"},
|
||||
J10: { type: "fleuve", label: "Fleuve"},
|
||||
K10: { type: "plaines", label: "Plaines Jaunes"},
|
||||
L10: { type: "desert", label: "Désert de Nicrop"},
|
||||
M10: { type: "foret", label: "Forêt de Jajou"},
|
||||
|
||||
A11: { type: "desolation", label: "Désolation de Demain"},
|
||||
B11: { type: "cite", label: "Cité de Brilz"},
|
||||
C11: { type: "pont", label: "Pont de Roï"},
|
||||
D11: { type: "desolation", label: "Désolation de Demain"},
|
||||
E11: { type: "lac", label: "Lac de Glinster"},
|
||||
F11: { type: "cite", label: "Cité de Noape"},
|
||||
G11: { type: "fleuve", label: "Fleuve"},
|
||||
H11: { type: "fleuve", label: "Fleuve"},
|
||||
I11: { type: "pont", label: "Pont de Yalm"},
|
||||
J11: { type: "plaines", label: "Plaines de Miltiar"},
|
||||
K11: { type: "cite", label: "Cité Tonnerre"},
|
||||
L11: { type: "collines", label: "Collines de Kol"},
|
||||
M11: { type: "cite", label: "Cité Crapaud"},
|
||||
|
||||
A12: { type: "plaines", label: "Plaines Sages"},
|
||||
B12: { type: "fleuve", label: "Fleuve"},
|
||||
C12: { type: "lac", label: "Lac de Fricassa"},
|
||||
D12: { type: "collines", label: "Collines d’Huaï"},
|
||||
E12: { type: "monts", label: "Monts Ajourés"},
|
||||
F12: { type: "necropole", label: "Nécropole de 'roat"},
|
||||
G12: { type: "plaines", label: "Plaines de Lufmil"},
|
||||
H12: { type: "collines", label: "Collines de Tooth"},
|
||||
I12: { type: "gouffre", label: "Gouffre Abimeux"},
|
||||
J12: { type: "cite", label: "Cité Folle"},
|
||||
K12: { type: "desolation", label: "Désolation de Demain"},
|
||||
L12: { type: "plaines", label: "Plaines Venteuses"},
|
||||
M12: { type: "collines", label: "Collines Révulsantes"},
|
||||
|
||||
A13: { type: "fleuve", label: "Fleuve"},
|
||||
B13: { type: "gouffre", label: "Gouffre des Litiges"},
|
||||
C13: { type: "desert", label: "Désert de Neige"},
|
||||
D13: { type: "cite", label: "Cité Sordide"},
|
||||
E13: { type: "plaines", label: "Plaines de Xnez"},
|
||||
F13: { type: "foret", label: "Forêt des Cris"},
|
||||
G13: { type: "plaines", label: "Plaines Calcaires"},
|
||||
H13: { type: "desolation", label: "Désolation de Demain"},
|
||||
I13: { type: "monts", label: "Monts Bigleux"},
|
||||
J13: { type: "gouffre", label: "Gouffre de Gromph"},
|
||||
K13: { type: "foret", label: "Forêt de Kluth"},
|
||||
L13: { type: "monts", label: "Monts Dormants"},
|
||||
M13: { type: "plaines", label: "Plaines d’Anjou"},
|
||||
|
||||
A14: { type: "collines", label: "Collines de Stolis"},
|
||||
B14: { type: "necropole", label: "Nécropole de Gorlo"},
|
||||
C14: { type: "foret", label: "Forêt de Bissam"},
|
||||
D14: { type: "sanctuaire", label: "Sanctuaire Plat"},
|
||||
E14: { type: "monts", label: "Monts de Quath"},
|
||||
F14: { type: "plaines", label: "Plaines Brisées"},
|
||||
G14: { type: "desert", label: "Désert de Sek"},
|
||||
H14: { type: "plaines", label: "Plaines Blanches"},
|
||||
I14: { type: "cite", label: "Cité Destituée"},
|
||||
J14: { type: "desert", label: "Désert de Sank"},
|
||||
K14: { type: "necropole", label: "Nécropole d’Antinéar"},
|
||||
L14: { type: "plaines", label: "Plaines de Jislith"},
|
||||
M14: { type: "desolation", label: "Désolation de Demain"},
|
||||
|
||||
A15: { type: "cite", label: "Cité de Mielh"},
|
||||
C15: { type: "plaines", label: "Plaines de Toué"},
|
||||
E15: { type: "foret", label: "Forêt des Furies"},
|
||||
G15: { type: "plaines", label: "Plaines des Soupirs"},
|
||||
I15: { type: "monts", label: "Monts des Dragées"},
|
||||
K15: { type: "collines", label: "Collines Pourpres"},
|
||||
M15: { type: "cite", label: "Cité de Klana"}
|
||||
}
|
||||
|
||||
const rencontresTable = [
|
||||
{name:"Messagers des Rêves", data: { force: "2d4", ignorer: true, derober: true, refoulement: 1,
|
||||
cite: "01-25", sanctuaire: "01-25", plaines: "01-20", pont: "01-20", collines: "01-15", forêt: "01-15", monts: "01-10", desert: "01-10", fleuve: "01-05",
|
||||
@ -68,9 +266,7 @@ export class TMRUtility {
|
||||
/* -------------------------------------------- */
|
||||
static rencontreTMRRoll( coordTMR, cellDescr )
|
||||
{
|
||||
let myroll = new Roll("d100");
|
||||
myroll.roll();
|
||||
let val = myroll.total;
|
||||
let val = new Roll("d100").roll().total;
|
||||
//console.log("Rencontre !!!!", val, coordTMR, cellDescr);
|
||||
|
||||
for( let renc of rencontresTable) {
|
||||
@ -91,7 +287,41 @@ export class TMRUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static processRencontreReussite( actor, rencontre ) {
|
||||
static async processRencontreReussite( actor, rencontre ) {
|
||||
let msg = "Vous avez réussi votre maîtrise ! ";
|
||||
|
||||
if (rencontre.name == "Messagers des Rêves") {
|
||||
msg += "Le Messager des Rêves vous permet de lancer votre sort à XX cases !";
|
||||
|
||||
} else if (rencontre.name == "Passeur des Rêves") {
|
||||
msg += "Le Passeur des Rêves vous téléporte sur une case à distance XX !";
|
||||
|
||||
} else if (rencontre.name == "Fleur des Rêves") {
|
||||
await actor.updatePointsDeReve( rencontre.force );
|
||||
msg += "La Fleur des rêves s'évanouit en vous fournissant " + rencontre.force + " Points de Rêve";
|
||||
|
||||
} else if (rencontre.name == "Mangeur de Rêve") {
|
||||
msg += "Ce Mangeur des Rêves disparait !"
|
||||
|
||||
} else if (rencontre.name == "Changeur de Rêve") {
|
||||
msg += "Ce Changeur des Rêves disparait !"
|
||||
|
||||
} else if (rencontre.name == "Briseur de Rêve") {
|
||||
msg += "Ce Briseur des Rêves disparait !"
|
||||
|
||||
} else if (rencontre.name == "Reflet d'ancien Rêve") {
|
||||
msg += "Ce Reflet d'ancien Rêve disparait !"
|
||||
|
||||
} else if (rencontre.name == "Tourbillon blanc") {
|
||||
msg += "Ce Tourbillon Blanc disparait !"
|
||||
|
||||
} else if (rencontre.name == "Tourbillon noir") {
|
||||
msg += "Ce Tourbillon Noir disparait !"
|
||||
|
||||
} else if (rencontre.name == "Rêve de Dragon") {
|
||||
msg += "Un Rêve de Dragon survient !"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -134,19 +364,39 @@ export class TMRUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getSouffle( ) {
|
||||
static async genericGetTableResult( tableName, toChat)
|
||||
{
|
||||
let pack = game.packs.get("foundryvtt-reve-de-dragon.tables-diverses");
|
||||
await pack.getIndex();
|
||||
let entry = pack.index.find(e => e.name === tableName);
|
||||
let rollQueues = await pack.getEntity(entry._id);
|
||||
let result = rollQueues.draw( { displayChat: toChat } );
|
||||
return result;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getSouffle( toChat ) {
|
||||
return TMRUtility.genericGetTableResult( "Souffles de Dragon", toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getQueue( ) {
|
||||
static async getQueue( toChat = true) {
|
||||
return TMRUtility.genericGetTableResult( "Queues de dragon", toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getTete( ) {
|
||||
static async getTete( toChat = true ) {
|
||||
return TMRUtility.genericGetTableResult( "Têtes de Dragon pour haut-rêvants", toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async getTeteHR( toChat = true ) {
|
||||
return TMRUtility.genericGetTableResult( "Têtes de Dragon pour tous personnages", toChat);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getOmbre( ) {
|
||||
static async getOmbre( toChat = true ) {
|
||||
return TMRUtility.genericGetTableResult( "Ombre de Thanatos", toChat);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user