forked from public/foundryvtt-reve-de-dragon
Compare commits
12 Commits
foundryvtt
...
foundryvtt
Author | SHA1 | Date | |
---|---|---|---|
000c89b11a | |||
5d4a18aac5 | |||
34b5df637f | |||
22572ca98c | |||
a6a1c1009e | |||
288cf9162c | |||
4b1381e535 | |||
78336a3f45 | |||
3001ae44de | |||
a43ceb3188 | |||
9e95a44efd | |||
179ea0c85b |
14
changelog.md
14
changelog.md
@@ -1,5 +1,19 @@
|
||||
# v11.0
|
||||
|
||||
## v11.0.11 - Les bleus de Khrachtchoum le Problémeux
|
||||
- si le gardien configure le sommeil, les joueurs sont notifiés que chateau dormant vient de passer
|
||||
- possibilité de créer des armes et des compétences de créatures non-mortelles.
|
||||
|
||||
## v11.0.10 - Les Songes de Khrachtchoum le Problémeux
|
||||
- on peut de nouveau se déplacer dans les TMRs d'un clic sur la case à atteindre
|
||||
- Lire un livre depuis l'inventaire permet de nouveau de faire un jet de la tâche
|
||||
créée au lieu de créer toujours une nouvelle tâche
|
||||
- La sélection des TMR pour la création de signes draconiques ne cause plus d'erreurs
|
||||
- la récupération d'endurance en cas d'insomnie est limitée à la moitié
|
||||
- le résultat du sommeil lors d'un rêve de dragon à la première heure s'affiche normalement
|
||||
- lorsque le gardien gère la durée des nuits, en cas de rêve de dragon,
|
||||
les heures dormies sont déduites des heures restant à dormir
|
||||
|
||||
## v11.0.9 - Les Souvenirs de Khrachtchoum le Problémeux
|
||||
- mode de saisie de l'archétype en vue détaillée
|
||||
- création une nouvelle incarnation depuis l'archétype
|
||||
|
@@ -387,6 +387,14 @@ export class RdDActor extends RdDBaseActor {
|
||||
await this.distribuerStress('stress', consigne.stress.valeur, consigne.stress.motif);
|
||||
}
|
||||
await this.update({ 'system.sommeil': consigne.sommeil })
|
||||
const player = this.findPlayer();
|
||||
if (player) {
|
||||
ChatUtility.notifyUser(player.id, 'info', `Vous pouvez gérer la nuit de ${this.name}`);
|
||||
}
|
||||
}
|
||||
|
||||
findPlayer() {
|
||||
return game.users.players.find(player => player.active && player.character?.id == this.id);
|
||||
}
|
||||
|
||||
async onTimeChanging(oldTimestamp, newTimestamp) {
|
||||
@@ -621,21 +629,22 @@ export class RdDActor extends RdDBaseActor {
|
||||
whisper: ChatUtility.getWhisperRecipientsAndGMs(this.name),
|
||||
content: this.name + ': '
|
||||
};
|
||||
await this.recupereEndurance(message);
|
||||
if (this.system.sommeil?.insomnie || heures == 0) {
|
||||
const insomnie = this.system.sommeil?.insomnie || heures == 0;
|
||||
await this.recupereEndurance({ message: message, demi: insomnie });
|
||||
if (insomnie) {
|
||||
message.content += 'Vous ne trouvez pas le sommeil';
|
||||
}
|
||||
else {
|
||||
let jetsReve = [];
|
||||
let dormi = await this.dormirDesHeures(jetsReve, message, heures, options);
|
||||
message.content += `Vous dormez ${dormi.heures <= 1 ? 'une heure' : (dormi.heures + ' heures')}. `;
|
||||
if (jetsReve.length > 0) {
|
||||
message.content += `Vous récupérez ${jetsReve.filter(it => it >= 0).reduce(Misc.joining("+"))} Points de rêve. `;
|
||||
message.content += `Vous récupérez ${jetsReve.map(it => it < 0 ? '(dragon)' : it).reduce(Misc.joining("+"))} Points de rêve. `;
|
||||
}
|
||||
if (dormi.etat == 'eveil') {
|
||||
message.content += 'Vous êtes réveillé par un Rêve de Dragon.'
|
||||
await this.reveilReveDeDragon(message, dormi.heures);
|
||||
}
|
||||
options.chateauDormant = options.chateauDormant && dormi.heures >= heures;
|
||||
message.content += `Vous avez dormi ${dormi.heures <= 1 ? 'une heure' : (dormi.heures + ' heures')}. `;
|
||||
}
|
||||
|
||||
if (!options.grisReve) {
|
||||
@@ -649,6 +658,14 @@ export class RdDActor extends RdDBaseActor {
|
||||
}
|
||||
}
|
||||
|
||||
async reveilReveDeDragon(message, heures) {
|
||||
message.content += 'Vous êtes réveillé par un Rêve de Dragon.';
|
||||
const restant = Math.max(this.system.sommeil?.heures - heures, 0)
|
||||
if (restant > 0) {
|
||||
await this.update({ 'system.sommeil': { heures: restant } });
|
||||
}
|
||||
}
|
||||
|
||||
async dormirDesHeures(jetsReve, message, heures, options) {
|
||||
const dormi = { heures: 0, etat: 'dort' };
|
||||
for (; dormi.heures < heures && dormi.etat == 'dort'; dormi.heures++) {
|
||||
@@ -702,8 +719,13 @@ export class RdDActor extends RdDBaseActor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async recupereEndurance(message) {
|
||||
const manquant = this._computeEnduranceMax() - this.system.sante.endurance.value;
|
||||
async recupereEndurance({ message, demi }) {
|
||||
let max = this._computeEnduranceMax();
|
||||
if (demi) {
|
||||
max = Math.floor(max / 2);
|
||||
}
|
||||
const manquant = max - this.system.sante.endurance.value;
|
||||
|
||||
if (manquant > 0) {
|
||||
await this.santeIncDec("endurance", manquant);
|
||||
message.content += `Vous récuperez ${manquant} points d'endurance. `;
|
||||
@@ -1706,6 +1728,7 @@ export class RdDActor extends RdDBaseActor {
|
||||
await this.rollTache(tache.id);
|
||||
}
|
||||
}
|
||||
|
||||
async actionHerbe(item, onActionItem = async () => { }) {
|
||||
if (item.isHerbeAPotion()) {
|
||||
return DialogFabriquerPotion.create(this, item, onActionItem);
|
||||
|
@@ -119,7 +119,7 @@ export class RdDBaseActor extends Actor {
|
||||
}
|
||||
|
||||
listItems(type = undefined) { return (type ? this.itemTypes[type] : this.items); }
|
||||
filterItems(filter, type = undefined) { return type ? this.itemTypes[type]?.filter(filter) ?? [] : []; }
|
||||
filterItems(filter, type = undefined) { return (type ? this.itemTypes[type] : this.items)?.filter(filter) ?? []; }
|
||||
findItemLike(idOrName, type) {
|
||||
return this.getItem(idOrName, type)
|
||||
?? Misc.findFirstLike(idOrName, this.listItems(type), { description: Misc.typeName('Item', type) });
|
||||
|
@@ -111,7 +111,7 @@ export class DialogCreateSigneDraconique extends Dialog {
|
||||
|
||||
onSelectTmr(event) {
|
||||
const tmrName = this.html.find(event.currentTarget)?.data("tmr-name");
|
||||
const onTmr = this.tmrs.find(it => it.name == tmrName);
|
||||
const onTmr = this.dialogData.tmrs.find(it => it.name == tmrName);
|
||||
if (onTmr){
|
||||
onTmr.selected = event.currentTarget.checked;
|
||||
}
|
||||
|
@@ -675,7 +675,7 @@ export class RdDItem extends Item {
|
||||
_armeChatData() {
|
||||
return [
|
||||
`<b>Compétence</b>: ${this.system.competence}`,
|
||||
`<b>Dommages</b>: ${this.system.dommages}`,
|
||||
`<b>Dommages</b>: ${this.system.dommages} ${this.system.mortalite=='non-mortel'? '(Non mortel)':''}`,
|
||||
`<b>Force minimum</b>: ${this.system.force}`,
|
||||
`<b>Resistance</b>: ${this.system.resistance}`,
|
||||
...this._inventaireTemplateChatData()
|
||||
|
@@ -789,7 +789,6 @@ export class RdDCombat {
|
||||
let rollData = {
|
||||
passeArme: randomID(16),
|
||||
mortalite: arme?.system.mortalite,
|
||||
coupsNonMortels: false,
|
||||
competence: competence.clone(),
|
||||
surprise: this.attacker.getSurprise(true),
|
||||
surpriseDefenseur: this.defender.getSurprise(true),
|
||||
|
@@ -187,7 +187,7 @@ export class RdDRoll extends Dialog {
|
||||
console.log("RdDRollSelectDialog - Cout reve", ptreve);
|
||||
this.updateRollResult(html);
|
||||
});
|
||||
this.html.find("[name='coupsNonMortels']").change((event) => {
|
||||
this.html.find("[name='mortalite']").change((event) => {
|
||||
this.rollData.dmg.mortalite = event.currentTarget.checked ? "non-mortel" : "mortel";
|
||||
this.updateRollResult(html);
|
||||
});
|
||||
@@ -295,8 +295,7 @@ export class RdDRoll extends Dialog {
|
||||
|
||||
rollData.dmg = rollData.attackerRoll?.dmg ?? RdDBonus.dmg(rollData, this.actor.getBonusDegat())
|
||||
rollData.caracValue = parseInt(rollData.selectedCarac.value)
|
||||
rollData.mortalite = rollData.attackerRoll?.dmg.mortalite ?? rollData.dmg.mortalite ?? 'mortel';
|
||||
rollData.coupsNonMortels = (rollData.attackerRoll?.dmg.mortalite ?? rollData.dmg.mortalite) == 'non-mortel';
|
||||
rollData.mortalite = rollData.attackerRoll?.dmg.mortalite ?? rollData.dmg.mortalite ?? rollData.mortalite ?? 'mortel';
|
||||
rollData.use.appelAuMoral = this.actor.isPersonnage() && RdDCarac.isActionPhysique(rollData.selectedCarac);
|
||||
let dmgText = Misc.toSignedString(rollData.dmg.total);
|
||||
|
||||
@@ -319,7 +318,7 @@ export class RdDRoll extends Dialog {
|
||||
|
||||
// Mise à jour valeurs
|
||||
this.html.find(".dialog-roll-title").text(this._getTitle(rollData));
|
||||
this.html.find("[name='coupsNonMortels']").prop('checked', rollData.mortalite == 'non-mortel');
|
||||
this.html.find("[name='mortalite']").prop('checked', rollData.mortalite == 'non-mortel');
|
||||
this.html.find(".dmg-arme-actor").text(dmgText);
|
||||
this.html.find("div.placeholder-ajustements").empty().append(adjustements);
|
||||
this.html.find("div.placeholder-resolution").empty().append(resolutionTable)
|
||||
|
@@ -906,7 +906,7 @@ export class RdDTMRDialog extends Dialog {
|
||||
if (this.viewOnly) {
|
||||
return;
|
||||
}
|
||||
let clickOddq = RdDTMRDialog._computeEventOddq(event.data.originalEvent);
|
||||
let clickOddq = RdDTMRDialog._computeEventOddq(event.nativeEvent);
|
||||
await this._onClickTMRPos(clickOddq); // Vérifier l'état des compteurs reve/fatigue/vie
|
||||
}
|
||||
|
||||
|
@@ -180,24 +180,25 @@ export class RdDUtility {
|
||||
'systems/foundryvtt-reve-de-dragon/templates/item-queue-sheet.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/header-item.html',
|
||||
// partial enums
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-aspect-tarot.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-base-competence.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-caracteristiques.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categories.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-ingredient.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-parade.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-potion.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-queue.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-vehicule.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-competence.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-draconic.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-heures.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-initpremierround.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-mortalite.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-niveau-ethylisme.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-rarete.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-categorie-queue.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-draconic.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-type.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-periode.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-rarete.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-effet.html',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/enum-tmr-type.html',
|
||||
// Partials
|
||||
'systems/foundryvtt-reve-de-dragon/templates/tirage/liste-resultats-recherche.hbs',
|
||||
'systems/foundryvtt-reve-de-dragon/templates/time/horloge.hbs',
|
||||
|
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"id": "foundryvtt-reve-de-dragon",
|
||||
"title": "Rêve de Dragon",
|
||||
"version": "11.0.9",
|
||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-11.0.9.zip",
|
||||
"version": "11.0.11",
|
||||
"download": "https://www.uberwald.me/gitea/public/foundryvtt-reve-de-dragon/archive/foundryvtt-reve-de-dragon-11.0.11.zip",
|
||||
"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",
|
||||
"compatibility": {
|
||||
|
@@ -594,7 +594,8 @@
|
||||
"iscombat": false,
|
||||
"isnaturelle": true,
|
||||
"ispossession": false,
|
||||
"dommages": 0
|
||||
"dommages": 0,
|
||||
"mortalite": "mortel"
|
||||
},
|
||||
"empoignade": {
|
||||
"templates": ["description"],
|
||||
@@ -671,6 +672,7 @@
|
||||
"resistance": 0,
|
||||
"categorie_parade": "",
|
||||
"dommages": "0",
|
||||
"mortalite": "mortel",
|
||||
"penetration": 0,
|
||||
"force": "0",
|
||||
"competence": "",
|
||||
|
@@ -54,7 +54,7 @@
|
||||
<label>Empoignade</label>
|
||||
{{else}}
|
||||
<span>
|
||||
<input class="attribute-value" type="checkbox" name="coupsNonMortels" {{#unless (eq mortalite 'mortel')}}checked{{/unless}} />
|
||||
<input class="attribute-value" type="checkbox" name="motalite" {{#unless (eq mortalite 'mortel')}}checked{{/unless}} />
|
||||
<label class="dmg-arme-actor"></label>
|
||||
</span>
|
||||
{{/if}}
|
||||
|
3
templates/enum-mortalite.html
Normal file
3
templates/enum-mortalite.html
Normal file
@@ -0,0 +1,3 @@
|
||||
<option value="mortel">Mortel</option>
|
||||
<option value="non-mortel">Non mortel</option>
|
||||
<option value="empoignade">Empoignade</option>
|
@@ -37,6 +37,14 @@
|
||||
<label for="system.dommages">Dommages </label>
|
||||
<input class="attribute-value" type="text" name="system.dommages" value="{{system.dommages}}" data-dtype="String"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="system.mortalite">Mortalité</label>
|
||||
<select name="system.mortalite" data-dtype="String">
|
||||
{{#select system.mortalite}}
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-mortalite.html"}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="system.resistance">Résistance </label>
|
||||
<input class="attribute-value" type="text" name="system.resistance" value="{{system.resistance}}" data-dtype="Number"/>
|
||||
|
@@ -27,6 +27,14 @@
|
||||
<label for="niveau">Dommages (+dom)</label>
|
||||
<input class="attribute-value" type="text" name="system.dommages" value="{{system.dommages}}" data-dtype="Number"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="system.mortalite">Mortalité</label>
|
||||
<select name="system.mortalite" data-dtype="String">
|
||||
{{#select system.mortalite}}
|
||||
{{>"systems/foundryvtt-reve-de-dragon/templates/enum-mortalite.html"}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if isparade}}
|
||||
<div class="form-group">
|
||||
|
Reference in New Issue
Block a user