2021-04-01 21:18:36 +02:00
/* -------------------------------------------- */
import { VadentisCombat } from "./vadentis-combat.js" ;
/* -------------------------------------------- */
export class VadentisUtility extends Entity {
/* -------------------------------------------- */
static async preloadHandlebarsTemplates ( ) {
const templatePaths = [
'systems/foundryvtt-vadentis/templates/actor-sheet.html' ,
2021-04-01 22:35:03 +02:00
'systems/foundryvtt-vadentis/templates/item-sheet.html' ,
'systems/foundryvtt-vadentis/templates/score-option-list.html' ,
2021-04-01 22:52:41 +02:00
'systems/foundryvtt-vadentis/templates/malus-option-list.html' ,
'systems/foundryvtt-vadentis/templates/bonus-option-list.html' ,
2021-04-01 22:35:03 +02:00
'systems/foundryvtt-vadentis/templates/editor-notes-gm.html'
2021-04-01 21:18:36 +02:00
]
return loadTemplates ( templatePaths ) ;
}
2021-04-03 22:48:02 +02:00
/* -------------------------------------------- */
static createOptionList ( min , max ) {
let options = ""
for ( let i = min ; i <= max ; i ++ ) {
options += ` <option value=" ${ i } "> ${ i } </option> \n ` ;
}
return options ;
}
/* -------------------------------------------- */
static createDirectOptionList ( min , max ) {
2021-04-06 08:03:44 +02:00
let options = { } ;
2021-04-03 22:48:02 +02:00
for ( let i = min ; i <= max ; i ++ ) {
2021-04-06 08:03:44 +02:00
options [ i ] = i ;
2021-04-03 22:48:02 +02:00
}
return options ;
}
/* -------------------------------------------- */
static getTarget ( ) {
if ( game . user . targets && game . user . targets . size == 1 ) {
for ( let target of game . user . targets ) {
return target ;
}
}
return undefined ;
}
/* -------------------------------------------- */
static async performAttack ( combatData ) {
let attacker = game . actors . get ( combatData . attackerActorId ) ;
let defender = game . actors . get ( combatData . targetActorId ) ;
if ( attacker && defender ) {
let defense = defender . getDefenseScore ( ) ;
let attaque = attacker . getAttaqueScore ( ) ;
console . log ( "Attaque : " , attaque ) ;
let myRoll = new Roll ( "1d20" + attaque ) ;
myRoll . evaluate ( )
if ( game . modules . get ( "dice-so-nice" ) && game . modules . get ( "dice-so-nice" ) . active ) {
await game . dice3d . showForRoll ( myRoll , game . user , true ) ;
}
if ( myRoll . total >= defense ) { // Success !
ChatMessage . create ( { content : ` ${ attacker . name } a réussi son attaque sur ${ defender . name } ( ${ myRoll . total } / ${ defense } ) !<br> Les dégâts sont de : ${ combatData . arme . data . damage } ` } ) ;
} else { //Echec
ChatMessage . create ( { content : ` ${ attacker . name } a raté son attaque sur ${ defender . name } ( ${ myRoll . total } / ${ defense } ) ! ` } ) ;
}
} else {
ui . notifications . warn ( "Impossible de trouver l'attaquant et le défenseur." )
}
}
2021-04-01 22:35:03 +02:00
/* -------------------------------------------- */
static registerChatCallbacks ( ) {
}
2021-04-01 21:18:36 +02:00
/* -------------------------------------------- */
static fillRange ( start , end ) {
return Array ( end - start + 1 ) . fill ( ) . map ( ( item , index ) => start + index ) ;
}
/* -------------------------------------------- */
static onSocketMesssage ( msg ) {
if ( ! game . user . isGM ) return ; // Only GM
2021-04-03 22:48:02 +02:00
if ( msg . name == 'msg_attack' ) {
this . performAttack ( msg . data ) ;
2021-04-01 21:18:36 +02:00
}
}
/* -------------------------------------------- */
static async loadCompendiumNames ( compendium ) {
const pack = game . packs . get ( compendium ) ;
let competences ;
await pack . getIndex ( ) . then ( index => competences = index ) ;
return competences ;
}
/* -------------------------------------------- */
static async loadCompendium ( compendium , filter = item => true ) {
let compendiumItems = await SoSUtility . loadCompendiumNames ( compendium ) ;
const pack = game . packs . get ( compendium ) ;
let list = [ ] ;
for ( let compendiumItem of compendiumItems ) {
await pack . getEntity ( compendiumItem . _id ) . then ( it => {
const item = it . data ;
if ( filter ( item ) ) {
list . push ( item ) ;
}
} ) ;
} ;
return list ;
}
2021-04-02 16:47:38 +02:00
/* -------------------------------------------- */
static getDonnees ( ) {
return this . loadCompendiumNames ( 'foundryvtt-vadentis.donnees' ) ;
}
/* -------------------------------------------- */
static getEglises ( ) {
return this . loadCompendiumNames ( 'foundryvtt-vadentis.eglises' ) ;
}
2021-04-02 14:59:58 +02:00
/* -------------------------------------------- */
static async confirmDelete ( actorSheet , li ) {
let itemId = li . data ( "item-id" ) ;
let objet = actorSheet . actor . items . find ( item => item . _id == itemId ) ;
let msgTxt = "<p>Etes vous certain de souhaiter supprimer cet item ?" ;
let buttons = {
delete : {
icon : '<i class="fas fa-check"></i>' ,
label : "Oui, à supprimer" ,
callback : ( ) => {
actorSheet . actor . deleteOwnedItem ( itemId ) ;
li . slideUp ( 200 , ( ) => actorSheet . render ( false ) ) ;
}
} ,
cancel : {
icon : '<i class="fas fa-times"></i>' ,
label : "Annuler"
}
}
msgTxt += "</p>" ;
let d = new Dialog ( {
title : "Confirmer la suppression" ,
content : msgTxt ,
buttons : buttons ,
default : "cancel"
} ) ;
d . render ( true ) ;
}
2021-04-01 21:18:36 +02:00
}