Gestion des maladresses
This commit is contained in:
1
assets/ui/maladresse.svg
Normal file
1
assets/ui/maladresse.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="height: 256px; width: 256px;"><g class="" transform="translate(0,0)" style=""><path d="M221.313 16a23.682 23.695 0 0 0-23.688 23.688v106.406a23.682 23.695 0 0 0 2.156 9.72 23.682 23.695 0 0 0 3.157 13.81l41.75 71.626-79 55.438 6.094-48.625a23.682 23.695 0 0 0-8.186-20.97l-66.28-81.937a23.682 23.695 0 0 0-33.314-3.5l-9.188 7.438a23.682 23.695 0 0 0-3.53 33.344l59.78 73.906-11.25 89.937a23.682 23.695 0 0 0 12.47 23.876l37.468 53.47a23.695 23.682 1.57 0 0 2.344 2.812 23.682 23.695 0 0 0 13.594 20.062L262 491.53a23.682 23.695 0 0 0 9.97 2.22 23.682 23.695 0 0 0 23.53-2.063l87.156-60.937a23.682 23.695 0 0 0 5.844-33l-6.78-9.688a23.682 23.695 0 0 0-32.97-5.875l-72.406 50.657-59.063-27.625 120.595-84.626a23.695 23.682 1.57 0 0 5.53-5.5 23.682 23.695 0 0 0 14.626-13.594l37.22-91.53 87.813-44.845a23.694 23.682 1.18 0 0 10.312-31.875L488 122.687a23.694 23.682 1.18 0 0-31.875-10.343l-94.688 48.375a23.694 23.682 1.18 0 0-9.843 9.436 23.682 23.695 0 0 0-8.344 10.47l-27.375 67.31-5.22-7.436a23.682 23.695 0 0 0-3-8.844l-50.81-87.094V39.688A23.682 23.695 0 0 0 233.154 16h-11.843zM77.75 376A59.994 60 0 0 0 16 436a59.994 60 0 1 0 120 0 59.994 60 0 0 0-58.25-60z" fill="#fff" fill-opacity="1"></path></g></svg>
|
||||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -156,11 +156,16 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
static replaceParticuliereDemiSurprise(chances){
|
||||||
|
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'part'), { overwrite: true });
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static significativeRequise(chances) {
|
static significativeRequise(chances) {
|
||||||
chances.roll = Math.min(chances.part + 1, chances.sign)
|
chances.roll = Math.min(chances.part + 1, chances.sign)
|
||||||
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'sign'), { overwrite: true });
|
foundry.utils.mergeObject(chances, reussites.find(x => x.code == 'sign'), { overwrite: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static succesRequis(chances) {
|
static succesRequis(chances) {
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ import { EMPOIGNADE } from "../item/arme.js"
|
|||||||
import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"
|
import { RdDTextEditor } from "../apps/rdd-text-roll-editor.js"
|
||||||
import { RollTypeCuisine } from "./roll-type-cuisine.mjs"
|
import { RollTypeCuisine } from "./roll-type-cuisine.mjs"
|
||||||
import { RollTypeMeditation } from "./roll-type-meditation.mjs"
|
import { RollTypeMeditation } from "./roll-type-meditation.mjs"
|
||||||
|
import { PART_DEFENSE } from "./roll-part-defense.mjs"
|
||||||
|
import { PART_ATTAQUE } from "./roll-part-attaque.mjs"
|
||||||
|
import { RdDRollTables } from "../rdd-rolltables.js"
|
||||||
|
|
||||||
export default class ChatRollResult {
|
export default class ChatRollResult {
|
||||||
static init() {
|
static init() {
|
||||||
@@ -21,6 +24,7 @@ export default class ChatRollResult {
|
|||||||
foundry.applications.handlebars.loadTemplates({
|
foundry.applications.handlebars.loadTemplates({
|
||||||
'partial-appel-chance': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-appel-chance.hbs',
|
'partial-appel-chance': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-appel-chance.hbs',
|
||||||
'partial-attaque-particuliere': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-attaque-particuliere.hbs',
|
'partial-attaque-particuliere': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-attaque-particuliere.hbs',
|
||||||
|
'partial-maladresse': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-maladresse.hbs',
|
||||||
'partial-encaissement': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-encaissement.hbs',
|
'partial-encaissement': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-encaissement.hbs',
|
||||||
'partial-recul-choc': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-recul-choc.hbs',
|
'partial-recul-choc': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-recul-choc.hbs',
|
||||||
'partial-info-appel-moral': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-info-appel-moral.hbs',
|
'partial-info-appel-moral': 'systems/foundryvtt-reve-de-dragon/templates/roll/result/partial-info-appel-moral.hbs',
|
||||||
@@ -49,7 +53,7 @@ export default class ChatRollResult {
|
|||||||
roll.show.chance = this.isAppelChancePossible(roll)
|
roll.show.chance = this.isAppelChancePossible(roll)
|
||||||
roll.show.encaissement = this.isShowEncaissement(roll)
|
roll.show.encaissement = this.isShowEncaissement(roll)
|
||||||
roll.show.recul = this.getRecul(roll)
|
roll.show.recul = this.getRecul(roll)
|
||||||
//roll.show.particuliere = roll.show.particuliere ?? []
|
roll.show.maladresse = this.getMaladresse(roll)
|
||||||
}
|
}
|
||||||
|
|
||||||
isAppelChancePossible(roll) {
|
isAppelChancePossible(roll) {
|
||||||
@@ -66,6 +70,23 @@ export default class ChatRollResult {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getMaladresse(roll) {
|
||||||
|
switch (roll.type.current) {
|
||||||
|
case ROLL_TYPE_DEFENSE:
|
||||||
|
if (roll.rolled.isETotal) {
|
||||||
|
const arme = roll.current[PART_DEFENSE].arme
|
||||||
|
return arme ? 'avec-arme' : 'sans-arme'
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case ROLL_TYPE_ATTAQUE:
|
||||||
|
if (roll.rolled.isETotal || (roll.rolled.isEchec && roll.active.surprise == 'demi')) {
|
||||||
|
const arme = roll.current[PART_ATTAQUE].arme
|
||||||
|
return arme.system.baseInit > 4 ? 'avec-arme' : 'sans-arme'
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
getRecul(roll, defender = roll.active.actor, attacker = roll.opponent?.actor) {
|
getRecul(roll, defender = roll.active.actor, attacker = roll.opponent?.actor) {
|
||||||
switch (roll.type.current) {
|
switch (roll.type.current) {
|
||||||
@@ -115,6 +136,7 @@ export default class ChatRollResult {
|
|||||||
$(html).on("click", '.faire-gouter', event => this.onClickFaireGouter(event))
|
$(html).on("click", '.faire-gouter', event => this.onClickFaireGouter(event))
|
||||||
$(html).on("click", '.monter-tmr-normale', event => this.onClickMonteeTMR(event, 'normal'))
|
$(html).on("click", '.monter-tmr-normale', event => this.onClickMonteeTMR(event, 'normal'))
|
||||||
$(html).on("click", '.monter-tmr-rapide', event => this.onClickMonteeTMR(event, 'rapide'))
|
$(html).on("click", '.monter-tmr-rapide', event => this.onClickMonteeTMR(event, 'rapide'))
|
||||||
|
$(html).on("click", '.tirer-maladresse', event => this.onClickTirerMaladresse(event))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,4 +269,13 @@ export default class ChatRollResult {
|
|||||||
await this.updateChatMessage(chatMessage, savedRoll)
|
await this.updateChatMessage(chatMessage, savedRoll)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async onClickTirerMaladresse(event) {
|
||||||
|
const chatMessage = ChatUtility.getChatMessage(event)
|
||||||
|
const typeMaladresse = event.currentTarget.attributes['data-maladresse'].value
|
||||||
|
const savedRoll = this.loadChatMessageRoll(chatMessage)
|
||||||
|
await RdDRollTables.getMaladresse({ arme: typeMaladresse == 'avec-arme' })
|
||||||
|
savedRoll.type.maladresse = true
|
||||||
|
savedRoll.type.retry = true
|
||||||
|
await this.updateChatMessage(chatMessage, savedRoll)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -27,6 +27,7 @@ export class RollDialogAdapter {
|
|||||||
RollDialogAdapter.setRollDataRolled(rollData, rolled, rollTitle)
|
RollDialogAdapter.setRollDataRolled(rollData, rolled, rollTitle)
|
||||||
RollDialogAdapter.adjustRollDataForV1(rollData)
|
RollDialogAdapter.adjustRollDataForV1(rollData)
|
||||||
RollDialogAdapter.adjustAttaqueParticuliere(rollData)
|
RollDialogAdapter.adjustAttaqueParticuliere(rollData)
|
||||||
|
RollDialogAdapter.adjustDemiSurprise(rollData)
|
||||||
|
|
||||||
return rolled
|
return rolled
|
||||||
}
|
}
|
||||||
@@ -105,6 +106,12 @@ export class RollDialogAdapter {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static adjustDemiSurprise(rollData) {
|
||||||
|
if (rollData.active.surprise == 'demi' && rollData.rolled.isPart) {
|
||||||
|
RdDResolutionTable.replaceParticuliereDemiSurprise(rollData.rolled)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static adjustAttaqueParticuliere(rollData) {
|
static adjustAttaqueParticuliere(rollData) {
|
||||||
if (rollData.type.current != ROLL_TYPE_ATTAQUE || !rollData.rolled.isPart) {
|
if (rollData.type.current != ROLL_TYPE_ATTAQUE || !rollData.rolled.isPart) {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -50,14 +50,6 @@ export class RollPartAttaque extends RollPartSelect {
|
|||||||
choices(refs) { return refs.attaques }
|
choices(refs) { return refs.attaques }
|
||||||
|
|
||||||
static $extractAttaque(attaque, actor) {
|
static $extractAttaque(attaque, actor) {
|
||||||
// const extracted = foundry.utils.mergeObject({
|
|
||||||
// key: `${attaque.action}::${attaque.label}`,
|
|
||||||
// tactique: TACTIQUES[0]
|
|
||||||
// },
|
|
||||||
// attaque
|
|
||||||
// )
|
|
||||||
// return extracted
|
|
||||||
// extracted.initialDiff = attaque.comp?.system.default_diffLibre ?? 0
|
|
||||||
attaque.key = `${attaque.action}::${attaque.label}`
|
attaque.key = `${attaque.action}::${attaque.label}`
|
||||||
attaque.tactique = TACTIQUES[0]
|
attaque.tactique = TACTIQUES[0]
|
||||||
attaque.initialDiff = attaque.comp?.system.default_diffLibre ?? 0
|
attaque.initialDiff = attaque.comp?.system.default_diffLibre ?? 0
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import { ITEM_TYPES } from "../constants.js"
|
import { ITEM_TYPES } from "../constants.js"
|
||||||
import { Grammar } from "../grammar.js"
|
|
||||||
import { ATTAQUE_TYPE, RdDItemArme } from "../item/arme.js"
|
import { ATTAQUE_TYPE, RdDItemArme } from "../item/arme.js"
|
||||||
import { RdDBonus } from "../rdd-bonus.js"
|
|
||||||
import { CARACS } from "../rdd-carac.js"
|
import { CARACS } from "../rdd-carac.js"
|
||||||
import { StatusEffects } from "../settings/status-effects.js"
|
|
||||||
import { DIFF, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
|
import { DIFF, ROLL_TYPE_DEFENSE } from "./roll-constants.mjs"
|
||||||
import { PART_CARAC } from "./roll-part-carac.mjs"
|
import { PART_CARAC } from "./roll-part-carac.mjs"
|
||||||
import { PART_COMP } from "./roll-part-comp.mjs"
|
import { PART_COMP } from "./roll-part-comp.mjs"
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import { DIFF, ROLL_TYPE_ATTAQUE } from "./roll-constants.mjs"
|
import { DIFF, ROLL_TYPE_ATTAQUE } from "./roll-constants.mjs"
|
||||||
import { PART_ATTAQUE } from "./roll-part-attaque.mjs"
|
|
||||||
import { RollType } from "./roll-type.mjs"
|
import { RollType } from "./roll-type.mjs"
|
||||||
|
|
||||||
export class RollTypeAttaque extends RollType {
|
export class RollTypeAttaque extends RollType {
|
||||||
|
|||||||
@@ -22,15 +22,10 @@
|
|||||||
{{#if (eq current.dmg.mortalite 'empoignade')}}
|
{{#if (eq current.dmg.mortalite 'empoignade')}}
|
||||||
ou {{active.name}} marquera un point d'empoignade
|
ou {{active.name}} marquera un point d'empoignade
|
||||||
{{else if (eq current.dmg.mortalite 'non-mortel')}}
|
{{else if (eq current.dmg.mortalite 'non-mortel')}}
|
||||||
ou encaisser à <span class="rdd-roll-norm">{{plusMoins current.dmg.total}} (non-mortel)</span>
|
ou encaisser à <span class="rdd-roll-norm">{{plusMoins dmg.total}} (non-mortel)</span>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{!-- {{~#if (eq current.dmg.mortalite 'mortel')}} --}}
|
ou encaisser à <span class="rdd-roll-echec">{{plusMoins dmg.total}}</span>
|
||||||
ou encaisser à <span class="rdd-roll-echec">{{plusMoins current.dmg.total}}</span>
|
|
||||||
{{!-- {{~#if (eq current.dmg.mortalite 'cauchemar')}} --}}
|
|
||||||
{{!-- {{else}}
|
|
||||||
<span class="rdd-roll-etotal">{{plusMoins dmg.total}}</span> (entités de cauchemar) --}}
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
{{#if show.recul}}
|
{{#if show.recul}}
|
||||||
<span class='chat-card-info'>
|
<span class='chat-card-info'>
|
||||||
@@ -65,6 +60,7 @@
|
|||||||
|
|
||||||
<div class="chat-actions">
|
<div class="chat-actions">
|
||||||
{{> 'partial-attaque-particuliere'}}
|
{{> 'partial-attaque-particuliere'}}
|
||||||
|
{{> 'partial-maladresse'}}
|
||||||
{{!-- TODO: maladresses --}}
|
{{!-- TODO: maladresses --}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
{{> 'partial-info-appel-moral'}}
|
{{> 'partial-info-appel-moral'}}
|
||||||
</div>
|
</div>
|
||||||
<div class="chat-actions">
|
<div class="chat-actions">
|
||||||
{{!-- TODO: maladresses --}}
|
{{> 'partial-maladresse'}}
|
||||||
{{> 'partial-recul-choc'}}
|
{{> 'partial-recul-choc'}}
|
||||||
{{> 'partial-encaissement'}}
|
{{> 'partial-encaissement'}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
13
templates/roll/result/partial-maladresse.hbs
Normal file
13
templates/roll/result/partial-maladresse.hbs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{{#if show.maladresse}}
|
||||||
|
{{#if type.maladresse}}
|
||||||
|
<span class='chat-card-info'>
|
||||||
|
<img src="systems/foundryvtt-reve-de-dragon/assets/ui/maladresse.svg"/> Maladresse!
|
||||||
|
</span>
|
||||||
|
{{else}}
|
||||||
|
<a class='chat-card-button tirer-maladresse' data-maladresse='{{show.maladresse}}'
|
||||||
|
data-tooltip="Tirer la maladresse">
|
||||||
|
<img src="systems/foundryvtt-reve-de-dragon/assets/ui/maladresse.svg"/> Tirer une maladresse
|
||||||
|
{{#if (eq show.maladresse 'avec-arme')}}armé{{else}}non armé{{/if}}
|
||||||
|
</a>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
Reference in New Issue
Block a user