forked from public/foundryvtt-reve-de-dragon
Ajout du StatusEffect surencombré
This commit is contained in:
65
assets/actions/surenc.svg
Normal file
65
assets/actions/surenc.svg
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
viewBox="0 0 448 434"
|
||||||
|
version="1.1"
|
||||||
|
id="svg6"
|
||||||
|
sodipodi:docname="surenc.svg"
|
||||||
|
width="448"
|
||||||
|
height="434"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="3840"
|
||||||
|
inkscape:window-height="2054"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="1.4355469"
|
||||||
|
inkscape:cx="224"
|
||||||
|
inkscape:cy="210"
|
||||||
|
inkscape:window-x="-11"
|
||||||
|
inkscape:window-y="-11"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg6" />
|
||||||
|
<g
|
||||||
|
class=""
|
||||||
|
id="g4"
|
||||||
|
transform="translate(-32,-46)">
|
||||||
|
<path
|
||||||
|
d="m 256,46 c -45.074,0 -82,36.926 -82,82 0,25.812 12.123,48.936 30.938,64 H 128 L 32,480 H 480 L 384,192 H 307.062 C 325.877,176.936 338,153.812 338,128 338,82.926 301.074,46 256,46 Z m 0,36 c 25.618,0 46,20.382 46,46 0,25.618 -20.382,46 -46,46 -25.618,0 -46,-20.382 -46,-46 0,-25.618 20.382,-46 46,-46 z m -82.215,202.95 h 23.5 v 33.263 l 33.873,-33.264 h 27.283 l -43.883,43.15 48.4,47.974 H 233.54 l -36.255,-35.888 v 35.888 h -23.5 z m 119.934,21.24 c 4.76,0 8.952,0.934 12.573,2.806 3.62,1.872 6.938,4.82 9.95,8.85 v -10.13 h 21.972 v 61.462 c 0,10.986 -3.48,19.368 -10.438,25.146 -6.917,5.82 -16.968,8.727 -30.152,8.727 -4.272,0 -8.4,-0.325 -12.39,-0.976 a 77.367,77.367 0 0 1 -12.024,-2.99 v -17.03 c 3.826,2.198 7.57,3.826 11.23,4.884 3.664,1.098 7.347,1.648 11.05,1.648 7.162,0 12.41,-1.566 15.746,-4.7 3.337,-3.132 5.006,-8.035 5.006,-14.708 v -4.7 c -3.01,3.986 -6.328,6.916 -9.95,8.788 -3.62,1.87 -7.813,2.808 -12.573,2.808 -8.343,0 -15.238,-3.275 -20.69,-9.826 -5.453,-6.592 -8.18,-14.974 -8.18,-25.146 0,-10.214 2.727,-18.576 8.18,-25.086 5.452,-6.55 12.347,-9.827 20.69,-9.827 z m 8.118,15.746 c -4.517,0 -8.038,1.67 -10.56,5.005 -2.523,3.338 -3.784,8.058 -3.784,14.162 0,6.266 1.22,11.026 3.662,14.28 2.442,3.215 6.003,4.823 10.682,4.823 4.557,0 8.096,-1.67 10.62,-5.006 2.522,-3.337 3.784,-8.036 3.784,-14.098 0,-6.104 -1.262,-10.824 -3.785,-14.16 -2.523,-3.337 -6.062,-5.006 -10.62,-5.006 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
fill-opacity="1"
|
||||||
|
id="path2" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
- Les réussites particulières en demi-surprise sont de simples réussites
|
- Les réussites particulières en demi-surprise sont de simples réussites
|
||||||
- Les images des scènes par défaut sont corrigées
|
- Les images des scènes par défaut sont corrigées
|
||||||
|
- Ajout d'une image de status "sur-encombré"
|
||||||
- Amélioration des entités:
|
- Amélioration des entités:
|
||||||
- l'attaquant ne sait plus que c'est une entité de cauchemar (surprise!)
|
- l'attaquant ne sait plus que c'est une entité de cauchemar (surprise!)
|
||||||
- l'encaissement indique une blessure dans le tchat... même si ce n'est que de l'endurance
|
- l'encaissement indique une blessure dans le tchat... même si ce n'est que de l'endurance
|
||||||
|
|||||||
@@ -67,6 +67,7 @@
|
|||||||
"StatusComma": "Comma",
|
"StatusComma": "Comma",
|
||||||
"StatusDead": "Mort",
|
"StatusDead": "Mort",
|
||||||
"StatusDemiReve": "Demi-rêve",
|
"StatusDemiReve": "Demi-rêve",
|
||||||
|
"StatusSurEnc": "Sur-encombrement",
|
||||||
"StatusForceWeak": "Force insuffisante"
|
"StatusForceWeak": "Force insuffisante"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -375,14 +375,6 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
|
|||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
/** @override */
|
|
||||||
_updateObject(event, formData) {
|
|
||||||
// Update the Actor
|
|
||||||
return this.actor.update(formData);
|
|
||||||
}
|
|
||||||
|
|
||||||
async splitItem(item) {
|
async splitItem(item) {
|
||||||
const dialog = await DialogSplitItem.create(item, (item, split) => this._onSplitItem(item, split));
|
const dialog = await DialogSplitItem.create(item, (item, split) => this._onSplitItem(item, split));
|
||||||
dialog.render(true);
|
dialog.render(true);
|
||||||
|
|||||||
@@ -755,20 +755,18 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
let updates = {};
|
let updates = {};
|
||||||
if (caracName == LIST_CARAC_PERSONNAGE.reve.code) {
|
if (caracName == LIST_CARAC_PERSONNAGE.reve.code) {
|
||||||
if (to > Misc.toInt(this.system.reve.seuil.value)) {
|
if (to > Misc.toInt(this.system.reve.seuil.value)) {
|
||||||
updates[`system.reve.seuil.value`] = to; // SFA : Direct and packed changes
|
updates[`system.reve.seuil.value`] = to
|
||||||
//this.setPointsDeSeuil(to);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (caracName == LIST_CARAC_PERSONNAGE.chance.code) {
|
if (caracName == LIST_CARAC_PERSONNAGE.chance.code) {
|
||||||
if (to > Misc.toInt(this.system.compteurs.chance.value)) {
|
if (to > Misc.toInt(this.system.compteurs.chance.value)) {
|
||||||
updates[`system.compteurs.chance.value`] = to; // SFA : Direct and packed changes
|
updates[`system.compteurs.chance.value`] = to
|
||||||
//this.setPointsDeChance(to);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let selectedCarac = this.findCaracByName(caracName);
|
let selectedCarac = this.findCaracByName(caracName);
|
||||||
const from = selectedCarac.value
|
const from = selectedCarac.value
|
||||||
updates[`system.carac.${caracName}.value`] = to;
|
updates[`system.carac.${caracName}.value`] = to;
|
||||||
await this.update(updates);
|
await this.update(updates, { noHook: true });
|
||||||
await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName);
|
await ExperienceLog.add(this, XP_TOPIC.CARAC, from, to, caracName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2607,7 +2605,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
if (item?.isEquipable()) {
|
if (item?.isEquipable()) {
|
||||||
const isEquipe = !item.system.equipe;
|
const isEquipe = !item.system.equipe;
|
||||||
await item.update({ "system.equipe": isEquipe });
|
await item.update({ "system.equipe": isEquipe });
|
||||||
this.computeEncTotal();
|
this.computeEncTotal()
|
||||||
if (isEquipe)
|
if (isEquipe)
|
||||||
this.verifierForceMin(item);
|
this.verifierForceMin(item);
|
||||||
}
|
}
|
||||||
@@ -2998,6 +2996,7 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
if (updatedEndurance && options.diff) {
|
if (updatedEndurance && options.diff) {
|
||||||
await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0)
|
await this.setEffect(STATUSES.StatusUnconscious, updatedEndurance.value == 0)
|
||||||
}
|
}
|
||||||
|
await super.onUpdateActor(update, options, actorId)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@@ -3039,12 +3038,13 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
await this.onDeleteOwnedCaseTmr(item, options, id)
|
await this.onDeleteOwnedCaseTmr(item, options, id)
|
||||||
break
|
break
|
||||||
case ITEM_TYPES.empoignade:
|
case ITEM_TYPES.empoignade:
|
||||||
|
await RdDEmpoignade.deleteLinkedEmpoignade(this.id, item)
|
||||||
|
// TODO: check remaining emp.
|
||||||
await this.setEffect(STATUSES.StatusGrappled, false)
|
await this.setEffect(STATUSES.StatusGrappled, false)
|
||||||
await this.setEffect(STATUSES.StatusGrappling, false)
|
await this.setEffect(STATUSES.StatusGrappling, false)
|
||||||
await RdDEmpoignade.deleteLinkedEmpoignade(this.id, item)
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
super.onDeleteItem(item, options, id)
|
await super.onDeleteItem(item, options, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|||||||
@@ -56,13 +56,15 @@ export class RdDBaseActorReveSheet extends RdDBaseActorSheet {
|
|||||||
if (this.options.vueDetaillee) {
|
if (this.options.vueDetaillee) {
|
||||||
// On carac change
|
// On carac change
|
||||||
this.html.find('.carac-value').change(async event => {
|
this.html.find('.carac-value').change(async event => {
|
||||||
let caracName = event.currentTarget.name.replace(".value", "").replace("system.carac.", "")
|
if (event.currentTarget.name.includes("carac.")) {
|
||||||
await this.actor.updateCarac(caracName, parseInt(event.target.value))
|
let caracName = event.currentTarget.name.replace("carac.", "")
|
||||||
});
|
await this.actor.updateCarac(caracName, parseInt(event.currentTarget.value))
|
||||||
|
}
|
||||||
|
})
|
||||||
// On competence change
|
// On competence change
|
||||||
this.html.find('.competence-value').change(async event => {
|
this.html.find('.competence-value').change(async event => {
|
||||||
let compName = event.currentTarget.attributes.compname.value
|
let compName = event.currentTarget.attributes.compname.value
|
||||||
await this.actor.updateCompetence(compName, parseInt(event.target.value))
|
await this.actor.updateCompetence(compName, parseInt(event.currentTarget.value))
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
getSConst() { return 0 }
|
getSConst() { return 0 }
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
isSurenc() { return false }
|
|
||||||
computeMalusSurEncombrement() { return 0 }
|
computeMalusSurEncombrement() { return 0 }
|
||||||
|
|
||||||
ajustementAstrologique() { return 0 }
|
ajustementAstrologique() { return 0 }
|
||||||
@@ -230,49 +229,9 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
isEffectAllowed(effectId) { return false }
|
|
||||||
|
|
||||||
getEffects(filter = e => true, forceRequise = undefined) {
|
|
||||||
const effects = this.getEmbeddedCollection("ActiveEffect")
|
|
||||||
const selected = effects.filter(filter)
|
|
||||||
if (forceRequise && this.isForceInsuffisante(forceRequise)) {
|
|
||||||
selected.push(StatusEffects.prepareActiveEffect(STATUSES.StatusForceWeak))
|
|
||||||
}
|
|
||||||
return selected
|
|
||||||
}
|
|
||||||
|
|
||||||
getEffectByStatus(statusId) {
|
|
||||||
return this.getEffects().find(it => it.statuses.has(statusId));
|
|
||||||
}
|
|
||||||
|
|
||||||
async setEffect(statusId, status) {
|
|
||||||
if (this.isEffectAllowed(statusId)) {
|
|
||||||
const effect = this.getEffectByStatus(statusId)
|
|
||||||
if (!status && effect) {
|
|
||||||
await this.deleteEmbeddedDocuments('ActiveEffect', [effect.id], { render: true })
|
|
||||||
}
|
|
||||||
if (status && !effect) {
|
|
||||||
await this.createEmbeddedDocuments("ActiveEffect", [StatusEffects.prepareActiveEffect(statusId)], { render: true })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async removeEffect(id) {
|
|
||||||
this.removeEffects(it => it.id == id)
|
|
||||||
}
|
|
||||||
|
|
||||||
async removeEffects(filter = e => true) {
|
|
||||||
if (game.user.isGM) {
|
|
||||||
const effectsToRemove = this.getEffects(filter);
|
|
||||||
const ids = effectsToRemove.map(it => it.id);
|
|
||||||
await this.deleteEmbeddedDocuments('ActiveEffect', ids);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
isDemiReve() {
|
isDemiReve() {
|
||||||
return this.getEffectByStatus(STATUSES.StatusDemiReve) != undefined
|
return this.getEffectsByStatus(STATUSES.StatusDemiReve).length > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
getSurprise(isCombat = undefined, forceRequise = undefined) {
|
getSurprise(isCombat = undefined, forceRequise = undefined) {
|
||||||
|
|||||||
@@ -186,6 +186,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
await this.changeBleedingState()
|
await this.changeBleedingState()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
await super.onCreateItem(item, options, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
async onUpdateItem(item, options, id) {
|
async onUpdateItem(item, options, id) {
|
||||||
@@ -194,6 +195,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
await this.changeBleedingState()
|
await this.changeBleedingState()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
await super.onUpdateItem(item, options, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
async changeBleedingState() {
|
async changeBleedingState() {
|
||||||
@@ -313,7 +315,7 @@ export class RdDBaseActorSang extends RdDBaseActorReve {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isSonne() {
|
isSonne() {
|
||||||
return this.getEffectByStatus(STATUSES.StatusStunned)
|
return this.getEffectsByStatus(STATUSES.StatusStunned).length > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
isEffectAllowed(effectId) { return true }
|
isEffectAllowed(effectId) { return true }
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
|
|||||||
formData.calc = {
|
formData.calc = {
|
||||||
fortune: Monnaie.toSolsDeniers(this.actor.getFortune()),
|
fortune: Monnaie.toSolsDeniers(this.actor.getFortune()),
|
||||||
prixTotalEquipement: this.actor.computePrixTotalEquipement(),
|
prixTotalEquipement: this.actor.computePrixTotalEquipement(),
|
||||||
encTotal: await this.actor.computeEncTotal(),
|
encTotal: this.actor.getEncTotal(),
|
||||||
}
|
}
|
||||||
|
|
||||||
this.objetVersConteneur = RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.inventaires);
|
this.objetVersConteneur = RdDUtility.buildArbreDeConteneurs(formData.conteneurs, formData.inventaires);
|
||||||
@@ -229,14 +229,6 @@ export class RdDBaseActorSheet extends foundry.appv1.sheets.ActorSheet {
|
|||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
/** @override */
|
|
||||||
_updateObject(event, formData) {
|
|
||||||
// Update the Actor
|
|
||||||
return this.actor.update(formData);
|
|
||||||
}
|
|
||||||
|
|
||||||
async splitItem(item) {
|
async splitItem(item) {
|
||||||
const dialog = await DialogSplitItem.create(item, (item, split) => this._onSplitItem(item, split));
|
const dialog = await DialogSplitItem.create(item, (item, split) => this._onSplitItem(item, split));
|
||||||
dialog.render(true);
|
dialog.render(true);
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { RdDConfirm } from "../rdd-confirm.js";
|
|||||||
import { RdDUtility } from "../rdd-utility.js";
|
import { RdDUtility } from "../rdd-utility.js";
|
||||||
import { SystemCompendiums } from "../settings/system-compendiums.js";
|
import { SystemCompendiums } from "../settings/system-compendiums.js";
|
||||||
import { RdDItem } from "../item.js";
|
import { RdDItem } from "../item.js";
|
||||||
import { STATUSES } from "../settings/status-effects.js";
|
import { StatusEffects, STATUSES } from "../settings/status-effects.js";
|
||||||
|
|
||||||
export class RdDBaseActor extends Actor {
|
export class RdDBaseActor extends Actor {
|
||||||
|
|
||||||
@@ -243,18 +243,68 @@ export class RdDBaseActor extends Actor {
|
|||||||
|
|
||||||
getMonnaie(id) { return this.findItemLike(id, 'monnaie'); }
|
getMonnaie(id) { return this.findItemLike(id, 'monnaie'); }
|
||||||
getEncombrementMax() { return 0 }
|
getEncombrementMax() { return 0 }
|
||||||
|
isSurenc() { return false }
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
isEffectAllowed(effectId) { return false }
|
||||||
|
|
||||||
|
getEffects(filter = e => true, forceRequise = undefined) {
|
||||||
|
const effects = this.getEmbeddedCollection("ActiveEffect")
|
||||||
|
const selected = effects.filter(filter)
|
||||||
|
if (forceRequise && this.isForceInsuffisante(forceRequise)) {
|
||||||
|
selected.push(StatusEffects.prepareActiveEffect(STATUSES.StatusForceWeak))
|
||||||
|
}
|
||||||
|
return selected
|
||||||
|
}
|
||||||
|
|
||||||
|
getEffectsByStatus(effectId) {
|
||||||
|
return this.getEffects().filter(it => it.statuses.has(effectId))
|
||||||
|
}
|
||||||
|
|
||||||
|
async setEffect(effectId, status) {
|
||||||
|
if (this.isEffectAllowed(effectId)) {
|
||||||
|
const effects = this.getEffectsByStatus(effectId)
|
||||||
|
if (!status && effects.length > 0) {
|
||||||
|
await this.deleteEmbeddedDocuments('ActiveEffect', effects.map(it => it.id), { render: true })
|
||||||
|
}
|
||||||
|
if (status && effects.length == 0) {
|
||||||
|
await this.createEmbeddedDocuments("ActiveEffect", [StatusEffects.prepareActiveEffect(effectId)], { render: true })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async removeEffect(id) {
|
||||||
|
this.removeEffects(it => it.id == id)
|
||||||
|
}
|
||||||
|
|
||||||
|
async removeEffects(filter = e => true) {
|
||||||
|
if (game.user.isGM) {
|
||||||
|
const effectsToRemove = this.getEffects(filter);
|
||||||
|
const ids = effectsToRemove.map(it => it.id);
|
||||||
|
await this.deleteEmbeddedDocuments('ActiveEffect', ids);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async updateCarac(caracName, to) {
|
async updateCarac(caracName, to) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async onUpdateActor(change, options, actorId) {
|
||||||
|
const updatedCarac = change?.system?.carac
|
||||||
|
if (updatedCarac && (updatedCarac.force || updatedCarac.reve || updatedCarac.taille)) {
|
||||||
|
console.log(' onUpdateActor', change, options, actorId)
|
||||||
|
await this.setEffect(STATUSES.StatusSurEnc, this.isSurenc())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async onPreUpdateItem(item, change, options, id) { }
|
async onPreUpdateItem(item, change, options, id) { }
|
||||||
|
|
||||||
async onCreateItem(item, options, id) { }
|
async onCreateItem(item, options, id) {
|
||||||
|
}
|
||||||
|
|
||||||
async onUpdateItem(item, options, id) { }
|
async onUpdateItem(item, options, id) {
|
||||||
|
}
|
||||||
async onUpdateActor(update, options, actorId) { }
|
|
||||||
|
|
||||||
async onDeleteItem(item, options, id) {
|
async onDeleteItem(item, options, id) {
|
||||||
if (item.isInventaire()) {
|
if (item.isInventaire()) {
|
||||||
@@ -262,6 +312,7 @@ export class RdDBaseActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async _removeItemFromConteneur(item) {
|
async _removeItemFromConteneur(item) {
|
||||||
const updates = this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id))
|
const updates = this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id))
|
||||||
.map(conteneur => {
|
.map(conteneur => {
|
||||||
@@ -510,16 +561,22 @@ export class RdDBaseActor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async computeEncTotal() {
|
async computeEncTotal() {
|
||||||
if (!this.pack) {
|
if (this.pack) {
|
||||||
|
this.encTotal = 0
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const wasSurenc = this.isSurenc()
|
||||||
this.encTotal = this.items.filter(it => RdDItem.getItemTypesInventaire().includes(it.type))
|
this.encTotal = this.items.filter(it => RdDItem.getItemTypesInventaire().includes(it.type))
|
||||||
.map(it => it.getEncTotal()).reduce(Misc.sum(), 0)
|
.map(it => it.getEncTotal()).reduce(Misc.sum(), 0)
|
||||||
return this.encTotal;
|
const isSurenc = this.isSurenc()
|
||||||
|
if (isSurenc != wasSurenc) {
|
||||||
|
await this.setEffect(STATUSES.StatusSurEnc, isSurenc)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getEncTotal() {
|
getEncTotal() {
|
||||||
return Math.floor(this.encTotal ?? 0);
|
return Math.floor(this.encTotal ?? 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
async createItem(type, name = undefined) {
|
async createItem(type, name = undefined) {
|
||||||
@@ -570,7 +627,7 @@ export class RdDBaseActor extends Actor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await this.computeEncTotal();
|
await this.computeEncTotal()
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export class ExperienceLog {
|
|||||||
};
|
};
|
||||||
console.log('ExperienceLog.add', newXpLog)
|
console.log('ExperienceLog.add', newXpLog)
|
||||||
const newExperienceLog = (actor.system.experiencelog ?? []).concat([newXpLog]);
|
const newExperienceLog = (actor.system.experiencelog ?? []).concat([newXpLog]);
|
||||||
await actor.update({ [`system.experiencelog`]: newExperienceLog });
|
await actor.update({ [`system.experiencelog`]: newExperienceLog }, { noHook: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
static labelTopic(topic) {
|
static labelTopic(topic) {
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ export const RDD_CONFIG = {
|
|||||||
demiReve: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg',
|
demiReve: 'systems/foundryvtt-reve-de-dragon/assets/actions/sort.svg',
|
||||||
empoignade: 'systems/foundryvtt-reve-de-dragon/assets/actions/empoignade.svg',
|
empoignade: 'systems/foundryvtt-reve-de-dragon/assets/actions/empoignade.svg',
|
||||||
forceWeak: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg',
|
forceWeak: 'systems/foundryvtt-reve-de-dragon/assets/actions/weak.svg',
|
||||||
|
surenc: 'systems/foundryvtt-reve-de-dragon/assets/actions/surenc.svg',
|
||||||
},
|
},
|
||||||
encaissement: {
|
encaissement: {
|
||||||
mortel: 'mortel',
|
mortel: 'mortel',
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** @override */
|
/** @override */
|
||||||
_updateObject(event, formData) {
|
async _updateObject(event, formData) {
|
||||||
switch (this.item.type) {
|
switch (this.item.type) {
|
||||||
case ITEM_TYPES.sort:
|
case ITEM_TYPES.sort:
|
||||||
formData['system.bonuscase'] = RdDItemSort.bonuscasesToString(RdDItemSheetV1._listCaseTmr(
|
formData['system.bonuscase'] = RdDItemSort.bonuscasesToString(RdDItemSheetV1._listCaseTmr(
|
||||||
@@ -273,8 +273,7 @@ export class RdDItemSheetV1 extends foundry.appv1.sheets.ItemSheet {
|
|||||||
formData['system.niveau'] = formData['system.niveau'] ?? formData['system.base']
|
formData['system.niveau'] = formData['system.niveau'] ?? formData['system.base']
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
return await super._updateObject(event, formData)
|
||||||
return this.item.update(formData)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { RDD_CONFIG } from "../constants.js"
|
||||||
import { RdDItemCompetence } from "../item-competence.js"
|
import { RdDItemCompetence } from "../item-competence.js"
|
||||||
import { RdDCarac } from "../rdd-carac.js"
|
import { RdDCarac } from "../rdd-carac.js"
|
||||||
import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
|
import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
|
||||||
@@ -25,7 +26,7 @@ export class RollPartEncTotal extends RollPartCheckbox {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
getCheckboxIcon(rollData) { return '<i class="fa-solid fa-weight-hanging"></i>' }
|
getCheckboxIcon(rollData) { return `<img src="${RDD_CONFIG.icons.surenc}">` }
|
||||||
getCheckboxLabel(rollData) { return "Enc. total" }
|
getCheckboxLabel(rollData) { return "Enc. total" }
|
||||||
getCheckboxValue(rollData) { return - rollData.active.actor.getEncTotal() }
|
getCheckboxValue(rollData) { return - rollData.active.actor.getEncTotal() }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { RDD_CONFIG } from "../constants.js"
|
||||||
import { RdDCarac } from "../rdd-carac.js"
|
import { RdDCarac } from "../rdd-carac.js"
|
||||||
import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
|
import { RollPartCheckbox } from "./roll-part-checkbox.mjs"
|
||||||
|
|
||||||
@@ -10,7 +11,7 @@ export class RollPartSurEnc extends RollPartCheckbox {
|
|||||||
visible(rollData) {
|
visible(rollData) {
|
||||||
return RdDCarac.isActionPhysique(rollData.current.carac.key) && rollData.active.actor.isSurenc()
|
return RdDCarac.isActionPhysique(rollData.current.carac.key) && rollData.active.actor.isSurenc()
|
||||||
}
|
}
|
||||||
getCheckboxIcon(rollData) { return '<i class="fa-solid fa-weight-hanging"></i>' }
|
getCheckboxIcon(rollData) { return `<img src="${RDD_CONFIG.icons.surenc}">` }
|
||||||
getCheckboxLabel(rollData) { return "Sur-enc." }
|
getCheckboxLabel(rollData) { return "Sur-enc." }
|
||||||
getCheckboxValue(rollData) { return rollData.active.actor.computeMalusSurEncombrement() }
|
getCheckboxValue(rollData) { return rollData.active.actor.computeMalusSurEncombrement() }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,13 +14,14 @@ export const STATUSES = {
|
|||||||
StatusBleeding: 'bleeding',
|
StatusBleeding: 'bleeding',
|
||||||
StatusDead: 'dead',
|
StatusDead: 'dead',
|
||||||
StatusDemiReve: 'demi-reve',
|
StatusDemiReve: 'demi-reve',
|
||||||
|
StatusSurEnc: 'sur-encombrement',
|
||||||
StatusForceWeak: 'force insuffisante',
|
StatusForceWeak: 'force insuffisante',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: RDD_CONFIG.icons.forceWeak };
|
export const forceWeakStatusEffect = { rdd: true, id: STATUSES.StatusForceWeak, name: 'EFFECT.StatusForceWeak', img: RDD_CONFIG.icons.forceWeak };
|
||||||
export const demiReveStatusEffect = {
|
export const surEncEffect = { rdd: true, id: STATUSES.StatusSurEnc, name: 'EFFECT.StatusSurEnc', img: RDD_CONFIG.icons.surenc };
|
||||||
rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: RDD_CONFIG.icons.demiReve
|
export const demiReveStatusEffect = { rdd: true, id: STATUSES.StatusDemiReve, name: 'EFFECT.StatusDemiReve', img: RDD_CONFIG.icons.demiReve };
|
||||||
};
|
|
||||||
const rddStatusEffects = [
|
const rddStatusEffects = [
|
||||||
{ rdd: true, id: STATUSES.StatusGrappling, name: 'EFFECT.StatusGrappling', img: RDD_CONFIG.icons.empoignade },
|
{ rdd: true, id: STATUSES.StatusGrappling, name: 'EFFECT.StatusGrappling', img: RDD_CONFIG.icons.empoignade },
|
||||||
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#d5633d', name: 'EFFECT.StatusGrappled', img: RDD_CONFIG.icons.empoignade },
|
{ rdd: true, id: STATUSES.StatusGrappled, tint: '#d5633d', name: 'EFFECT.StatusGrappled', img: RDD_CONFIG.icons.empoignade },
|
||||||
@@ -36,7 +37,8 @@ const rddStatusEffects = [
|
|||||||
{ rdd: true, id: STATUSES.StatusBleeding, name: 'EFFECT.StatusBleeding', img: 'icons/svg/blood.svg' },
|
{ rdd: true, id: STATUSES.StatusBleeding, name: 'EFFECT.StatusBleeding', img: 'icons/svg/blood.svg' },
|
||||||
{ rdd: true, id: STATUSES.StatusDead, name: 'EFFECT.StatusDead', img: 'icons/svg/skull.svg' },
|
{ rdd: true, id: STATUSES.StatusDead, name: 'EFFECT.StatusDead', img: 'icons/svg/skull.svg' },
|
||||||
demiReveStatusEffect,
|
demiReveStatusEffect,
|
||||||
forceWeakStatusEffect
|
forceWeakStatusEffect,
|
||||||
|
surEncEffect,
|
||||||
];
|
];
|
||||||
|
|
||||||
const statusDemiSurprise = new Set([STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained, STATUSES.StatusForceWeak])
|
const statusDemiSurprise = new Set([STATUSES.StatusStunned, STATUSES.StatusProne, STATUSES.StatusRestrained, STATUSES.StatusForceWeak])
|
||||||
@@ -136,7 +138,7 @@ export class StatusEffects extends FormApplication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static prepareActiveEffect(effectId) {
|
static prepareActiveEffect(effectId) {
|
||||||
let status = rddStatusEffects.find(it => it.id == effectId)
|
let status = rddStatusEffects.find(it => it.statuses.has(effectId))
|
||||||
if (status) {
|
if (status) {
|
||||||
status = foundry.utils.duplicate(status)
|
status = foundry.utils.duplicate(status)
|
||||||
status.statuses = new Set([effectId])
|
status.statuses = new Set([effectId])
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<li class="caracteristique flexrow list-item {{#if carac.isLevelUp}}xp-level-up{{/if}}" data-attribute="{{key}}">
|
<li class="caracteristique flexrow list-item {{#if carac.isLevelUp}}xp-level-up{{/if}}" data-attribute="{{key}}">
|
||||||
{{#if (eq key 'taille')}}
|
{{#if (eq key 'taille')}}
|
||||||
<span class="carac-label" name="system.carac.{{key}}.label">{{carac.label}}</span>
|
<span class="carac-label" name="system.carac.{{key}}.label">{{carac.label}}</span>
|
||||||
<input class="carac-value" type="number" name="system.carac.{{key}}.value" value="{{carac.value}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
<input class="carac-value" type="number" name="carac.{{key}}" value="{{carac.value}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||||
<label class="carac-xp"/>
|
<label class="carac-xp"/>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if (actor-default @root.type 'carac' key 'derivee')}}
|
{{#if (actor-default @root.type 'carac' key 'derivee')}}
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
{{else}}
|
{{else}}
|
||||||
<span class="carac-label" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
|
<span class="carac-label" name="system.carac.{{key}}.label"><a class="roll-carac" data-carac-name={{key}}>{{carac.label}}</a></span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<input class="carac-value" type="number" name="system.carac.{{key}}.value" value="{{carac.value}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
<input class="carac-value" type="number" name="carac.{{key}}" value="{{carac.value}}" data-dtype="number" {{#unless @root.options.vueDetaillee}}disabled{{/unless}} />
|
||||||
<span class="carac-xp">
|
<span class="carac-xp">
|
||||||
<input class="carac-xp" type="number" name="system.carac.{{key}}.xp" value="{{carac.xp}}" data-dtype="number"
|
<input class="carac-xp" type="number" name="system.carac.{{key}}.xp" value="{{carac.xp}}" data-dtype="number"
|
||||||
data-tooltip="Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter votre {{carac.label}}"
|
data-tooltip="Vous devez acquérir {{carac.xpNext}} points d'Experience pour augmenter votre {{carac.label}}"
|
||||||
|
|||||||
Reference in New Issue
Block a user