2020-06-07 23:16:50 +02:00
/ * *
* RdD system
* Author : LeRatierBretonnien
* Software License : GNU GPLv3
* /
/* -------------------------------------------- */
/* -------------------------------------------- */
// Import Modules
import { RdDActor } from "./actor.js" ;
import { RdDItemSheet } from "./item-sheet.js" ;
import { RdDActorSheet } from "./actor-sheet.js" ;
import { RdDUtility } from "./rdd-utility.js" ;
2020-07-21 23:51:24 +02:00
import { TMRUtility } from "./tmr-utility.js" ;
2020-06-07 23:16:50 +02:00
/* -------------------------------------------- */
/* Foundry VTT Initialization */
/* -------------------------------------------- */
2020-09-02 22:00:35 +02:00
/************************************************************************************/
const _patch _initiative = ( ) => {
Combat . prototype . rollInitiative = async function (
ids ,
formula = null ,
messageOptions = { }
) {
console . log (
` ${ game . data . system . data . title } | Combat.rollInitiative() ` ,
ids ,
formula ,
messageOptions
) ;
// Structure input data
ids = typeof ids === "string" ? [ ids ] : ids ;
const currentId = this . combatant . _id ;
// calculate initiative
for ( let cId = 0 ; cId < ids . length ; cId ++ ) {
const c = this . getCombatant ( ids [ cId ] ) ;
//if (!c) return results;
let armeCombat ;
for ( const item of c . actor . data . items ) {
if ( item . type == "arme" && item . data . equipe ) {
armeCombat = duplicate ( item ) ;
}
}
//console.log("Combatat", c);
let compName = ( armeCombat == undefined ) ? "Corps à corps" : armeCombat . data . competence ;
let competence = RdDUtility . findCompetence ( c . actor . data . items , compName ) ;
//const cf = formula || this._getInitiativeFormula(c);
let rollFormula = "1d6+" + competence . data . niveau + "+" + Math . ceil ( c . actor . data . data . carac [ competence . data . defaut _carac ] . value / 2 ) ;
const roll = this . _getInitiativeRoll ( c , rollFormula ) ;
//console.log("Compute init for", armeCombat, competence, rollFormula, roll.total);
await this . updateEmbeddedEntity ( "Combatant" , { _id : c . _id , initiative : roll . total } ) ;
// Send a chat message
let rollMode =
messageOptions . rollMode || game . settings . get ( "core" , "rollMode" ) ;
let messageData = mergeObject (
{
speaker : {
scene : canvas . scene . _id ,
actor : c . actor ? c . actor . _id : null ,
token : c . token . _id ,
alias : c . token . name ,
sound : CONFIG . sounds . dice ,
} ,
flavor : ` ${ c . token . name } a fait son jet d'Initiative (Compétence ${ competence . name } ) ` ,
} ,
messageOptions
) ;
roll . toMessage ( messageData , { rollMode , create : true } ) ;
}
return this ;
} ;
}
/************************************************************************************/
2020-06-07 23:16:50 +02:00
Hooks . once ( "init" , async function ( ) {
console . log ( ` Initializing Reve de Dragon System ` ) ;
// preload handlebars templates
RdDUtility . preloadHandlebarsTemplates ( ) ;
2020-08-13 22:28:56 +02:00
// Create specific settings
game . settings . register ( "foundryvtt-reve-de-dragon" , "configuration" , {
name : "configuration" ,
scope : "world" ,
config : false ,
type : Object
} ) ;
//game.settings.get("<systemName>","<settingName>") to retrieve it and game.settings.set("<systemName>","<settingName>", <newValue>)
2020-06-07 23:16:50 +02:00
/ * *
* Set an initiative formula for the system
* @ type { String }
* /
CONFIG . Combat . initiative = {
formula : "1d20" ,
decimals : 2
} ;
2020-06-17 20:31:43 +02:00
game . socket . on ( "system.foundryvtt-reve-de-dragon" , data => {
RdDUtility . performSocketMesssage ( data ) ;
} ) ;
2020-06-07 23:16:50 +02:00
// Define custom Entity classes
CONFIG . Actor . entityClass = RdDActor ;
CONFIG . RDD = { }
CONFIG . RDD . resolutionTable = RdDUtility . buildResolutionTable ( ) ;
CONFIG . RDD . level _category = RdDUtility . getLevelCategory ( ) ;
CONFIG . RDD . carac _array = RdDUtility . getCaracArray ( ) ;
CONFIG . RDD . bonusmalus = RdDUtility . getBonusMalus ( ) ;
game . data . RdDUtility = RdDUtility ;
// Register sheet application classes
Actors . unregisterSheet ( "core" , ActorSheet ) ;
Actors . registerSheet ( "foundryvtt-reve-de-dragon" , RdDActorSheet , { makeDefault : true } ) ;
Items . unregisterSheet ( "core" , ItemSheet ) ;
Items . registerSheet ( "foundryvtt-reve-de-dragon" , RdDItemSheet , { makeDefault : true } ) ;
2020-09-02 22:00:35 +02:00
// Patch the initiative formula
_patch _initiative ( ) ;
2020-07-21 23:51:24 +02:00
} ) ;
2020-07-24 10:51:11 +02:00
/* -------------------------------------------- */
/* Foundry VTT Initialization */
/* -------------------------------------------- */
Hooks . once ( "ready" , function ( ) {
ChatMessage . create ( { title : "Bienvenu dans le Rêve !" , content : "Bienvenu dans le Rêve des Dragons !<br> " +
"Vous trouverez quelques infos pour démarrer dans ce document : @Compendium[foundryvtt-reve-de-dragon.rappel-des-regles.7uGrUHGdPu0EmIu2]{Documentation MJ/Joueurs}" } ) ;
} ) ;
2020-07-21 23:51:24 +02:00
/* -------------------------------------------- */
/* 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 ) => {
2020-06-07 23:16:50 +02:00
2020-07-21 23:51:24 +02:00
// 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 ;
2020-06-07 23:16:50 +02:00
2020-07-21 23:51:24 +02:00
let regExp ;
regExp = /(\S+)/g ;
let commands = content . match ( regExp ) ;
let command = commands [ 0 ] ;
2020-06-07 23:16:50 +02:00
2020-07-21 23:51:24 +02:00
// Roll on a table
if ( command === "/table" ) {
let tableName = commands [ 1 ] . toLowerCase ( ) ;
table2func [ tableName ] ( ) ;
return false
}
return true ;
} ) ;