Arme à distance

This commit is contained in:
LeRatierBretonnien 2024-07-10 22:59:38 +02:00
parent 37d8957448
commit 9c93134d1c
24 changed files with 88 additions and 243 deletions

View File

@ -209,6 +209,7 @@ export class TeDeumActor extends Actor {
for (let key in combatLoc) {
combatLoc[key] = foundry.utils.mergeObject(combatLoc[key], game.system.tedeum.config.LOCALISATION[key])
combatLoc[key].armures = []
combatLoc[key].blessures = []
combatLoc[key].protectionTotal = 0
let armures = this.getArmures()
for (let armure of armures) {
@ -217,6 +218,12 @@ export class TeDeumActor extends Actor {
combatLoc[key].protectionTotal += armure.system.protection
}
}
let blessures = this.getBlessures()
for (let blessure of blessures) {
if (blessure.system.localisation == key) {
combatLoc[key].blessures.push(blessure)
}
}
let endurance = this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "endurance")
combatLoc[key].endurance = endurance.system.score + game.system.tedeum.config.LOCALISATION[key].locMod
combatLoc[key].touche = combatLoc[key].endurance + combatLoc[key].protectionTotal
@ -272,24 +279,8 @@ export class TeDeumActor extends Actor {
/* -------------------------------------------- */
async equipItem(itemId) {
let item = this.items.find(item => item.id == itemId)
if (item?.system) {
if (item.type == "armure") {
let armor = this.items.find(item => item.id != itemId && item.type == "armor" && item.system.equipped)
if (armor) {
ui.notifications.warn("You already have an armor equipped!")
return
}
}
if (item.type == "shield") {
let shield = this.items.find(item => item.id != itemId && item.type == "shield" && item.system.equipped)
if (shield) {
ui.notifications.warn("You already have a shield equipped!")
return
}
}
let update = { _id: item.id, "system.equipped": !item.system.equipped };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
let update = { _id: item.id, "system.equipe": !item.system.equipe };
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
}
/* ------------------------------------------- */

View File

@ -31,7 +31,6 @@ export const TEDEUM_CONFIG = {
"coupassomant": { label: "Coup assomant", id: "coupassomant", melee: true, tir: false},
"peutlancer": { label: "Peut être lancée", id: "peutlancer", melee: true, tir: false},
"pasboutportant": { label: "Inutilisable à bout portant", id: "pasboutportant", melee: false, tir: true},
"rechargearquebusade": { label: "Retrancher l'Arquebusade au temps de recharge", id: "rechargearquebusade", melee: false, tir: true },
"mitraille": { label: "Mitraille", id: "mitraille", melee: false, tir: true },
"degatscharge": { label: "Dégâts accrus à la charge", id: "degatscharge", melee: true, tir: false },
"crochecavalier": { label: "Croche-cavalier", id: "crochecavalier", melee: true, tir: false },
@ -117,14 +116,19 @@ export const TEDEUM_CONFIG = {
archerie: { label: "Archerie", value: "archerie" },
arquebusade: { label: "Arquebusade", value: "arquebusade" }
},
competencesRecharge: {
aucune: { label: "Aucune", value: "aucune" },
archerie: { label: "Archerie", value: "archerie" },
arquebusade: { label: "Arquebusade", value: "arquebusade" }
},
difficulte: {
routine: { label: "Routine", value: 3 },
facile: { label: "Facile", value: 5 },
pardefaut: { label: "Par Défaut", value: 7 },
malaise: { label: "Malaisé", value: 9 },
difficile: { label: "Difficile", value: 11 },
perilleux: { label: "Perilleux", value: 13 },
desespere: { label: "Désespéré", value: 15 }
routine: { label: "Routine", key: "routine", value: 3 },
facile: { label: "Facile", key: "facile",value: 5 },
pardefaut: { label: "Par Défaut", key: "pardefaut", value: 7 },
malaise: { label: "Malaisé", key: "malaise", value: 9 },
difficile: { label: "Difficile", key: "difficile", value: 11 },
perilleux: { label: "Perilleux", key: "perilleux", value: 13 },
desespere: { label: "Désespéré", key: "desespere", value: 15 }
},
monnaie: {
denier: { label: "Deniers", id: "denier", value: 1 },

View File

@ -392,7 +392,7 @@ export class TeDeumUtility {
let actor = game.actors.get(rollData.actorId)
// Fix difficulty
if (!rollData.difficulty || rollData.difficulty == "-") {
rollData.difficulty = 7
rollData.difficulty = "pardefaut"
}
rollData.difficulty = game.system.tedeum.config.difficulte[rollData.difficulty].value
let diceFormula = this.computeRollFormula(rollData, actor)

View File

@ -34,6 +34,7 @@ export class TeDeumArmeSchema extends foundry.abstract.TypeDataModel {
});
schema.tempsRecharge = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 });
schema.competenceRecharge = new fields.StringField({ required: false, choices:["aucune", "archerie", "arquebusade"], initial: "aucune", blank: true });
schema.valeurEchecCritique = new fields.NumberField({ ...requiredInteger, initial: 1, min: 1 });
schema.initiativeBonus = new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 });

View File

@ -1 +1 @@
MANIFEST-000146
MANIFEST-000150

View File

@ -1,8 +1,8 @@
2024/07/07-21:34:33.552483 7fdbf4c006c0 Recovering log #144
2024/07/07-21:34:33.562583 7fdbf4c006c0 Delete type=3 #142
2024/07/07-21:34:33.562681 7fdbf4c006c0 Delete type=0 #144
2024/07/08-07:54:26.000826 7fdbefe006c0 Level-0 table #149: started
2024/07/08-07:54:26.000937 7fdbefe006c0 Level-0 table #149: 0 bytes OK
2024/07/08-07:54:26.043881 7fdbefe006c0 Delete type=0 #147
2024/07/08-07:54:26.179609 7fdbefe006c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/07/08-07:54:26.179705 7fdbefe006c0 Manual compaction at level-1 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/07/08-23:17:26.473944 7f0c0e0006c0 Recovering log #148
2024/07/08-23:17:26.485257 7f0c0e0006c0 Delete type=3 #146
2024/07/08-23:17:26.485363 7f0c0e0006c0 Delete type=0 #148
2024/07/09-07:41:46.369958 7f0c07e006c0 Level-0 table #153: started
2024/07/09-07:41:46.369997 7f0c07e006c0 Level-0 table #153: 0 bytes OK
2024/07/09-07:41:46.376145 7f0c07e006c0 Delete type=0 #151
2024/07/09-07:41:46.376375 7f0c07e006c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/07/09-07:41:46.387648 7f0c07e006c0 Manual compaction at level-1 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/07/07-13:46:28.434141 7fdbf6a006c0 Recovering log #140
2024/07/07-13:46:28.444184 7fdbf6a006c0 Delete type=3 #138
2024/07/07-13:46:28.444239 7fdbf6a006c0 Delete type=0 #140
2024/07/07-16:48:21.944701 7fdbefe006c0 Level-0 table #145: started
2024/07/07-16:48:21.944735 7fdbefe006c0 Level-0 table #145: 0 bytes OK
2024/07/07-16:48:21.951284 7fdbefe006c0 Delete type=0 #143
2024/07/07-16:48:21.964341 7fdbefe006c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/07/07-16:48:21.975753 7fdbefe006c0 Manual compaction at level-1 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/07/07-21:34:33.552483 7fdbf4c006c0 Recovering log #144
2024/07/07-21:34:33.562583 7fdbf4c006c0 Delete type=3 #142
2024/07/07-21:34:33.562681 7fdbf4c006c0 Delete type=0 #144
2024/07/08-07:54:26.000826 7fdbefe006c0 Level-0 table #149: started
2024/07/08-07:54:26.000937 7fdbefe006c0 Level-0 table #149: 0 bytes OK
2024/07/08-07:54:26.043881 7fdbefe006c0 Delete type=0 #147
2024/07/08-07:54:26.179609 7fdbefe006c0 Manual compaction at level-0 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)
2024/07/08-07:54:26.179705 7fdbefe006c0 Manual compaction at level-1 from '!folders!4OPhigzcPv46qbWW' @ 72057594037927935 : 1 .. '!items!zwC0H39ar5Pl1l92' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000206
MANIFEST-000210

View File

@ -1,7 +1,7 @@
2024/07/07-21:34:33.538979 7fdbf60006c0 Recovering log #204
2024/07/07-21:34:33.549574 7fdbf60006c0 Delete type=3 #202
2024/07/07-21:34:33.549666 7fdbf60006c0 Delete type=0 #204
2024/07/08-07:54:26.137628 7fdbefe006c0 Level-0 table #209: started
2024/07/08-07:54:26.137703 7fdbefe006c0 Level-0 table #209: 0 bytes OK
2024/07/08-07:54:26.179305 7fdbefe006c0 Delete type=0 #207
2024/07/08-07:54:26.179685 7fdbefe006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
2024/07/08-23:17:26.460912 7f0c0ea006c0 Recovering log #208
2024/07/08-23:17:26.470623 7f0c0ea006c0 Delete type=3 #206
2024/07/08-23:17:26.470703 7f0c0ea006c0 Delete type=0 #208
2024/07/09-07:41:46.363059 7f0c07e006c0 Level-0 table #213: started
2024/07/09-07:41:46.363133 7f0c07e006c0 Level-0 table #213: 0 bytes OK
2024/07/09-07:41:46.369813 7f0c07e006c0 Delete type=0 #211
2024/07/09-07:41:46.376359 7f0c07e006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/07/07-13:46:28.422245 7fdbf56006c0 Recovering log #200
2024/07/07-13:46:28.431962 7fdbf56006c0 Delete type=3 #198
2024/07/07-13:46:28.432013 7fdbf56006c0 Delete type=0 #200
2024/07/07-16:48:21.951406 7fdbefe006c0 Level-0 table #205: started
2024/07/07-16:48:21.951432 7fdbefe006c0 Level-0 table #205: 0 bytes OK
2024/07/07-16:48:21.957697 7fdbefe006c0 Delete type=0 #203
2024/07/07-16:48:21.964354 7fdbefe006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
2024/07/07-21:34:33.538979 7fdbf60006c0 Recovering log #204
2024/07/07-21:34:33.549574 7fdbf60006c0 Delete type=3 #202
2024/07/07-21:34:33.549666 7fdbf60006c0 Delete type=0 #204
2024/07/08-07:54:26.137628 7fdbefe006c0 Level-0 table #209: started
2024/07/08-07:54:26.137703 7fdbefe006c0 Level-0 table #209: 0 bytes OK
2024/07/08-07:54:26.179305 7fdbefe006c0 Delete type=0 #207
2024/07/08-07:54:26.179685 7fdbefe006c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)

Binary file not shown.

Binary file not shown.

View File

@ -1084,8 +1084,8 @@ ul, li {
flex-shrink: 7;
}
.item-controls-fixed {
min-width: 2rem;
max-width: 2rem;
min-width: 2.8rem;
max-width: 2.8rem;
}
.item-controls-fixed-full {
min-width: 3rem;

View File

@ -62,8 +62,8 @@
},
"title": "Te Deum pour Un Massacre, le Jeu de Rôles",
"url": "https://www.uberwald.me/gitea/public/fvtt-te-deum",
"version": "12.0.1",
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/archive/fvtt-te-deum-v12.0.1.zip",
"version": "12.0.2",
"download": "https://www.uberwald.me/gitea/public/fvtt-te-deum/archive/fvtt-te-deum-v12.0.2.zip",
"background": "",
"flags": {
"hotReload": {
@ -80,4 +80,4 @@
]
}
}
}
}

View File

@ -245,7 +245,10 @@
<span class="item-field-label-medium">{{arme.system.degats}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<div class="item-controls item-controls-fixed-full">
<a class="item-control item-equip" title="Equiper" {{#unless arme.system.equipe}}style="color:gray;"{{/unless}}>
<i class="fas fa-shield-alt"></i>
</a>
<a class="item-control item-edit" title="Editer"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'arme"><i class="fas fa-trash"></i></a>
</div>
@ -268,7 +271,10 @@
</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<div class="item-controls item-controls-fixed-full">
<a class="item-control item-equip" title="Equiper" {{#unless armure.system.equipe}}style="color:gray;"{{/unless}}>
<i class="fas fa-shield-alt"></i>
</a>
<a class="item-control item-edit" title="Editer l'armure"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Supprimer l'armure"><i class="fas fa-trash"></i></a>
</div>
@ -290,7 +296,10 @@
<span>{{armure.name}} ({{armure.system.protection}})</span>
{{/each}}
<span>Touché : {{touche}}</span>
<span>Blessures : {{blessuresTete}}</span>
<span>Blessures : </span>
{{#each loc.blessures as |blessure idx| }}
<span>{{blessure.name}} ({{blessure.malus}})</span>
{{/each}}
</div>
</div>
{{/each}}

View File

@ -1,140 +0,0 @@
<form class="confrontation-roll-dialog">
<header class="roll-dialog-header">
{{#if img}}
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
{{/if}}
<h1 class="dialog-roll-title roll-dialog-header">{{title}} ({{skill.value}})</h1>
</header>
<div class="flexcol">
<div class="flexrow">
<div>
<h3>{{localize "ECRY.ui.execution"}} : <span id="execution-total">{{executionTotal}}</span> </h3>
<div id="confront-execution" class="flexrow confront-area confront-execution-area">
{{> systems/fvtt-ecryme/templates/dialogs/partial-confront-dice-area.hbs filter="execution"}}
{{> systems/fvtt-ecryme/templates/dialogs/partial-confront-bonus-area.hbs filter="execution"}}
</div>
</div>
<div>
<h3>{{localize "ECRY.ui.preservation"}} : <span id="preservation-total">{{preservationTotal}}</span></h3>
<div id="confront-preservation" class="flexrow confront-area confront-preservation-area">
{{> systems/fvtt-ecryme/templates/dialogs/partial-confront-dice-area.hbs filter="preservation"}}
{{> systems/fvtt-ecryme/templates/dialogs/partial-confront-bonus-area.hbs filter="preservation"}}
</div>
</div>
</div>
<h4>{{localize "ECRY.ui.dicepool"}}</h4>
<div id="confront-dice-pool" class="flexrow confront-area confrontation-dice-list pool-list">
{{> systems/fvtt-ecryme/templates/dialogs/partial-confront-dice-area.hbs filter="mainpool"}}
</div>
<h4>{{localize "ECRY.ui.bonuspool"}} (Total : {{count confrontBonus}})</h4>
<div id="confront-bonus-pool" class="flexrow confront-area confrontation-bonus-list pool-list">
{{> systems/fvtt-ecryme/templates/dialogs/partial-confront-bonus-area.hbs filter="mainpool"}}
</div>
{{#if weapon}}
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.weapon"}} : </span>
<span class="roll-dialog-label">{{weapon.name}} ({{localize "ECRY.ui.effect"}} {{weapon.system.effect}})</span>
</div>
{{/if}}
{{#if impactMalus}}
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.impactmalus"}} : </span>
<span class="roll-dialog-label">{{impactMalus}}</span>
</div>
{{/if}}
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.skilltranscendence"}} : </span>
<select class="" id="roll-select-transcendence" data-type="Number">
{{#select skillTranscendence}}
{{#for 0 skill.value 1}}
<option value="{{this}}">{{this}}</option>
{{/for}}
{{/select}}
</select>
</div>
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.transcendapply"}} : </span>
<select class="" id="roll-apply-transcendence" data-type="String">
{{#select applyTranscendence}}
<option value="execution">{{localize "ECRY.ui.execution"}}</option>
<option value="preservation">{{localize "ECRY.ui.preservation"}}</option>
{{/select}}
</select>
</div>
{{#if skill.spec}}
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.spec"}} : </span>
<select class="" id="roll-specialization" data-type="String" multiple>
{{#each skill.spec as |spec idx|}}
<option value="{{spec.id}}" {{#if (eq spec.name @root.spec.name)}}selected{{/if}}>{{spec.name}}</option>
{{/each}}
</select>
</div>
{{/if}}
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.traitbonus"}} : </span>
<select class="" id="roll-trait-bonus" data-type="String" multiple>
{{#each traitsBonus as |trait idx|}}
<option value="{{trait._id}}" {{#if trait.activated}}selected{{/if}}>{{trait.name}} ({{trait.system.level}})</option>
{{/each}}
</select>
</div>
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.traitmalus"}} : </span>
<select class="" id="roll-trait-malus" data-type="String" multiple>
{{#each traitsMalus as |trait idx|}}
<option value="{{trait._id}}" {{#if trait.activated}}selected{{/if}}>{{trait.name}} ({{trait.system.level}})</option>
{{/each}}
</select>
</div>
{{#if annency}}
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.annency"}} : {{annency.name}}</span>
<span class="roll-dialog-label">{{annency.system.base.description}}</span>
</div>
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.annencybonus"}}</span>
<select class="" id="annency-bonus" name="annencyBonus" data-type="String">
<option value="0">0</option>
<option value="1">+1</option>
<option value="2">+2</option>
<option value="3">+3</option>
<option value="4">+4</option>
<option value="5">+5</option>
</select>
</div>
{{/if}}
<div class="flexrow">
<span class="roll-dialog-label">Bonus/Malus : </span>
<select id="bonusMalusPerso" name="bonusMalusPerso">
{{#select bonusMalusPerso}}
<option value="-3">-3</option>
<option value="-2">-2</option>
<option value="-1">-1</option>
<option value="0">0</option>
<option value="1">+1</option>
<option value="2">+2</option>
<option value="3">+3</option>
{{/select}}
</select>
</div>
</div>
</form>

View File

@ -1,13 +0,0 @@
<form class="confrontation-roll-dialog">
<header class="roll-dialog-header">
{{#if img}}
<img class="actor-icon" src="{{img}}" data-edit="img" title="{{name}}" />
{{/if}}
<h1 class="dialog-roll-title roll-dialog-header">{{title}}</h1>
</header>
<div class="flexcol">
</div>
</form>

View File

@ -1,10 +0,0 @@
{{#each confrontBonus as |bonus idx|}}
{{#if (eq bonus.location ../filter)}}
<div class="confront-dice-container bonus-spec" data-drag-type="bonus" data-bonus-idx={{idx}}>
<span draggable="true" data-drag-type="bonus" data-bonus-idx={{idx}}>
<img class="confront-dice" data-drag-type="bonus" data-bonus-idx={{idx}} src="icons/svg/circle.svg" >
<label class="confront-bonus-centered" data-drag-type="bonus" data-bonus-idx={{idx}}>+1</label>
</span>
</div>
{{/if}}
{{/each}}

View File

@ -1,11 +0,0 @@
{{#each availableDices as |dice idx|}}
{{#if (eq dice.location ../filter)}}
<div class="confront-dice-container dice-spec" data-drag-type="dice" data-dice-idx={{idx}} data-dice-value="{{dice.result}}">
<span draggable="true" data-drag-type="dice" data-dice-idx={{idx}} data-dice-value="{{dice.result}}">
<img class="confront-dice" src="icons/svg/d6-grey.svg" data-drag-type="dice" data-dice-idx={{idx}} data-dice-value="{{dice.result}}">
<label class="confront-dice-centered" data-drag-type="dice" data-dice-idx={{idx}}
data-dice-value="{{dice.result}}">{{dice.result}}</label>
</span>
</div>
{{/if}}
{{/each}}

View File

@ -42,8 +42,8 @@
<div class="flexrow">
<span class="roll-dialog-label">Difficulté : </span>
<select class="" type="text" id="roll-difficulty" value="{{difficulty}}" data-dtype="Number">
{{selectOptions config.difficulte selected=difficulty labelAttr="label"}}
<select class="" type="text" id="roll-difficulty" value="{{difficulty}}" data-dtype="String">
{{selectOptions config.difficulte selected=difficulty valueAttr="key" labelAttr="label"}}
</select>
</div>

View File

@ -54,6 +54,20 @@
</li>
{{/if}}
{{#if (eq system.typeArme "tir")}}
<li class="flexrow">
<label class="item-name-label-long">Temps de recharge</label>
<input type="text" class="padd-right numeric-input item-field-label-short"
name="system.tempsRecharge" value="{{system.tempsRecharge}}" data-dtype="Number" />
</li>
<li class="flexrow">
<label class="item-name-label-long">Compétence de recharge</label>
<select name="system.competenceRecharge">
{{selectOptions config.competencesRecharge selected=system.competenceRecharge labelAttr="label"}}
</select>
</li>
{{/if}}
{{#each system.specificites as |spec specId|}}
<li class="flexrow">
{{#if (isSpecArmeType specId @root.system.typeArme)}}