Compare commits
21 Commits
foundryvtt
...
v11
Author | SHA1 | Date | |
---|---|---|---|
c586a90690 | |||
16e40b0ed8 | |||
427a950954 | |||
a7b20bdd35 | |||
3b18e0b919 | |||
ff8a5d7ba3 | |||
3aa8c0f0af | |||
8d9f09c18c | |||
9d654246c2 | |||
111fac2b2d | |||
3e99265125 | |||
28878b74fc | |||
ba8276ef37 | |||
b9e8c24461 | |||
8754ea9f5f | |||
f56ddb4a1b | |||
e80dbc7332 | |||
4c82d85e6a | |||
538058ecc6 | |||
70e42ea631 | |||
15525ef8cc |
37
changelog.md
37
changelog.md
@ -1,4 +1,41 @@
|
|||||||
# 12.0
|
# 12.0
|
||||||
|
## 12.0.8 - La quincaillerie d'Astrobazzarh
|
||||||
|
- le propriétaire est indiqué dans les feuilles d'équipements/compétences/...
|
||||||
|
- Ecaille d'efficacité
|
||||||
|
- l'écaille d'efficacité est prise en compte même si on n'utilise pas le ciblage en combat
|
||||||
|
- l'écaille d'efficacité est prise en compte pour l'initiative
|
||||||
|
- Corrections
|
||||||
|
- l'état général est pris en compte pour les initiatives
|
||||||
|
- le tooltip de l'initiative affiche correctement l'initiative
|
||||||
|
|
||||||
|
## 12.0.7 - La propriété d'Astrobazzarh
|
||||||
|
- correction des opérations faites à la création d'un Item:
|
||||||
|
- la durée des queues/rencontres/souffles
|
||||||
|
- les effets draconiques d'un souffle/queue
|
||||||
|
- mise à jour des points de tâche des blessures lors des soins
|
||||||
|
- pas d'expérience sur les particulières quand aucun MJ n'est connecté
|
||||||
|
- Le drag&drop d'un acteur depuis la liste des acteurs sur la fiche
|
||||||
|
d'une entité incarnée permet d'accorder le personnage
|
||||||
|
- Les messages pour résister aux possessions/conjuration sont envoyées
|
||||||
|
au défenseur
|
||||||
|
- Les messages pour résister aux empoignades sont envoyées au défenseur
|
||||||
|
- la commande /voyage affiche maintenant le total de fatigue pour chaque voyageur
|
||||||
|
- la commande /voyage affiche maintenant les compétences liées au terrain
|
||||||
|
|
||||||
|
## 12.0.6 - Le bazar d'Astrobazzarh
|
||||||
|
- Corrections de l'inventaire en bazar:
|
||||||
|
- un problème pouvait survenir en déplaçant les objets
|
||||||
|
l'inventaire, qui fait qu'un conteneur se retrouve récursivement dans son
|
||||||
|
propre contenu, ce qui empêche d'ouvrir la feuille d'acteur.
|
||||||
|
- un objet non-conteneur pouvait dans certains cas avoir un pseudo contenu
|
||||||
|
- un objet pouvait être considéré comme contenu, sans être présent dans un
|
||||||
|
conteneur (et donc non affiché)
|
||||||
|
- vider les conteneurs supprime correctement toutes les informations liées
|
||||||
|
aux conteneurs/contenus
|
||||||
|
- Les messages pour les tirages dans le compendium utilisent le "roll mode"
|
||||||
|
courant pour leur visibilité
|
||||||
|
- Fix: restaurer la compatibilité Foundry 11
|
||||||
|
|
||||||
## 12.0.5 - Les mauvais jours d'Astrobazzarh
|
## 12.0.5 - Les mauvais jours d'Astrobazzarh
|
||||||
- Fix: on peut de nouveau ouvrir l'édition de calendrier
|
- Fix: on peut de nouveau ouvrir l'édition de calendrier
|
||||||
- Fix: on ne peut plus ouvrir plusieurs fenêtres de lancer de sort
|
- Fix: on ne peut plus ouvrir plusieurs fenêtres de lancer de sort
|
||||||
|
@ -1548,6 +1548,9 @@ export class RdDActor extends RdDBaseActorSang {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async appliquerAjoutExperience(rollData, hideChatMessage = 'show') {
|
async appliquerAjoutExperience(rollData, hideChatMessage = 'show') {
|
||||||
|
if (!Misc.firstConnectedGM()){
|
||||||
|
return
|
||||||
|
}
|
||||||
hideChatMessage = hideChatMessage == 'hide' || (Misc.isRollModeHiddenToPlayer() && !game.user.isGM)
|
hideChatMessage = hideChatMessage == 'hide' || (Misc.isRollModeHiddenToPlayer() && !game.user.isGM)
|
||||||
let xpData = await this._appliquerExperience(rollData.rolled, rollData.selectedCarac.label, rollData.competence, rollData.jetResistance);
|
let xpData = await this._appliquerExperience(rollData.rolled, rollData.selectedCarac.label, rollData.competence, rollData.jetResistance);
|
||||||
if (xpData.length) {
|
if (xpData.length) {
|
||||||
|
@ -318,10 +318,10 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollCompetence(idOrName, options = { tryTarget: true }) {
|
async rollCompetence(idOrName, options = { tryTarget: true, arme: undefined }) {
|
||||||
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
RdDEmpoignade.checkEmpoignadeEnCours(this)
|
||||||
const competence = this.getCompetence(idOrName);
|
const competence = this.getCompetence(idOrName);
|
||||||
let rollData = { carac: this.system.carac, competence: competence }
|
let rollData = { carac: this.system.carac, competence: competence, arme: options.arme }
|
||||||
if (competence.type == TYPES.competencecreature) {
|
if (competence.type == TYPES.competencecreature) {
|
||||||
const arme = RdDItemCompetenceCreature.armeCreature(competence)
|
const arme = RdDItemCompetenceCreature.armeCreature(competence)
|
||||||
if (arme && options.tryTarget && Targets.hasTargets()) {
|
if (arme && options.tryTarget && Targets.hasTargets()) {
|
||||||
@ -361,7 +361,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
rollArme(arme, categorieArme = "competence") {
|
rollArme(arme, categorieArme = "competence") {
|
||||||
let compToUse = this.$getCompetenceArme(arme, categorieArme)
|
const compToUse = this.$getCompetenceArme(arme, categorieArme)
|
||||||
if (!RdDItemArme.isArmeUtilisable(arme)) {
|
if (!RdDItemArme.isArmeUtilisable(arme)) {
|
||||||
ui.notifications.warn(`Arme inutilisable: ${arme.name} a une résistance de 0 ou moins`)
|
ui.notifications.warn(`Arme inutilisable: ${arme.name} a une résistance de 0 ou moins`)
|
||||||
return
|
return
|
||||||
@ -375,7 +375,7 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
title: 'Ne pas utiliser les automatisation de combat',
|
title: 'Ne pas utiliser les automatisation de combat',
|
||||||
buttonLabel: "Pas d'automatisation",
|
buttonLabel: "Pas d'automatisation",
|
||||||
onAction: async () => {
|
onAction: async () => {
|
||||||
this.rollCompetence(compToUse, { tryTarget: false })
|
this.rollCompetence(compToUse, { tryTarget: false, arme: arme })
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return
|
return
|
||||||
@ -508,8 +508,8 @@ export class RdDBaseActorReve extends RdDBaseActor {
|
|||||||
|
|
||||||
isEntiteAccordee(attacker) { return true }
|
isEntiteAccordee(attacker) { return true }
|
||||||
|
|
||||||
async setEntiteReveAccordee(attacker) {
|
async setEntiteReveAccordee(actor) {
|
||||||
ui.notifications.error("Impossible de s'accorder à " + this.name + ": ce n'est pas une entite de cauchemer/rêve");
|
ui.notifications.error("Impossible de s'accorder à " + this.name + ": ce n'est pas une entité incarnée");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -557,15 +557,15 @@ export class RdDBaseActor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** Ajoute un item dans un conteneur, sur la base de leurs ID */
|
/** Ajoute un item dans un conteneur, sur la base de leurs ID */
|
||||||
async ajouterDansConteneur(item, conteneur, onAjouterDansConteneur) {
|
async ajouterDansConteneur(item, conteneur, onAjouterDansConteneur) {
|
||||||
if (!conteneur) {
|
if (conteneur?.isConteneur()) {
|
||||||
// TODO: afficher
|
|
||||||
item.estContenu = false;
|
|
||||||
}
|
|
||||||
else if (conteneur.isConteneur()) {
|
|
||||||
item.estContenu = true;
|
item.estContenu = true;
|
||||||
const nouveauContenu = [...conteneur.system.contenu, item.id];
|
const nouveauContenu = [...conteneur.system.contenu, item.id];
|
||||||
await conteneur.update({ 'system.contenu': nouveauContenu });
|
await conteneur.update({ 'system.contenu': nouveauContenu });
|
||||||
onAjouterDansConteneur(item.id, conteneur.id);
|
onAjouterDansConteneur(item.id, conteneur.id)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item.estContenu = false;
|
||||||
|
await conteneur?.update({ 'system.-=contenu': undefined })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -583,8 +583,13 @@ export class RdDBaseActor extends Actor {
|
|||||||
if (item.estContenu) {
|
if (item.estContenu) {
|
||||||
item.estContenu = undefined;
|
item.estContenu = undefined;
|
||||||
}
|
}
|
||||||
if (item.type == 'conteneur' && item.system.contenu.length > 0) {
|
if (item.system.contenu != undefined) {
|
||||||
corrections.push({ _id: item.id, 'system.contenu': [] });
|
if (item.type == 'conteneur') {
|
||||||
|
corrections.push({ _id: item.id, 'system.contenu': [] });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
corrections.push({ _id: item.id, 'system.-=contenu': undefined });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (corrections.length > 0) {
|
if (corrections.length > 0) {
|
||||||
@ -619,15 +624,21 @@ export class RdDBaseActor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
/** Supprime un item d'un conteneur, sur la base
|
/**
|
||||||
* de leurs ID */
|
* Supprime un item d'un conteneur, sur la base de leurs ID
|
||||||
|
*/
|
||||||
async enleverDeConteneur(item, conteneur, onEnleverDeConteneur) {
|
async enleverDeConteneur(item, conteneur, onEnleverDeConteneur) {
|
||||||
if (conteneur?.isConteneur()) {
|
if (conteneur) {
|
||||||
item.estContenu = false;
|
if (conteneur.isConteneur()) {
|
||||||
const contenu = conteneur.system.contenu.filter(id => id != item.id);
|
const contenu = conteneur.system.contenu.filter(id => id != item.id);
|
||||||
await conteneur.update({ 'system.contenu': contenu });
|
await conteneur.update({ 'system.contenu': contenu });
|
||||||
onEnleverDeConteneur();
|
onEnleverDeConteneur();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await conteneur.update({ 'system.-=contenu': undefined })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
item.estContenu = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -33,27 +33,4 @@ export class RdDCreature extends RdDBaseActorSang {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
isEntiteAccordee(attacker) {
|
|
||||||
if (this.isEntite([ENTITE_INCARNE])) {
|
|
||||||
let resonnance = this.system.sante.resonnance
|
|
||||||
return (resonnance.actors.find(it => it == attacker.id))
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
async setEntiteReveAccordee(attacker) {
|
|
||||||
if (this.isEntite([ENTITE_INCARNE])) {
|
|
||||||
let resonnance = foundry.utils.duplicate(this.system.sante.resonnance);
|
|
||||||
if (resonnance.actors.find(it => it == attacker.id)) {
|
|
||||||
// déjà accordé
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await this.update({ "system.sante.resonnance": [...resonnance, attacker.id] });
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
super.setEntiteReveAccordee(attacker)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,12 @@ export class RdDActorEntiteSheet extends RdDBaseActorReveSheet {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _onDropActor(event, dragData) {
|
||||||
|
const dropActor = fromUuidSync(dragData.uuid)
|
||||||
|
await this.actor.setEntiteReveAccordee(dropActor)
|
||||||
|
super._onDropActor(event, dragData)
|
||||||
|
}
|
||||||
|
|
||||||
async deleteSubActeur(actorId) {
|
async deleteSubActeur(actorId) {
|
||||||
let newResonances = this.actor.system.sante.resonnance.actors.filter(id => id != actorId);
|
let newResonances = this.actor.system.sante.resonnance.actors.filter(id => id != actorId);
|
||||||
await this.actor.update({ 'system.sante.resonnance.actors': newResonances }, { renderSheet: false });
|
await this.actor.update({ 'system.sante.resonnance.actors': newResonances }, { renderSheet: false });
|
||||||
|
@ -91,20 +91,16 @@ export class RdDEntite extends RdDBaseActorReve {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async setEntiteReveAccordee(attacker) {
|
async setEntiteReveAccordee(actor) {
|
||||||
if (this.isEntite([ENTITE_INCARNE])) {
|
if (this.isEntite([ENTITE_INCARNE])) {
|
||||||
let resonnance = foundry.utils.duplicate(this.system.sante.resonnance);
|
if (this.system.sante.resonnance.actors.find(it => it == actor.id)) {
|
||||||
if (resonnance.actors.find(it => it == attacker.id)) {
|
|
||||||
// déjà accordé
|
// déjà accordé
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
resonnance.actors.push(attacker.id);
|
await this.update({ "system.sante.resonnance.actors": [...this.system.sante.resonnance.actors, actor.id] })
|
||||||
await this.update({ "system.sante.resonnance": resonnance });
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
super.setEntiteReveAccordee(attacker)
|
super.setEntiteReveAccordee(actor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,8 @@ export class RdDItemSheet extends ItemSheet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get title() {
|
get title() {
|
||||||
return `${Misc.typeName('Item', this.item.type)}: ${this.item.name}`;
|
const owner = (this.item.parent instanceof Actor) ? `(${this.item.parent.name})` : '';
|
||||||
|
return `${Misc.typeName('Item', this.item.type)}: ${this.item.name} ${owner}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -166,11 +166,12 @@ export class Misc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static firstConnectedGM() {
|
static firstConnectedGM() {
|
||||||
if (game.users?.activeGM) {
|
if (foundry.utils.isNewerVersion(game.release.version, '12.0')) {
|
||||||
return game.users.activeGM
|
return game.users.activeGM
|
||||||
}
|
}
|
||||||
return game.users.sort(Misc.ascending(u => u.id)).find(u => u.isGM && u.active);
|
return game.users.find(u => u.isGM && u.active);
|
||||||
}
|
}
|
||||||
|
|
||||||
static connectedGMs() {
|
static connectedGMs() {
|
||||||
return game.users.filter(u => u.isGM && u.active);
|
return game.users.filter(u => u.isGM && u.active);
|
||||||
}
|
}
|
||||||
@ -188,16 +189,20 @@ export class Misc {
|
|||||||
* and there is no connected GM
|
* and there is no connected GM
|
||||||
*/
|
*/
|
||||||
static documentIfResponsible(document) {
|
static documentIfResponsible(document) {
|
||||||
if (document instanceof Document) {
|
if (foundry.utils.isNewerVersion(game.release.version, '12.0')) {
|
||||||
if (Misc.isUniqueConnectedGM() || (Misc.connectedGMs().length == 0 && Misc.isOwnerPlayer(document))) {
|
if (game.users.activeGM || (Misc.connectedGMs().length == 0 && Misc.isOwnerPlayer(document)))
|
||||||
|
{
|
||||||
return document
|
return document
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (Misc.isUniqueConnectedGM() || (Misc.connectedGMs().length == 0 && Misc.isOwnerPlayer(document))) {
|
||||||
|
return document
|
||||||
|
}
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
static isOwnerPlayer(actor) {
|
static isOwnerPlayer(document) {
|
||||||
return actor.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
|
return document.testUserPermission && document.testUserPermission(game.user, CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
|
||||||
}
|
}
|
||||||
|
|
||||||
static isOwnerPlayerOrUniqueConnectedGM(actor) {
|
static isOwnerPlayerOrUniqueConnectedGM(actor) {
|
||||||
|
@ -75,6 +75,12 @@ export class RdDCombatManager extends Combat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
static calculAjustementInit(actor, arme) {
|
||||||
|
const efficacite = (arme?.system.magique) ? arme.system.ecaille_efficacite : 0
|
||||||
|
const etatGeneral = actor.getEtatGeneral() ?? 0
|
||||||
|
return efficacite + etatGeneral
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************************/
|
/************************************************************************************/
|
||||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||||
@ -84,12 +90,14 @@ export class RdDCombatManager extends Combat {
|
|||||||
// calculate initiative
|
// calculate initiative
|
||||||
for (let cId = 0; cId < ids.length; cId++) {
|
for (let cId = 0; cId < ids.length; cId++) {
|
||||||
const combatant = this.combatants.get(ids[cId]);
|
const combatant = this.combatants.get(ids[cId]);
|
||||||
let rollFormula = formula ?? RdDCombatManager.formuleInitiative(2, 10, 0, 0);
|
const ajustement = RdDCombatManager.calculAjustementInit(combatant.actor, undefined);
|
||||||
|
let rollFormula = formula ?? RdDCombatManager.formuleInitiative(2, 10, 0, ajustement);
|
||||||
|
|
||||||
if (!formula) {
|
if (!formula) {
|
||||||
if (combatant.actor.type == 'creature' || combatant.actor.type == 'entite') {
|
if (combatant.actor.type == 'creature' || combatant.actor.type == 'entite') {
|
||||||
const competence = combatant.actor.items.find(it => RdDItemCompetenceCreature.isCompetenceAttaque(it))
|
const competence = combatant.actor.items.find(it => RdDItemCompetenceCreature.isCompetenceAttaque(it))
|
||||||
if (competence) {
|
if (competence) {
|
||||||
rollFormula = RdDCombatManager.formuleInitiative(2, competence.system.carac_value, competence.system.niveau, 0);
|
rollFormula = RdDCombatManager.formuleInitiative(2, competence.system.carac_value, competence.system.niveau, etatGeneral);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const armeCombat = combatant.actor.itemTypes['arme'].find(it => it.system.equipe)
|
const armeCombat = combatant.actor.itemTypes['arme'].find(it => it.system.equipe)
|
||||||
@ -109,8 +117,9 @@ export class RdDCombatManager extends Combat {
|
|||||||
if (competence && competence.system.defaut_carac) {
|
if (competence && competence.system.defaut_carac) {
|
||||||
const carac = combatant.actor.system.carac[competence.system.defaut_carac].value;
|
const carac = combatant.actor.system.carac[competence.system.defaut_carac].value;
|
||||||
const niveau = competence.system.niveau;
|
const niveau = competence.system.niveau;
|
||||||
const bonusEcaille = (armeCombat?.system.magique) ? armeCombat.system.ecaille_efficacite : 0;
|
|
||||||
rollFormula = RdDCombatManager.formuleInitiative(2, carac, niveau, bonusEcaille);
|
const ajustement = RdDCombatManager.calculAjustementInit(combatant.actor, armeCombat)
|
||||||
|
rollFormula = RdDCombatManager.formuleInitiative(2, carac, niveau, ajustement);
|
||||||
} else {
|
} else {
|
||||||
ui.notifications.warn(`Votre arme ${armeCombat.name} n'a pas de compétence renseignée`);
|
ui.notifications.warn(`Votre arme ${armeCombat.name} n'a pas de compétence renseignée`);
|
||||||
}
|
}
|
||||||
@ -214,13 +223,16 @@ export class RdDCombatManager extends Combat {
|
|||||||
|
|
||||||
static $prepareAttaqueArme(infoAttaque) {
|
static $prepareAttaqueArme(infoAttaque) {
|
||||||
const comp = infoAttaque.competences.find(c => c.name == infoAttaque.competence);
|
const comp = infoAttaque.competences.find(c => c.name == infoAttaque.competence);
|
||||||
const attaque = foundry.utils.duplicate(infoAttaque.arme);
|
const arme = infoAttaque.arme;
|
||||||
|
const attaque = foundry.utils.duplicate(arme);
|
||||||
attaque.action = 'attaque';
|
attaque.action = 'attaque';
|
||||||
attaque.system.competence = infoAttaque.competence;
|
attaque.system.competence = infoAttaque.competence;
|
||||||
attaque.system.dommagesReels = infoAttaque.dommagesReel;
|
attaque.system.dommagesReels = infoAttaque.dommagesReel;
|
||||||
attaque.system.infoMain = infoAttaque.infoMain;
|
attaque.system.infoMain = infoAttaque.infoMain;
|
||||||
attaque.system.niveau = comp.system.niveau;
|
attaque.system.niveau = comp.system.niveau;
|
||||||
attaque.system.initiative = RdDCombatManager.calculInitiative(comp.system.niveau, infoAttaque.carac[comp.system.defaut_carac].value);
|
|
||||||
|
const ajustement = (arme?.parent?.getEtatGeneral() ?? 0) + (arme?.system.magique) ? arme.system.ecaille_efficacite : 0;
|
||||||
|
attaque.system.initiative = RdDCombatManager.calculInitiative(comp.system.niveau, infoAttaque.carac[comp.system.defaut_carac].value, ajustement);
|
||||||
return attaque;
|
return attaque;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,7 +347,6 @@ export class RdDCombatManager extends Combat {
|
|||||||
ui.notifications.warn(`Le combatant ${combatant.name} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`)
|
ui.notifications.warn(`Le combatant ${combatant.name} n'est pas associé à un acteur, impossible de déterminer ses actions de combat!`)
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
let initInfo = "";
|
let initInfo = "";
|
||||||
let initOffset = 0;
|
let initOffset = 0;
|
||||||
let caracForInit = 0;
|
let caracForInit = 0;
|
||||||
@ -370,9 +381,9 @@ export class RdDCombatManager extends Combat {
|
|||||||
initOffset = RdDCombatManager._baseInitOffset(compData.system.categorie, action);
|
initOffset = RdDCombatManager._baseInitOffset(compData.system.categorie, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
let malus = combatant.actor.getEtatGeneral(); // Prise en compte état général
|
|
||||||
// Cas des créatures et entités vs personnages
|
// Cas des créatures et entités vs personnages
|
||||||
let rollFormula = RdDCombatManager.formuleInitiative(initOffset, caracForInit, compNiveau, malus);
|
const ajustement = RdDCombatManager.calculAjustementInit(combatant.actor, action)
|
||||||
|
let rollFormula = RdDCombatManager.formuleInitiative(initOffset, caracForInit, compNiveau, ajustement);
|
||||||
// Garder la trace de l'arme/compétence utilisée pour l'iniative
|
// Garder la trace de l'arme/compétence utilisée pour l'iniative
|
||||||
combatant.initiativeData = { arme: action } // pour reclasser l'init au round 0
|
combatant.initiativeData = { arme: action } // pour reclasser l'init au round 0
|
||||||
game.combat.rollInitiative(combatantId, rollFormula, { initInfo: initInfo });
|
game.combat.rollInitiative(combatantId, rollFormula, { initInfo: initInfo });
|
||||||
@ -787,7 +798,7 @@ export class RdDCombat {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
_prepareAttaque(competence, arme) {
|
_prepareAttaque(competence, arme) {
|
||||||
let rollData = {
|
let rollData = {
|
||||||
passeArme: randomID(16),
|
passeArme: foundry.utils.randomID(16),
|
||||||
mortalite: arme?.system.mortalite,
|
mortalite: arme?.system.mortalite,
|
||||||
competence: competence,
|
competence: competence,
|
||||||
surprise: this.attacker.getSurprise(true),
|
surprise: this.attacker.getSurprise(true),
|
||||||
|
@ -17,7 +17,7 @@ const imagesHeures = [1, 2, 3, 4, 5, 6, 7, 9, 9, 10, 11, 12].map(it => iconHeure
|
|||||||
const imgSigneDragon = img(imagesHeures[4]);
|
const imgSigneDragon = img(imagesHeures[4]);
|
||||||
|
|
||||||
/** De pour les jets de rencontre */
|
/** De pour les jets de rencontre */
|
||||||
export class DeTMR extends foundry.dice.terms.Die {
|
export class DeTMR extends Die {
|
||||||
/** @override */
|
/** @override */
|
||||||
static DENOMINATION = "t";
|
static DENOMINATION = "t";
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ export class DeTMR extends foundry.dice.terms.Die {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** DeDraconique pour le D8 sans limite avec 8=>0 */
|
/** DeDraconique pour le D8 sans limite avec 8=>0 */
|
||||||
export class DeDraconique extends foundry.dice.terms.Die {
|
export class DeDraconique extends Die {
|
||||||
static DENOMINATION = "r";
|
static DENOMINATION = "r";
|
||||||
|
|
||||||
static diceSoNiceData(system) {
|
static diceSoNiceData(system) {
|
||||||
@ -93,7 +93,7 @@ export class DeDraconique extends foundry.dice.terms.Die {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** De 12 avec les heures */
|
/** De 12 avec les heures */
|
||||||
export class DeHeure extends foundry.dice.terms.Die {
|
export class DeHeure extends Die {
|
||||||
|
|
||||||
/** @override */
|
/** @override */
|
||||||
static DENOMINATION = "h";
|
static DENOMINATION = "h";
|
||||||
|
@ -248,7 +248,7 @@ export class RdDEmpoignade {
|
|||||||
if (rollData.rolled.isPart) {
|
if (rollData.rolled.isPart) {
|
||||||
rollData.particuliere = "finesse";
|
rollData.particuliere = "finesse";
|
||||||
}
|
}
|
||||||
let msg = await RdDResolutionTable.displayRollData(rollData, attacker, 'chat-empoignade-resultat.html');
|
let msg = await RdDResolutionTable.displayRollData(rollData, defender, 'chat-empoignade-resultat.html');
|
||||||
RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
|
RdDEmpoignade.$storeRollEmpoignade(msg, rollData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -427,7 +427,7 @@ export class RdDEmpoignade {
|
|||||||
name: "Empoignade en cours de " + attacker.name + ' sur ' + defender.name,
|
name: "Empoignade en cours de " + attacker.name + ' sur ' + defender.name,
|
||||||
type: 'empoignade',
|
type: 'empoignade',
|
||||||
img: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp",
|
img: "systems/foundryvtt-reve-de-dragon/icons/entites/possession2.webp",
|
||||||
system: { description: "", empoignadeid: randomID(16), compteempoigne: 0, empoigneurid: attacker.id, empoigneid: defender.id, ptsemp: 0, empoigneurname: attacker.name, empoignename: defender.name }
|
system: { description: "", empoignadeid: foundry.utils.randomID(16), compteempoigne: 0, empoigneurid: attacker.id, empoigneid: defender.id, ptsemp: 0, empoigneurname: attacker.name, empoignename: defender.name }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
temporary: true
|
temporary: true
|
||||||
|
@ -131,7 +131,7 @@ export class RdDPossession {
|
|||||||
}
|
}
|
||||||
const possession = (rollData.isECNIDefender ? rollData.attacker : rollData.defender).getPossession(rollData.possession.system.possessionid)
|
const possession = (rollData.isECNIDefender ? rollData.attacker : rollData.defender).getPossession(rollData.possession.system.possessionid)
|
||||||
RdDPossession.storePossessionAttaque(possession, rollData)
|
RdDPossession.storePossessionAttaque(possession, rollData)
|
||||||
await RdDResolutionTable.displayRollData(rollData, rollData.attacker, 'chat-resultat-possession.html');
|
await RdDResolutionTable.displayRollData(rollData, rollData.defender, 'chat-resultat-possession.html');
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -171,7 +171,7 @@ export class RdDPossession {
|
|||||||
rollData.possession = possession
|
rollData.possession = possession
|
||||||
RdDPossession.$updateEtatPossession(rollData.possession)
|
RdDPossession.$updateEtatPossession(rollData.possession)
|
||||||
|
|
||||||
await RdDResolutionTable.displayRollData(rollData, rollData.defender, 'chat-resultat-possession.html')
|
await RdDResolutionTable.displayRollData(rollData, rollData.attacker, 'chat-resultat-possession.html')
|
||||||
if (rollData.possession.isPosseder || rollData.possession.isConjurer) {
|
if (rollData.possession.isPosseder || rollData.possession.isConjurer) {
|
||||||
// conjuration
|
// conjuration
|
||||||
victime.deleteEmbeddedDocuments("Item", [rollData.possession._id])
|
victime.deleteEmbeddedDocuments("Item", [rollData.possession._id])
|
||||||
@ -230,7 +230,7 @@ export class RdDPossession {
|
|||||||
system: {
|
system: {
|
||||||
description: "", typepossession: attacker.name,
|
description: "", typepossession: attacker.name,
|
||||||
possede: false,
|
possede: false,
|
||||||
possessionid: randomID(16),
|
possessionid: foundry.utils.randomID(16),
|
||||||
entite: { actorid: attacker.id },
|
entite: { actorid: attacker.id },
|
||||||
victime: { actorid: defender.id },
|
victime: { actorid: defender.id },
|
||||||
compteur: 0
|
compteur: 0
|
||||||
|
@ -97,7 +97,7 @@ export class RdDResolutionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static actorChatName(actor) {
|
static actorChatName(actor) {
|
||||||
return actor?.userName ?? game.user.name;
|
return actor?.name ?? game.user.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -358,13 +358,15 @@ export class RdDUtility {
|
|||||||
let objetVersConteneur = {};
|
let objetVersConteneur = {};
|
||||||
// Attribution des objets aux conteneurs
|
// Attribution des objets aux conteneurs
|
||||||
for (let conteneur of conteneurs) {
|
for (let conteneur of conteneurs) {
|
||||||
conteneur.subItems = [];
|
if (conteneur.isConteneur()) {
|
||||||
for (let id of conteneur.system.contenu ?? []) {
|
conteneur.subItems = [];
|
||||||
let objet = inventaires.find(objet => (id == objet._id));
|
for (let id of conteneur.system.contenu ?? []) {
|
||||||
if (objet) {
|
let objet = inventaires.find(objet => (id == objet._id));
|
||||||
objet.estContenu = true; // Permet de filtrer ce qui est porté dans le template
|
if (objet) {
|
||||||
objetVersConteneur[id] = conteneur._id;
|
objet.estContenu = true;
|
||||||
conteneur.subItems.push(objet);
|
objetVersConteneur[id] = conteneur._id;
|
||||||
|
conteneur.subItems.push(objet);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -767,7 +769,7 @@ export class RdDUtility {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static createMonnaie(name, cout, img = "", enc = 0.01) {
|
static createMonnaie(name, cout, img = "", enc = 0.01) {
|
||||||
let piece = {
|
let piece = {
|
||||||
name: name, type: 'monnaie', img: img, _id: randomID(16),
|
name: name, type: 'monnaie', img: img, _id: foundry.utils.randomID(16),
|
||||||
dasystemta: {
|
dasystemta: {
|
||||||
quantite: 0,
|
quantite: 0,
|
||||||
cout: cout,
|
cout: cout,
|
||||||
|
@ -111,7 +111,7 @@ export const referenceAjustements = {
|
|||||||
isVisible: (rollData, actor) => rollData.arme?.system.magique && Number(rollData.arme?.system.ecaille_efficacite) > 0,
|
isVisible: (rollData, actor) => rollData.arme?.system.magique && Number(rollData.arme?.system.ecaille_efficacite) > 0,
|
||||||
isUsed: (rollData, actor) => rollData.arme?.system.magique && Number(rollData.arme?.system.ecaille_efficacite) > 0,
|
isUsed: (rollData, actor) => rollData.arme?.system.magique && Number(rollData.arme?.system.ecaille_efficacite) > 0,
|
||||||
getLabel: (rollData, actor) => "Ecaille d'Efficacité: ",
|
getLabel: (rollData, actor) => "Ecaille d'Efficacité: ",
|
||||||
getValue: (rollData, actor) => Math.max(Number(rollData.arme?.system.ecaille_efficacite), 0),
|
getValue: (rollData, actor) => rollData.arme?.system.magique ? Math.max(Number(rollData.arme?.system.ecaille_efficacite), 0) : 0,
|
||||||
},
|
},
|
||||||
finesse: {
|
finesse: {
|
||||||
isUsed: (rollData, actor) => RdDBonus.isDefenseAttaqueFinesse(rollData),
|
isUsed: (rollData, actor) => RdDBonus.isDefenseAttaqueFinesse(rollData),
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { ChatUtility } from "../chat-utility.js";
|
||||||
import { HIDE_DICE, SYSTEM_RDD } from "../constants.js";
|
import { HIDE_DICE, SYSTEM_RDD } from "../constants.js";
|
||||||
import { RdDItem } from "../item.js";
|
import { RdDItem } from "../item.js";
|
||||||
import { Misc } from "../misc.js";
|
import { Misc } from "../misc.js";
|
||||||
@ -290,7 +291,7 @@ export class CompendiumTableHelpers {
|
|||||||
sound: CONFIG.sounds.dice,
|
sound: CONFIG.sounds.dice,
|
||||||
content: flavorContent
|
content: flavorContent
|
||||||
};
|
};
|
||||||
ChatMessage.create(messageData, { rollMode: "gmroll" });
|
await ChatUtility.createChatWithRollMode(game.user.id, messageData)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -306,7 +307,7 @@ export class CompendiumTableHelpers {
|
|||||||
whisper: game.user.id,
|
whisper: game.user.id,
|
||||||
content: flavorContent
|
content: flavorContent
|
||||||
};
|
};
|
||||||
ChatMessage.create(messageData, { rollMode: "gmroll" });
|
await ChatUtility.createChatWithRollMode(game.user.id, messageData)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
import { TYPES } from "../item.js"
|
import { TYPES } from "../item.js"
|
||||||
import { RdDItemCompetence } from "../item-competence.js"
|
import { RdDItemCompetence } from "../item-competence.js"
|
||||||
import { ChatUtility } from "../chat-utility.js"
|
import { ChatUtility } from "../chat-utility.js"
|
||||||
|
import { Misc } from "../misc.js"
|
||||||
|
|
||||||
const CODES_COMPETENCES_VOYAGE = ['Extérieur', 'Forêt', 'Montagne', 'Marais', 'Glace', 'Equitation']
|
const CODES_COMPETENCES_VOYAGE = ['Extérieur', 'Forêt', 'Montagne', 'Marais', 'Glace', 'Equitation']
|
||||||
const TABLEAU_FATIGUE_MARCHE = [
|
const TABLEAU_FATIGUE_MARCHE = [
|
||||||
@ -36,7 +37,7 @@ export class DialogFatigueVoyage extends Dialog {
|
|||||||
const parameters = {
|
const parameters = {
|
||||||
tableauFatigueMarche: TABLEAU_FATIGUE_MARCHE,
|
tableauFatigueMarche: TABLEAU_FATIGUE_MARCHE,
|
||||||
playerActors: game.actors.filter(actor => actor.isPersonnageJoueur())
|
playerActors: game.actors.filter(actor => actor.isPersonnageJoueur())
|
||||||
.map(actor => DialogFatigueVoyage.prepareActor(actor)),
|
.map(actor => DialogFatigueVoyage.prepareActorParameters(actor)),
|
||||||
nombreHeures: 1,
|
nombreHeures: 1,
|
||||||
}
|
}
|
||||||
DialogFatigueVoyage.setModeDeplacement(parameters, undefined, undefined)
|
DialogFatigueVoyage.setModeDeplacement(parameters, undefined, undefined)
|
||||||
@ -53,21 +54,37 @@ export class DialogFatigueVoyage extends Dialog {
|
|||||||
parameters.typeTerrain = ligneFatigueMarche
|
parameters.typeTerrain = ligneFatigueMarche
|
||||||
parameters.vitesseDeplacement = rythme.vitesse
|
parameters.vitesseDeplacement = rythme.vitesse
|
||||||
parameters.fatigueHoraire = rythme.fatigue
|
parameters.fatigueHoraire = rythme.fatigue
|
||||||
|
parameters.playerActors.forEach(voyageur =>
|
||||||
|
DialogFatigueVoyage.selectSurvie(voyageur, parameters.typeTerrain.code)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
static prepareActor(actor) {
|
static prepareActorParameters(actor) {
|
||||||
const competencesVoyage = {}
|
const actorParameters = {
|
||||||
CODES_COMPETENCES_VOYAGE.forEach(codeSurvie =>
|
id: actor.id,
|
||||||
competencesVoyage[codeSurvie] = RdDItemCompetence.findCompetence(actor.itemTypes[TYPES.competence], codeSurvie, { onMessage: () => { } })
|
|
||||||
)
|
|
||||||
return {
|
|
||||||
actor: actor,
|
actor: actor,
|
||||||
selected: true,
|
selected: true,
|
||||||
ajustementFatigue: 0,
|
ajustementFatigue: 0,
|
||||||
competencesVoyage: competencesVoyage
|
survies: {}
|
||||||
}
|
}
|
||||||
|
const competencesVoyage = {}
|
||||||
|
CODES_COMPETENCES_VOYAGE.forEach(codeSurvie => {
|
||||||
|
competencesVoyage[codeSurvie] = RdDItemCompetence.findCompetence(actor.itemTypes[TYPES.competence], codeSurvie, { onMessage: () => { } })
|
||||||
|
})
|
||||||
|
TABLEAU_FATIGUE_MARCHE.forEach(terrain => {
|
||||||
|
actorParameters.survies[terrain.code] = Misc.join(
|
||||||
|
terrain.survies.map(survie => {
|
||||||
|
const niveau = competencesVoyage[survie]?.system.niveau
|
||||||
|
return `${survie}: ${niveau}`
|
||||||
|
}),
|
||||||
|
', ')
|
||||||
|
})
|
||||||
|
return actorParameters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static selectSurvie(actorParameters, code) {
|
||||||
|
actorParameters.survieCourante = actorParameters.survies[code]
|
||||||
|
}
|
||||||
|
|
||||||
constructor(html, parameters) {
|
constructor(html, parameters) {
|
||||||
const options = {
|
const options = {
|
||||||
@ -97,6 +114,7 @@ export class DialogFatigueVoyage extends Dialog {
|
|||||||
this.html.find('select[name="code-terrain"]').change(event => this.changeParameters())
|
this.html.find('select[name="code-terrain"]').change(event => this.changeParameters())
|
||||||
this.html.find('select[name="vitesse-deplacement"]').change(event => this.changeParameters())
|
this.html.find('select[name="vitesse-deplacement"]').change(event => this.changeParameters())
|
||||||
this.html.find('input[name="nombre-heures"]').change(event => this.changeParameters())
|
this.html.find('input[name="nombre-heures"]').change(event => this.changeParameters())
|
||||||
|
this.html.find('.list-item input[name="ajustement-fatigue"]').change(event => this.changeParameters())
|
||||||
this.html.find('button[name="appliquer-fatigue"]').click(event => this.appliquerFatigue())
|
this.html.find('button[name="appliquer-fatigue"]').click(event => this.appliquerFatigue())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,6 +136,10 @@ export class DialogFatigueVoyage extends Dialog {
|
|||||||
selectVitesseDeplacement.append(await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/voyage/option-vitesse-fatigue.hbs', rythme))
|
selectVitesseDeplacement.append(await renderTemplate('systems/foundryvtt-reve-de-dragon/templates/voyage/option-vitesse-fatigue.hbs', rythme))
|
||||||
})
|
})
|
||||||
selectVitesseDeplacement.val(this.parameters.vitesseDeplacement).change()
|
selectVitesseDeplacement.val(this.parameters.vitesseDeplacement).change()
|
||||||
|
|
||||||
|
Promise.all(this.getActorRows()
|
||||||
|
.map(async row => row.find('label.voyage-liste-survies').text(this.$extractActorParameters(row).survieCourante)
|
||||||
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,16 +154,24 @@ export class DialogFatigueVoyage extends Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async setFatigue() {
|
async setFatigue() {
|
||||||
this.html.find('input[name="base-fatigue"]').val(this.parameters.nombreHeures * this.parameters.fatigueHoraire)
|
const baseFatigue = this.parameters.nombreHeures * this.parameters.fatigueHoraire
|
||||||
|
this.html.find('input[name="base-fatigue"]').val(baseFatigue)
|
||||||
|
this.updateActorTotalFatigue(baseFatigue)
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateActorTotalFatigue(baseFatigue) {
|
||||||
|
Promise.all(this.getActorRows()
|
||||||
|
.map(async row => {
|
||||||
|
const actor = this.$extractActorParameters(row)
|
||||||
|
row.find('input[name="total-fatigue"]').val(actor.ajustement + baseFatigue)
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
async appliquerFatigue() {
|
async appliquerFatigue() {
|
||||||
const fatigueBase = parseInt(this.html.find('input[name="base-fatigue"]').val() ?? 0)
|
const fatigueBase = parseInt(this.html.find('input[name="base-fatigue"]').val() ?? 0)
|
||||||
const actors = jQuery.map(
|
this.getActorRows()
|
||||||
this.html.find('div.fatigue-actors-list li.list-item'),
|
.map(row => this.$extractActorParameters(row))
|
||||||
it => this.$extractActor(this.html.find(it))
|
.filter(it => it.selected)
|
||||||
)
|
|
||||||
actors.filter(it => it.selected)
|
|
||||||
.forEach(async it => {
|
.forEach(async it => {
|
||||||
const perteFatigue = fatigueBase + it.ajustement
|
const perteFatigue = fatigueBase + it.ajustement
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
@ -161,16 +191,24 @@ export class DialogFatigueVoyage extends Dialog {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
$extractActor(actorRow) {
|
getActorRows() {
|
||||||
const actor = game.actors.get(actorRow.data('actor-id'))
|
return jQuery.map(
|
||||||
|
this.html.find('div.fatigue-actors-list li.list-item'),
|
||||||
|
it => this.html.find(it))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$extractActorParameters(actorRow) {
|
||||||
|
const actorId = actorRow.data('actor-id')
|
||||||
|
const actorParameters = this.parameters.playerActors.find(it => it.id == actorId)
|
||||||
|
const actor = game.actors.get(actorId)
|
||||||
if (!actor) {
|
if (!actor) {
|
||||||
ui.notifications.warn(`Acteur ${it.actorId} introuvable`)
|
ui.notifications.warn(`Acteur ${it.actorId} introuvable`)
|
||||||
|
return {}
|
||||||
}
|
}
|
||||||
return {
|
actorParameters.ajustement = parseInt(actorRow.find('input[name="ajustement-fatigue"]').val() ?? 0)
|
||||||
actor: actor,
|
actorParameters.selected = actor && actorRow.find('input[name="selectionner-acteur"]').is(':checked')
|
||||||
ajustement: parseInt(actorRow.find('input[name="ajustement-fatigue"]').val() ?? 0),
|
return actorParameters
|
||||||
selected: actor && actorRow.find('input[name="selectionner-acteur"]').is(':checked')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async close() {
|
async close() {
|
||||||
|
@ -1374,7 +1374,7 @@ table.table-nombres-astraux tr:hover {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 4.6rem;
|
top: 4.6rem;
|
||||||
right: 3.5rem;
|
left: -19rem;
|
||||||
}
|
}
|
||||||
.token-hud-ext.soins {
|
.token-hud-ext.soins {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"id": "foundryvtt-reve-de-dragon",
|
"id": "foundryvtt-reve-de-dragon",
|
||||||
"title": "Rêve de Dragon",
|
"title": "Rêve de Dragon",
|
||||||
"version": "12.0.5",
|
"version": "12.0.8",
|
||||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-12.0.5.zip",
|
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-12.0.8.zip",
|
||||||
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v11/system.json",
|
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/v11/system.json",
|
||||||
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md",
|
"changelog": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/raw/branch/v11/changelog.md",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<span class="competence-value">{{plusMoins arme.system.niveau}}</span>
|
<span class="competence-value">{{plusMoins arme.system.niveau}}</span>
|
||||||
<span class="competence-value">{{plusMoins arme.system.dommagesReels}}</span>
|
<span class="competence-value">{{plusMoins arme.system.dommagesReels}}</span>
|
||||||
<span class="competence-value"></span>
|
<span class="competence-value"></span>
|
||||||
<span class="initiative-value arme-initiative"><a data-tooltip="{{arme.name}}: initiative {{plusMoins arme.system.initiative}}">{{arme.system.initiative}}</a></span>
|
<span class="initiative-value arme-initiative"><a data-tooltip="{{arme.name}}: initiative {{arme.system.initiative}}">{{arme.system.initiative}}</a></span>
|
||||||
</li>
|
</li>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{#each esquives as |esq key|}}
|
{{#each esquives as |esq key|}}
|
||||||
|
@ -42,7 +42,8 @@
|
|||||||
<li class="competence-header flexrow">
|
<li class="competence-header flexrow">
|
||||||
<span class="flex-grow-2">Personnage</span>
|
<span class="flex-grow-2">Personnage</span>
|
||||||
<span class="flex-grow-2">Survies</span>
|
<span class="flex-grow-2">Survies</span>
|
||||||
<span class="flex-grow-1" data-tooltip="Ajustements à appliquer pour les personnages se reposant (par exemple, à cheval)">Ajustements</span>
|
<span class="flex-grow-1" data-tooltip="Ajustements à appliquer (par exemple, repos à cheval)">Ajustements</span>
|
||||||
|
<span class="flex-grow-1" data-tooltip="Total de fatigue pour le voyageur">Total</span>
|
||||||
</li>
|
</li>
|
||||||
{{#each playerActors as |selected|}}
|
{{#each playerActors as |selected|}}
|
||||||
{{>'systems/foundryvtt-reve-de-dragon/templates/voyage/fatigue-actor.hbs' voyageur=selected survies=@root.typeTerrain.survies}}
|
{{>'systems/foundryvtt-reve-de-dragon/templates/voyage/fatigue-actor.hbs' voyageur=selected survies=@root.typeTerrain.survies}}
|
||||||
|
@ -8,16 +8,13 @@
|
|||||||
</span>
|
</span>
|
||||||
<span class="flex-grow-2">
|
<span class="flex-grow-2">
|
||||||
<div class="flexcol ">
|
<div class="flexcol ">
|
||||||
<label class="voyage-liste-survies">
|
<label class="voyage-liste-survies">{{voyageur.survieCourante}}</label>
|
||||||
{{#each voyageur.competencesVoyage as |comp key|}}
|
|
||||||
{{#if (array-includes ../survies key)}}
|
|
||||||
{{key}} {{comp.system.niveau}},
|
|
||||||
{{/if}}
|
|
||||||
{{/each}}
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</span>
|
</span>
|
||||||
<span class="flex-grow-1">
|
<span class="flex-grow-1">
|
||||||
<input type="number" name="ajustement-fatigue" class="number-x2 ajustement-fatigue" data-dtype="Number" value="{{voyageur.ajustementFatigue}}" min="-6" max="6"/>
|
<input type="number" name="ajustement-fatigue" class="number-x2 ajustement-fatigue" data-dtype="Number" value="{{voyageur.ajustementFatigue}}" min="-6" max="6"/>
|
||||||
</span>
|
</span>
|
||||||
|
<span class="flex-grow-1">
|
||||||
|
<input type="number" name="total-fatigue" class="number-x2 total-fatigue" data-dtype="Number" value="1" min="0" max="24" disabled/>
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
Loading…
Reference in New Issue
Block a user