Merge pull request 'v13 - Item munition et corrections' (#749) from VincentVk/foundryvtt-reve-de-dragon:v13 into v13
Reviewed-on: #749
This commit is contained in:
commit
01cf47ad55
@ -1,4 +1,8 @@
|
||||
# 12.0
|
||||
## 12.0.41 - La loupe d'Astrobazzarh
|
||||
- On peut de nouveau effectuer des tirages cachés
|
||||
- Le stress transformé est bien diminué lorsqu'on met le stress dans une compétence
|
||||
|
||||
## 12.0.40 - Les mains d'Astrobazzarh
|
||||
- correction des attaques particulières en combat
|
||||
- correction de message sur les min/max liés aux modificateurs de races (s'applique uniquement sur la taille)
|
||||
|
@ -237,7 +237,11 @@ export class RdDActorSheet extends RdDBaseActorSangSheet {
|
||||
|
||||
this.html.find('.carac-xp-augmenter').click(async event => await this.actor.updateCaracXPAuto(event.currentTarget.name.replace("augmenter.", "")))
|
||||
this.html.find('.competence-xp-augmenter').click(async event => await this.actor.updateCompetenceXPAuto(RdDSheetUtility.getItemId(event)))
|
||||
this.html.find('.competence-stress-augmenter').click(async event => await this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event)))
|
||||
this.html.find('.competence-stress-augmenter').click(async event =>{
|
||||
await this.actor.updateCompetenceStress(RdDSheetUtility.getItemId(event))
|
||||
this.render(true)
|
||||
}
|
||||
)
|
||||
|
||||
if (this.options.vueDetaillee) {
|
||||
// On carac change
|
||||
|
@ -736,7 +736,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
await competence.update({
|
||||
"system.xp": toXp,
|
||||
"system.niveau": toNiveau,
|
||||
});
|
||||
}, { render: false })
|
||||
await ExperienceLog.add(this, XP_TOPIC.XP, fromXp, toXp, competence.name);
|
||||
await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name);
|
||||
}
|
||||
@ -767,7 +767,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
await competence.update({
|
||||
"system.xp": newXp,
|
||||
"system.niveau": toNiveau,
|
||||
});
|
||||
}, { render: false })
|
||||
const toXpStress = Math.max(0, fromXpStress - xpUtilise);
|
||||
await this.update({ "system.compteurs.experience.value": toXpStress });
|
||||
|
||||
@ -783,7 +783,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
const toNiveau = compValue ?? RdDItemCompetence.getNiveauBase(competence.system.categorie, competence.getCategories());
|
||||
this.notifyCompetencesTronc(competence, toNiveau);
|
||||
const fromNiveau = competence.system.niveau;
|
||||
await competence.update({ 'system.niveau': toNiveau });
|
||||
await competence.update({ 'system.niveau': toNiveau }, { render: false })
|
||||
await ExperienceLog.add(this, XP_TOPIC.NIVEAU, fromNiveau, toNiveau, competence.name, true);
|
||||
}
|
||||
}
|
||||
@ -808,7 +808,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
if (isNaN(toXp) || typeof (toXp) != 'number') toXp = 0;
|
||||
const fromXp = competence.system.xp;
|
||||
this.checkCompetenceXP(idOrName, toXp);
|
||||
await competence.update({ 'system.xp': toXp });
|
||||
await competence.update({ 'system.xp': toXp }, { render: false })
|
||||
await ExperienceLog.add(this, XP_TOPIC.XP, fromXp, toXp, competence.name, true);
|
||||
if (toXp > fromXp) {
|
||||
RdDUtility.checkThanatosXP(competence)
|
||||
@ -822,7 +822,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
if (competence) {
|
||||
if (isNaN(toXpSort) || typeof (toXpSort) != 'number') toXpSort = 0;
|
||||
const fromXpSort = competence.system.xp_sort;
|
||||
await competence.update({ 'system.xp_sort': toXpSort });
|
||||
await competence.update({ 'system.xp_sort': toXpSort }, { render: false })
|
||||
await ExperienceLog.add(this, XP_TOPIC.XPSORT, fromXpSort, toXpSort, competence.name, true);
|
||||
if (toXpSort > fromXpSort) {
|
||||
RdDUtility.checkThanatosXP(competence)
|
||||
@ -834,7 +834,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
async updateCompetenceArchetype(idOrName, compValue) {
|
||||
let competence = this.getCompetence(idOrName)
|
||||
if (competence) {
|
||||
await competence.update({ 'system.niveau_archetype': Math.max(compValue ?? 0, 0) });
|
||||
await competence.update({ 'system.niveau_archetype': Math.max(compValue ?? 0, 0) })
|
||||
}
|
||||
}
|
||||
|
||||
@ -1560,7 +1560,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
if (!rollData.rolled.isPart ||
|
||||
rollData.finalLevel >= 0 ||
|
||||
game.settings.get("core", "rollMode") == 'selfroll' ||
|
||||
!Misc.hasConnectedGM()) {
|
||||
!Misc.hasConnectedGM()) {
|
||||
return
|
||||
}
|
||||
hideChatMessage = hideChatMessage == 'hide' || (Misc.isRollModeHiddenToPlayer() && !game.user.isGM)
|
||||
@ -1584,7 +1584,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _appliquerAppelMoral(rollData) {
|
||||
if (!rollData.use.moral || game.settings.get("core", "rollMode") == 'selfroll'){
|
||||
if (!rollData.use.moral || game.settings.get("core", "rollMode") == 'selfroll') {
|
||||
return
|
||||
}
|
||||
if (rollData.rolled.isEchec ||
|
||||
@ -1869,7 +1869,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
competence: competence,
|
||||
show: { title: options?.title ?? '' }
|
||||
},
|
||||
// TODO:
|
||||
// TODO:
|
||||
callbacks: [{ action: r => this.$onRollCompetence(r, options) }]
|
||||
});
|
||||
}
|
||||
@ -1882,7 +1882,7 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
compData.system.defaut_carac = tacheData.system.carac; // Patch !
|
||||
|
||||
await this.openRollDialog({
|
||||
name: 'jet-competence',
|
||||
name: 'jet-competence',
|
||||
label: 'Jet de Tâche ' + tacheData.name,
|
||||
template: 'systems/foundryvtt-reve-de-dragon/templates/dialog-roll-competence.hbs',
|
||||
rollData: {
|
||||
@ -1945,9 +1945,9 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
}
|
||||
|
||||
await this.openRollDialog({
|
||||
name: `jet-${artData.art}`,
|
||||
name: `jet-${artData.art}`,
|
||||
label: `${artData.verbe} ${oeuvre.name}`,
|
||||
template: `systems/foundryvtt-reve-de-dragon/templates/dialog-roll-${oeuvre.type}.hbs`,
|
||||
template: `systems/foundryvtt-reve-de-dragon/templates/dialog-roll-${oeuvre.type}.hbs`,
|
||||
rollData: artData,
|
||||
callbacks: [{ action: callbackAction }],
|
||||
})
|
||||
@ -2527,7 +2527,6 @@ export class RdDActor extends RdDBaseActorSang {
|
||||
})
|
||||
}
|
||||
const blessure = this.getItem(blessureId, 'blessure')
|
||||
console.log('TODO update blessure', this, blessureId, rollData, rollData.tache);
|
||||
if (blessure && !blessure.system.premierssoins.done) {
|
||||
const tache = rollData.tache;
|
||||
if (rollData.rolled.isETotal) {
|
||||
|
@ -244,16 +244,19 @@ export class RdDBaseActor extends Actor {
|
||||
async onUpdateActor(update, options, actorId) { }
|
||||
async onDeleteItem(item, options, id) {
|
||||
if (item.isInventaire()) {
|
||||
this._removeItemFromConteneur(item)
|
||||
await this._removeItemFromConteneur(item)
|
||||
}
|
||||
}
|
||||
|
||||
_removeItemFromConteneur(item) {
|
||||
this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id))
|
||||
.forEach(conteneur => {
|
||||
const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id);
|
||||
conteneur.update({ 'system.contenu': nouveauContenu });
|
||||
});
|
||||
async _removeItemFromConteneur(item) {
|
||||
const updates = this.items.filter(it => it.isConteneur() && it.system.contenu.includes(item.id))
|
||||
.map(conteneur => {
|
||||
const nouveauContenu = conteneur.system.contenu.filter(id => id != item.id)
|
||||
return { _id: conteneur.id, 'system.contenu': nouveauContenu }
|
||||
})
|
||||
if (updates.length > 0) {
|
||||
await this.updateEmbeddedDocuments('Item', updates)
|
||||
}
|
||||
}
|
||||
|
||||
async onTimeChanging(oldTimestamp, newTimestamp) {
|
||||
|
@ -1,2 +1,4 @@
|
||||
export { default as RdDItemBaseSheet} from "./common-item-sheet.mjs"
|
||||
export { default as RdDMonnaieSheet } from "./monnaie-sheet.mjs"
|
||||
export { default as RdDMunitionSheet } from "./munition-sheet.mjs"
|
||||
|
||||
|
@ -13,15 +13,10 @@ export default class RdDMonnaieSheet extends RdDItemBaseSheet {
|
||||
RdDItemBaseSheet.DEFAULT_OPTIONS,
|
||||
{
|
||||
classes: ["fvtt-rdd", "item", "monnaie"],
|
||||
position: {
|
||||
width: 400,
|
||||
},
|
||||
window: {
|
||||
contentClasses: ["monnaie-content"],
|
||||
}
|
||||
position: { width: 400 },
|
||||
window: { contentClasses: ["monnaie-content"] }
|
||||
})
|
||||
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
|
34
module/applications/sheets/munition-sheet.mjs
Normal file
34
module/applications/sheets/munition-sheet.mjs
Normal file
@ -0,0 +1,34 @@
|
||||
import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../../common/_module.mjs";
|
||||
import { ITEM_TYPES } from "../../constants.js";
|
||||
import RdDItemBaseSheet from "./common-item-sheet.mjs";
|
||||
|
||||
export default class RdDMunitionSheet extends RdDItemBaseSheet {
|
||||
/** @override */
|
||||
static get ITEM_TYPE() { return ITEM_TYPES.munition }
|
||||
static get TEMPLATES() { return [TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE] }
|
||||
|
||||
/** @override */
|
||||
static DEFAULT_OPTIONS = Object.assign({},
|
||||
RdDItemBaseSheet.DEFAULT_OPTIONS,
|
||||
{
|
||||
classes: ["fvtt-rdd", "item", "munition"],
|
||||
position: { width: 400 },
|
||||
window: { contentClasses: ["munition-content"] }
|
||||
})
|
||||
|
||||
/** @override */
|
||||
static PARTS = {
|
||||
main: {
|
||||
template: "systems/foundryvtt-reve-de-dragon/templates/sheets/item/munition.hbs",
|
||||
},
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async _prepareContext() {
|
||||
return Object.assign(
|
||||
await super._prepareContext(),
|
||||
await TEMPLATE_DESCRIPTION.prepareContext(this.document),
|
||||
await TEMPLATE_INVENTAIRE.prepareContext(this.document)
|
||||
)
|
||||
}
|
||||
}
|
@ -62,7 +62,6 @@ export class ChatUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
static removeMessages(socketData) {
|
||||
if (Misc.isFirstConnectedGM()) {
|
||||
ChatUtility.onRemoveMessages(socketData);
|
||||
@ -97,7 +96,7 @@ export class ChatUtility {
|
||||
}
|
||||
break
|
||||
case "gmroll":
|
||||
messageData.whisper = ChatUtility.getOwners(actor)
|
||||
messageData.whisper = actor ? ChatUtility.getOwners(actor) : ChatUtility.getUserAndGMs()
|
||||
break
|
||||
case "selfroll":
|
||||
messageData.whisper = [game.user]
|
||||
@ -108,7 +107,7 @@ export class ChatUtility {
|
||||
}
|
||||
|
||||
static getOwners(document) {
|
||||
return game.users.filter(it => document.getUserLevel(it) == CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER)
|
||||
return document ? game.users.filter(it => document.getUserLevel(it) == CONST.DOCUMENT_OWNERSHIP_LEVELS.OWNER) : [game.user]
|
||||
}
|
||||
|
||||
static getUserAndGMs() {
|
||||
@ -199,7 +198,7 @@ export class ChatUtility {
|
||||
static async onCreateChatMessage(chatMessage, options, id) {
|
||||
if (chatMessage.isAuthor) {
|
||||
await chatMessage.setFlag(SYSTEM_RDD, 'rdd-timestamp', game.system.rdd.calendrier.getTimestamp());
|
||||
await chatMessage.update({ content: await RdDTextEditor.enrichHTML(chatMessage.content, undefined, {showLink:false}) })
|
||||
await chatMessage.update({ content: await RdDTextEditor.enrichHTML(chatMessage.content, undefined, { showLink: false }) })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
7
module/documents/munition.mjs
Normal file
7
module/documents/munition.mjs
Normal file
@ -0,0 +1,7 @@
|
||||
import { RdDItem } from "../item.js";
|
||||
|
||||
export default class RdDItemMunition extends RdDItem {
|
||||
static get defaultIcon() {
|
||||
return 'systems/foundryvtt-reve-de-dragon/icons/objets/fleche.webp'
|
||||
}
|
||||
}
|
@ -1 +1,2 @@
|
||||
export { default as RdDModelMonnaie } from "./monnaie.mjs"
|
||||
export { default as RdDModelMunition } from "./munition.mjs"
|
||||
|
10
module/models/munition.mjs
Normal file
10
module/models/munition.mjs
Normal file
@ -0,0 +1,10 @@
|
||||
import { TEMPLATE_DESCRIPTION, TEMPLATE_INVENTAIRE } from "../common/_module.mjs";
|
||||
|
||||
export default class RdDModelMunition extends foundry.abstract.TypeDataModel {
|
||||
static defineSchema() {
|
||||
return Object.assign({},
|
||||
TEMPLATE_DESCRIPTION.fields(),
|
||||
TEMPLATE_INVENTAIRE.fields()
|
||||
)
|
||||
}
|
||||
}
|
@ -105,6 +105,7 @@ export class SystemReveDeDragon {
|
||||
this.RdDStatBlockParser = RdDStatBlockParser
|
||||
this.itemClasses = {
|
||||
monnaie: items.RdDModelMonnaie,
|
||||
munition: items.RdDModelMunition,
|
||||
armure: RdDItemArmure,
|
||||
blessure: RdDItemBlessure,
|
||||
gemme: RdDItemGemme,
|
||||
@ -185,6 +186,7 @@ export class SystemReveDeDragon {
|
||||
CONFIG.Item.documentClass = RdDItem
|
||||
CONFIG.Item.dataModels = {
|
||||
monnaie: models.RdDModelMonnaie,
|
||||
munition: models.RdDModelMunition,
|
||||
}
|
||||
CONFIG.RDD = {
|
||||
resolutionTable: RdDResolutionTable.resolutionTable,
|
||||
@ -206,17 +208,16 @@ export class SystemReveDeDragon {
|
||||
|
||||
Items.registerSheet(SYSTEM_RDD, RdDItemInventaireSheet, {
|
||||
types: [
|
||||
"objet", "arme", "armure", "livre", "munition", "nourritureboisson",
|
||||
"objet", "arme", "armure", "livre", "nourritureboisson",
|
||||
],
|
||||
makeDefault: true
|
||||
})
|
||||
|
||||
sheets.RdDItemBaseSheet.registerAll(
|
||||
sheets.RdDMonnaieSheet
|
||||
sheets.RdDMonnaieSheet,
|
||||
sheets.RdDMunitionSheet
|
||||
)
|
||||
|
||||
// ,
|
||||
// sheets.RdDMunitionSheet
|
||||
Items.registerSheet(SYSTEM_RDD, RdDItemSheetV1, {
|
||||
types: [
|
||||
"competence", "competencecreature",
|
||||
|
@ -750,9 +750,6 @@
|
||||
"inertie": 0,
|
||||
"enchantabilite": 0
|
||||
},
|
||||
"munition": {
|
||||
"templates": ["description", "inventaire"]
|
||||
},
|
||||
"nourritureboisson": {
|
||||
"templates": ["description", "inventaire", "comestible"],
|
||||
"cuisinier": "",
|
||||
|
@ -1,15 +1,18 @@
|
||||
<div>
|
||||
<ul class="item-list">
|
||||
<li class="item flexrow">
|
||||
<li class="flexrow">
|
||||
<label class="derivee-label" for="system.compteurs.experience.value">Stress transformé</label>
|
||||
{{#if options.vueDetaillee}}
|
||||
<input class="derivee-value" type="number" name="system.compteurs.experience.value" value="{{system.compteurs.experience.value}}" data-dtype="number" size="3"/>
|
||||
<input class="resource-content"
|
||||
type="text" data-dtype="Number" size="3"
|
||||
name="system.compteurs.experience.value"
|
||||
value="{{system.compteurs.experience.value}}"/>
|
||||
{{else}}
|
||||
<label name="system.compteurs.experience.value">{{system.compteurs.experience.value}}</label>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{#if options.vueDetaillee}}
|
||||
<li class="item flexrow">
|
||||
<li class="flexrow">
|
||||
<span class="generic-label">Total XP compétences</span>
|
||||
<span class="competence-value">{{calc.competenceXPTotal}}</span>
|
||||
</li>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<hr>
|
||||
<div>
|
||||
{{#if rolled.isSuccess}}
|
||||
{{alias}} a gagné {{xpSort}} points d'expérience en sorts dans la {{competence.name}}.
|
||||
{{alias}} a gagné {{xpSort}} points d'expérience en sorts en {{competence.name}}.
|
||||
{{else}}
|
||||
{{alias}} n'a pas pu interpréter le signe draconique.
|
||||
{{/if}}
|
||||
|
14
templates/item/munition.hbs
Normal file
14
templates/item/munition.hbs
Normal file
@ -0,0 +1,14 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/header-item.hbs"}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="informations">Informations</a>
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/item/partial-tab-environnement.hbs"}}
|
||||
</nav>
|
||||
<section class="sheet-body">
|
||||
<div class="tab items flexcol" data-group="primary" data-tab="informations">
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/item/partial-inventaire.hbs"}}
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/partial-item-description.hbs"}}
|
||||
</div>
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/item/partial-environnement.hbs"}}
|
||||
</section>
|
||||
</form>
|
@ -1,5 +1,5 @@
|
||||
<header class="sheet-header">
|
||||
<img class="profile-img" src="{{item.img}}" data-edit="img" data-tooltip="{{item.name}}"/>
|
||||
<img class="profile-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}"/>
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{item.name}}" placeholder="Name"/></h1>
|
||||
</div>
|
||||
|
@ -2,5 +2,16 @@
|
||||
{{formField systemFields.qualite value=system.qualite}}
|
||||
{{formField systemFields.encombrement value=system.encombrement}}
|
||||
{{formField systemFields.quantite value=system.quantite}}
|
||||
{{formField systemFields.cout value=system.cout}}
|
||||
|
||||
<div class="form-group item-cout">
|
||||
<label>Prix (sols)</label>
|
||||
<div class="form-fields">
|
||||
<input class="attribute-value number-x3 {{#if (and (eq item.type 'monnaie') (eq system.cout 0))}} field-error{{/if}}"
|
||||
type="number" data-dtype="Number"
|
||||
name="system.cout"
|
||||
value="{{numberFormat system.cout decimals=2 sign=false}}"
|
||||
{{#unless (isFieldInventaireModifiable type 'cout')}}disabled{{/unless}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<section>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/header.hbs"}}
|
||||
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-inventaire.hbs"}}
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-description.hbs"}}
|
||||
</section>
|
||||
|
5
templates/sheets/item/munition.hbs
Normal file
5
templates/sheets/item/munition.hbs
Normal file
@ -0,0 +1,5 @@
|
||||
<section>
|
||||
{{> "systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/header.hbs"}}
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-inventaire.hbs"}}
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/sheets/item/common/template-description.hbs"}}
|
||||
</section>
|
Loading…
x
Reference in New Issue
Block a user