Sort, confrontation, update tarots, etc
This commit is contained in:
@ -43,6 +43,14 @@ export class MaleficesUtility {
|
||||
Handlebars.registerHelper('add', function (a, b) {
|
||||
return parseInt(a) + parseInt(b);
|
||||
})
|
||||
|
||||
game.settings.register("world", "character-summary-data", {
|
||||
name: "character-summary-data",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: { npcList: [], x: 200, y: 200 },
|
||||
type: Object
|
||||
})
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
@ -63,6 +71,7 @@ export class MaleficesUtility {
|
||||
static async ready() {
|
||||
const tarots = await MaleficesUtility.loadCompendium("fvtt-malefices.malefices-tarots")
|
||||
this.tarots = tarots.map(i => i.toObject())
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -262,6 +271,125 @@ export class MaleficesUtility {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static processSpecialCard(actor, rollData) {
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("archange")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("archange"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "gmroll", {
|
||||
content: `Conséquence supplémentaire ! <br>L'Archange : ${actor.name} gagne 1 point de Spiritualité.` })
|
||||
actor.incDecAttr("spiritualite", 1)
|
||||
}
|
||||
}
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("vicaire")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("vicaire"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "blindroll", {
|
||||
content: `Conséquence supplémentaire ! <br>Le Vicaire : ${actor.name} vient de gagner 1 point en Pratique de la Magie Blanche (MPMB, secret).` })
|
||||
actor.incDecMPMB(1)
|
||||
}
|
||||
}
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("chance")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("chance"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "gmroll", {
|
||||
content: `Conséquence supplémentaire ! <br>La Chance : ${actor.name} a gagné 1 point de Destin.` })
|
||||
actor.incDecDestin(1)
|
||||
}
|
||||
}
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("mort")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("mort"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "gmroll", {
|
||||
content: `Conséquence supplémentaire ! <br>La Mort : ${actor.name} est pétrifié par la peur.` })
|
||||
actor.incDecDestin(1)
|
||||
}
|
||||
}
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("diable")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("diable"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "gmroll", {
|
||||
content: `Conséquence supplémentaire ! <br>Le Diable : ${actor.name} gagne 1 point de Rationnalité.` })
|
||||
actor.incDecAttr("rationnalite", 1)
|
||||
}
|
||||
}
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("lune noire")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("lune noire"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "blindroll", {
|
||||
content: `Conséquence supplémentaire ! <br>La Lune Noire : ${actor.name} vient de gagner 1 point de Fluide (secret).` })
|
||||
actor.incDecFluide(1)
|
||||
}
|
||||
}
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("grand livre")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("grand livre"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "blindroll", {
|
||||
content: `Conséquence supplémentaire ! <br>La Lune Noire : ${actor.name} vient de gagner 1 point de Fluide (secret).` })
|
||||
actor.incDecFluide(1)
|
||||
}
|
||||
}
|
||||
if (rollData.selectedCard.name.toLowerCase().includes("sorcier")) {
|
||||
let actorCard = actor.items.find( c => c.type =="tarot" && c.name.toLowerCase().includes("sorcier"))
|
||||
if (actorCard) {
|
||||
MaleficesUtility.createChatMessage(actor.name, "blindroll", {
|
||||
content: `Conséquence supplémentaire ! <br>Le Vicaire : ${actor.name} vient de gagner 1 point en Pratique de la Magie Noire (MPMN, secret).` })
|
||||
actor.incDecMPMN(1)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static computeResults(rollData) {
|
||||
rollData.isSuccess = false
|
||||
if (rollData.total <= rollData.target) {
|
||||
rollData.isSuccess = true
|
||||
}
|
||||
if (rollData.total == 1) {
|
||||
rollData.isSuccess = true
|
||||
rollData.isCritical = true
|
||||
}
|
||||
if (rollData.total == 20) {
|
||||
rollData.isSuccess = false
|
||||
rollData.isFumble = true
|
||||
}
|
||||
if (rollData.total <= Math.floor(rollData.target / 3)) {
|
||||
rollData.isPart = true
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static async tirageConfrontationMalefices(rollData) {
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
|
||||
rollData.target = rollData.attr.value - rollData.confrontationDegre + rollData.confrontationModif
|
||||
|
||||
let deck = this.getTarots()
|
||||
let index = Math.round(Math.random() * (deck.length-1))
|
||||
let selectedCard = deck[index]
|
||||
selectedCard.system.ispositif = (Math.random() > 0.5)
|
||||
selectedCard.value = (selectedCard.system.ispositif)? selectedCard.system.numericvalueup : selectedCard.system.numericvaluedown
|
||||
rollData.total = selectedCard.value
|
||||
rollData.selectedCard = selectedCard
|
||||
await MaleficesUtility.createChatMessage(actor.name, "gmroll", {
|
||||
content: await renderTemplate(`systems/fvtt-malefices/templates/chat/display-tarot-card.hbs`, selectedCard)
|
||||
})
|
||||
|
||||
this.computeResults(rollData)
|
||||
|
||||
if (rollData.isSuccess) {
|
||||
rollData.gainAttr = Math.ceil(rollData.confrontationDegre/2) + ((rollData.isCritical ) ? 1 : 0)
|
||||
actor.incDecAttr(rollData.attr.abbrev, rollData.gainAttr )
|
||||
} else {
|
||||
rollData.gainAttr = rollData.confrontationDegre
|
||||
actor.incDecAttr(rollData.attr.abbrev, -rollData.gainAttr )
|
||||
}
|
||||
|
||||
await MaleficesUtility.createChatMessage(actor.name, "gmroll", {
|
||||
content: await renderTemplate(`systems/fvtt-malefices/templates/chat/chat-confrontation-result.hbs`, rollData)
|
||||
})
|
||||
this.processSpecialCard(actor, rollData)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static async rollMalefices(rollData) {
|
||||
|
||||
@ -280,22 +408,9 @@ export class MaleficesUtility {
|
||||
let myRoll = new Roll(diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
rollData.roll = myRoll
|
||||
rollData.total = myRoll.total
|
||||
|
||||
rollData.isSuccess = false
|
||||
if (myRoll.total <= rollData.target) {
|
||||
rollData.isSuccess = true
|
||||
}
|
||||
if (myRoll.total == 1) {
|
||||
rollData.isSuccess = true
|
||||
rollData.isCritical = true
|
||||
}
|
||||
if (myRoll.total == 20) {
|
||||
rollData.isSuccess = false
|
||||
rollData.isFumble = true
|
||||
}
|
||||
if (myRoll.total <= Math.floor(rollData.target / 3)) {
|
||||
rollData.isPart = true
|
||||
}
|
||||
this.computeResults(rollData)
|
||||
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-malefices/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
|
Reference in New Issue
Block a user