Compare commits

..

18 Commits

16 changed files with 503 additions and 162 deletions

14
.gitignore vendored Normal file
View File

@@ -0,0 +1,14 @@
.vscode/settings.json
.idea
.history
todo.md
/.vscode
/ignored/
/node_modules/
/jsconfig.json
/package.json
/package-lock.json
/packs/*/
/packs/*/CURRENT
/packs/*/LOG
/packs/*/LOCK

View File

@@ -124,7 +124,7 @@ export class HawkmoonActorSheet extends ActorSheet {
}) })
html.find('.roll-initiative').click((event) => { html.find('.roll-initiative').click((event) => {
this.actor.rollAttribut("pre", true) this.actor.rollAttribut("adr", true)
}) })
html.find('.roll-attribut').click((event) => { html.find('.roll-attribut').click((event) => {
@@ -148,7 +148,11 @@ export class HawkmoonActorSheet extends ActorSheet {
let armeId = li.data("item-id") let armeId = li.data("item-id")
this.actor.rollArmeDegats(armeId) this.actor.rollArmeDegats(armeId)
}) })
html.find('.item-add').click((event) => {
const itemType = $(event.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: `Nouveau ${itemType}`, type: itemType }], { renderSheet: true })
})
html.find('.lock-unlock-sheet').click((event) => { html.find('.lock-unlock-sheet').click((event) => {
this.options.editScore = !this.options.editScore; this.options.editScore = !this.options.editScore;

View File

@@ -41,7 +41,11 @@ export class HawkmoonActor extends Actor {
const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills") const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills")
data.items = skills.map(i => i.toObject()) data.items = skills.map(i => i.toObject())
} }
if (data.type == 'pnj') { if (data.type == 'creature') {
const skills = await HawkmoonUtility.loadCompendium("fvtt-hawkmoon-cyd.skills-creatures")
data.items = skills.map(i => i.toObject())
data.items.push({ name: "Arme naturelle 1", type: 'arme', img: "systems/fvtt-hawkmoon-cyd/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
data.items.push({ name: "Arme naturelle 2", type: 'arme', img: "systems/fvtt-hawkmoon-cyd/assets/icons/melee.webp", system: { typearme: "contact", bonusmaniementoff: 0, seuildefense: 0, degats: "0" } })
} }
return super.create(data, options); return super.create(data, options);
@@ -73,12 +77,16 @@ export class HawkmoonActor extends Actor {
arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff arme.system.totalOffensif = this.system.attributs.pui.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + bonusDefense arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense + bonusDefense
arme.system.isdefense = true arme.system.isdefense = true
arme.system.isMelee = true
arme.system.isDistance = false
} }
if (arme.system.typearme == "jet" || arme.system.typearme == "tir") { if (arme.system.typearme == "jet" || arme.system.typearme == "tir") {
arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance")) arme.system.competence = duplicate(this.items.find(item => item.type == "competence" && item.name.toLowerCase() == "armes à distance"))
arme.system.attrKey = "adr" arme.system.attrKey = "adr"
arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff arme.system.totalOffensif = this.system.attributs.adr.value + arme.system.competence.system.niveau + arme.system.bonusmaniementoff
arme.system.totalDegats = arme.system.degats arme.system.totalDegats = arme.system.degats
arme.system.isMelee = false
arme.system.isDistance = true
if (arme.system.isdefense) { if (arme.system.isdefense) {
arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense arme.system.totalDefensif = combat.defenseTotal + arme.system.competence.system.niveau + arme.system.seuildefense
} }
@@ -87,6 +95,11 @@ export class HawkmoonActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getItemSorted(types) {
let items = this.items.filter(item => types.includes(item.type)) || []
HawkmoonUtility.sortArrayObjectsByName(items)
return items
}
getWeapons() { getWeapons() {
let armes = [] let armes = []
for (let arme of this.items) { for (let arme of this.items) {
@@ -94,55 +107,37 @@ export class HawkmoonActor extends Actor {
armes.push(this.prepareArme(arme)) armes.push(this.prepareArme(arme))
} }
} }
HawkmoonUtility.sortArrayObjectsByName(armes)
return armes return armes
} }
/* -------------------------------------------- */
getMonnaies() { getMonnaies() {
return this.items.filter( it => it.type == "monnaie") return this.getItemSorted(["monnaie"])
} }
/* ----------------------- --------------------- */
addMember( actorId) {
let members = duplicate(this.system.members)
members.push( {id: actorId} )
this.update ({'system.members': members})
}
async removeMember(actorId) {
let members = this.system.members.filter(it => it.id != actorId )
this.update ({'system.members': members})
}
/* ----------------------- --------------------- */
getEquipments() { getEquipments() {
return this.items.filter(item => item.type == "equipement") return this.getItemSorted(["equipement"])
} }
/* ----------------------- --------------------- */
getArtefacts() { getArtefacts() {
return this.items.filter(item => item.type == "artefact") return this.getItemSorted(["artefact"])
} }
/* ----------------------- --------------------- */
getMonnaies() {
return this.items.filter(item => item.type == "monnaie")
}
/* -------------------------------------------- */
getArmors() { getArmors() {
return this.items.filter(item => item.type == "protection") return this.getItemSorted(["protection"])
} }
getHistoriques() { getHistoriques() {
return this.items.filter(item => item.type == "historique") return this.getItemSorted(["historique"])
} }
getProfils() { getProfils() {
return this.items.filter(item => item.type == "profil") return this.getItemSorted(["profil"])
} }
getTalents() { getTalents() {
return this.items.filter(item => item.type == "talent") return this.getItemSorted(["talent"])
} }
getRessources() { getRessources() {
return this.items.filter(item => item.type == "ressource") return this.getItemSorted(["ressource"])
} }
getContacts() { getContacts() {
return this.items.filter(item => item.type == "contact") return this.getItemSorted(["contact"])
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getSkills() { getSkills() {
let comp = [] let comp = []
@@ -163,17 +158,19 @@ export class HawkmoonActor extends Actor {
comp.push(item) comp.push(item)
} }
} }
return comp.sort(function (a, b) { HawkmoonUtility.sortArrayObjectsByName(comp)
let fa = a.name.toLowerCase(), return comp
fb = b.name.toLowerCase(); }
if (fa < fb) {
return -1; /* ----------------------- --------------------- */
} addMember(actorId) {
if (fa > fb) { let members = duplicate(this.system.members)
return 1; members.push({ id: actorId })
} this.update({ 'system.members': members })
return 0; }
}) async removeMember(actorId) {
let members = this.system.members.filter(it => it.id != actorId)
this.update({ 'system.members': members })
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -188,7 +185,7 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getProtection() { getProtection() {
let equipProtection = 0 let equipProtection = 0
for(let armor in this.items) { for (let armor in this.items) {
if (armor.type == "protection" && armor.system.equipped) { if (armor.type == "protection" && armor.system.equipped) {
equipProtection += Number(armor.system.protection) equipProtection += Number(armor.system.protection)
} }
@@ -209,7 +206,7 @@ export class HawkmoonActor extends Actor {
vitesseBase: this.getVitesseBase(), vitesseBase: this.getVitesseBase(),
vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus, vitesseTotal: this.getVitesseBase() + this.system.combat.vitessebonus,
defenseBase: this.getDefenseBase(), defenseBase: this.getDefenseBase(),
protection : this.getProtection(), protection: this.getProtection(),
defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + this.getProtection() - this.getTotalAdversite() defenseTotal: this.getDefenseBase() + this.system.combat.defensebonus + this.getProtection() - this.getTotalAdversite()
} }
return combat return combat
@@ -229,7 +226,7 @@ export class HawkmoonActor extends Actor {
if (this.type == 'personnage') { if (this.type == 'personnage') {
let talentBonus = this.getVigueurBonus() let talentBonus = this.getVigueurBonus()
let vigueur = Math.floor((this.system.attributs.pui.value + this.system.attributs.tre.value) / 2) + talentBonus let vigueur = Math.floor((this.system.attributs.pui.value + this.system.attributs.tre.value) / 2) + talentBonus + this.system.sante.vigueurmodifier
if (vigueur != this.system.sante.vigueur) { if (vigueur != this.system.sante.vigueur) {
this.update({ 'system.sante.vigueur': vigueur }) this.update({ 'system.sante.vigueur': vigueur })
} }
@@ -382,7 +379,7 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
getBonusDegats() { getBonusDegats() {
return 0; return 0;
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -444,27 +441,27 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
computeRichesse() { computeRichesse() {
let valueSC = 0 let valueSC = 0
for(let monnaie of this.items) { for (let monnaie of this.items) {
if (monnaie.type == "monnaie") { if (monnaie.type == "monnaie") {
valueSC += Number(monnaie.system.prixsc) * Number(monnaie.system.quantite) valueSC += Number(monnaie.system.prixsc) * Number(monnaie.system.quantite)
} }
} }
return HawkmoonUtility.computeMonnaieDetails( valueSC) return HawkmoonUtility.computeMonnaieDetails(valueSC)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
computeValeurEquipement() { computeValeurEquipement() {
let valueSC = 0 let valueSC = 0
for(let equip of this.items) { for (let equip of this.items) {
if (equip.type == "equipement" || equip.type == "arme" || equip.type == "protection") { if (equip.type == "equipement" || equip.type == "arme" || equip.type == "protection") {
valueSC += Number(equip.system.prixsc) * Number(equip.system.quantite ?? 1) valueSC += Number(equip.system.prixsc) * Number(equip.system.quantite ?? 1)
valueSC += (Number(equip.system.prixca) * Number(equip.system.quantite ?? 1)) * 20 valueSC += (Number(equip.system.prixca) * Number(equip.system.quantite ?? 1)) * 20
valueSC += (Number(equip.system.prixpo) * Number(equip.system.quantite ?? 1)) * 400 valueSC += (Number(equip.system.prixpo) * Number(equip.system.quantite ?? 1)) * 400
} }
} }
return HawkmoonUtility.computeMonnaieDetails( valueSC) return HawkmoonUtility.computeMonnaieDetails(valueSC)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
getCompetence(compId) { getCompetence(compId) {
return this.items.get(compId) return this.items.get(compId)
@@ -490,7 +487,7 @@ export class HawkmoonActor extends Actor {
let maxDef = 0 let maxDef = 0
let bestArme let bestArme
for (let arme of defenseList) { for (let arme of defenseList) {
if (arme.type == "arme" ) { if (arme.type == "arme") {
arme = this.prepareArme(arme) arme = this.prepareArme(arme)
} }
if (arme.system.totalDefensif > maxDef) { if (arme.system.totalDefensif > maxDef) {
@@ -564,8 +561,8 @@ export class HawkmoonActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollAttribut(attrKey, isInit = false) { async rollAttribut(attrKey, isInit = false) {
let rollData = this.getCommonRollData(attrKey) let rollData = this.getCommonRollData(attrKey)
rollData.multiplier = (isInit)? 1 : 2 rollData.multiplier = (isInit) ? 1 : 2
rollData.isInit = isInit rollData.isInit = isInit
let rollDialog = await HawkmoonRollDialog.create(this, rollData) let rollDialog = await HawkmoonRollDialog.create(this, rollData)
rollDialog.render(true) rollDialog.render(true)
@@ -595,15 +592,27 @@ export class HawkmoonActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async rollArmeDegats(armeId, targetVigueur = undefined) { async rollArmeDegats(armeId, targetVigueur = undefined, rollDataInput = undefined) {
let arme = this.items.get(armeId) let arme = this.items.get(armeId)
if (arme.type == "arme") { if (arme.type == "arme") {
arme = this.prepareArme(arme) arme = this.prepareArme(arme)
} }
console.log("DEGATS", arme) console.log("DEGATS", arme)
let roll = new Roll( "1d10+"+arme.system.totalDegats).roll({ async: false }) let roll
let bonus = 0
if (rollDataInput?.isHeroique) {
if (rollDataInput?.attaqueCharge) {
bonus = 5
}
roll = new Roll("2d10rr10+" + arme.system.totalDegats + "+" + bonus).roll({ async: false })
} else {
if (rollDataInput?.attaqueCharge) {
bonus = 3
}
roll = new Roll("1d10+" + arme.system.totalDegats + "+" + bonus).roll({ async: false })
}
await HawkmoonUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode")); await HawkmoonUtility.showDiceSoNice(roll, game.settings.get("core", "rollMode"));
let nbEtatPerdus = 0 let nbEtatPerdus = 0
if (targetVigueur) { if (targetVigueur) {
nbEtatPerdus = Math.floor(roll.total / targetVigueur) nbEtatPerdus = Math.floor(roll.total / targetVigueur)
} }

View File

@@ -185,7 +185,7 @@ export class HawkmoonItemSheet extends ItemSheet {
html.find('#add-automation').click(ev => { html.find('#add-automation').click(ev => {
let autom = duplicate(this.object.system.automations) let autom = duplicate(this.object.system.automations)
autom.push( { eventtype: "on-drop", name: "Automatisation 1", competence: "", minLevel: 0, id: randomID(16) }) autom.push( { eventtype: "on-drop", name: "Automatisation 1", bonusname: "vigueur", bonus: 0, competence: "", minLevel: 0, baCost: 0, id: randomID(16) })
this.object.update( { 'system.automations': autom }) this.object.update( { 'system.automations': autom })
}) })
html.find('.delete-automation').click(ev => { html.find('.delete-automation').click(ev => {

View File

@@ -72,9 +72,43 @@ export class HawkmoonRollDialog extends Dialog {
html.find('#competence-talents').change((event) => { html.find('#competence-talents').change((event) => {
this.rollData.selectedTalents = $('#competence-talents').val() this.rollData.selectedTalents = $('#competence-talents').val()
}) })
html.find('#taille-cible').change((event) => {
this.rollData.tailleCible = String(event.currentTarget.value)
})
html.find('#tireur-deplacement').change((event) => {
this.rollData.tireurDeplacement = String(event.currentTarget.value)
})
html.find('#cible-couvert').change((event) => {
this.rollData.cibleCouvert = String(event.currentTarget.value)
})
html.find('#distance-tir').change((event) => {
this.rollData.distanceTir = String(event.currentTarget.value)
})
html.find('#bonus-malus-context').change((event) => { html.find('#bonus-malus-context').change((event) => {
this.rollData.bonusMalusContext = Number(event.currentTarget.value) this.rollData.bonusMalusContext = Number(event.currentTarget.value)
}) })
html.find('#defenseur-au-sol').change((event) => {
this.rollData.defenseurAuSol = event.currentTarget.checked
})
html.find('#defenseur-aveugle').change((event) => {
this.rollData.defenseurAveugle = event.currentTarget.checked
})
html.find('#defenseur-de-dos').change((event) => {
this.rollData.defenseurDeDos = event.currentTarget.checked
})
html.find('#defenseur-restreint').change((event) => {
this.rollData.defenseurRestreint = event.currentTarget.checked
})
html.find('#defenseur-immobilise').change((event) => {
this.rollData.defenseurImmobilise = event.currentTarget.checked
})
html.find('#attaque-charge').change((event) => {
this.rollData.attaqueCharge = event.currentTarget.checked
})
html.find('#attaque-desarme').change((event) => {
this.rollData.attaqueDesarme = event.currentTarget.checked
})
} }
} }

View File

@@ -2,6 +2,12 @@
import { HawkmoonCombat } from "./hawkmoon-combat.js"; import { HawkmoonCombat } from "./hawkmoon-combat.js";
import { HawkmoonCommands } from "./hawkmoon-commands.js"; import { HawkmoonCommands } from "./hawkmoon-commands.js";
/* -------------------------------------------- */
const __distanceDifficulte = { "porteecourte": 5, "porteemoyenne": 9, "porteelongue": 14}
const __tireurDeplacement = { immobile: 0, lent: 3, rapide: 5}
const __cibleCouvert = { aucun: 0, leger: 5, complet: 10}
const __tailleCible = { normal: 0, main: 10, enfant: 3, maison: -10}
/* -------------------------------------------- */ /* -------------------------------------------- */
export class HawkmoonUtility { export class HawkmoonUtility {
@@ -61,6 +67,13 @@ export class HawkmoonUtility {
} }
/* -------------------------------------------- */
static sortArrayObjectsByName(myArray) {
myArray.sort((a, b) => {
return a.name.localeCompare(b.name);
})
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static getModificateurOptions() { static getModificateurOptions() {
let opt = [] let opt = []
@@ -138,7 +151,7 @@ export class HawkmoonUtility {
let message = game.messages.get(messageId) let message = game.messages.get(messageId)
let rollData = message.getFlag("world", "hawkmoon-roll") let rollData = message.getFlag("world", "hawkmoon-roll")
let actor = this.getActorFromRollData(rollData) let actor = this.getActorFromRollData(rollData)
actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur) actor.rollArmeDegats(rollData.arme._id, rollData.targetVigueur, rollData)
}) })
} }
@@ -151,6 +164,7 @@ export class HawkmoonUtility {
'systems/fvtt-hawkmoon-cyd/templates/partial-item-description.html', 'systems/fvtt-hawkmoon-cyd/templates/partial-item-description.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-item-nav.html', 'systems/fvtt-hawkmoon-cyd/templates/partial-item-nav.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau.html', 'systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau-creature.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-item-prix.html', 'systems/fvtt-hawkmoon-cyd/templates/partial-item-prix.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-sante-etat.html', 'systems/fvtt-hawkmoon-cyd/templates/partial-sante-etat.html',
'systems/fvtt-hawkmoon-cyd/templates/partial-automation.html', 'systems/fvtt-hawkmoon-cyd/templates/partial-automation.html',
@@ -308,13 +322,13 @@ export class HawkmoonUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static computeMonnaieDetails(valueSC) { static computeMonnaieDetails(valueSC) {
let po = Math.floor(valueSC / 400) let po = Math.floor(valueSC / 400)
let pa = Math.floor((valueSC - (po*400)) / 20) let pa = Math.floor((valueSC - (po * 400)) / 20)
let sc = valueSC - (po*400) - (pa*20) let sc = valueSC - (po * 400) - (pa * 20)
return { return {
po: po, pa: pa, sc: sc, valueSC: valueSC po, pa, sc, valueSC
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static computeResult(rollData) { static computeResult(rollData) {
rollData.diceResult = rollData.roll.terms[0].results[0].result rollData.diceResult = rollData.roll.terms[0].results[0].result
@@ -385,7 +399,38 @@ export class HawkmoonUtility {
} else { } else {
rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}` rollData.diceFormula += `+${rollData.attr.value}*${rollData.multiplier}+${rollData.modificateur}+${rollData.bonusMalusContext}`
} }
// Bonus arme naturelle en défense
if (rollData.bonusArmeNaturelle) {
rollData.diceFormula += `+${rollData.bonusArmeNaturelle}`
}
if (rollData.defenseurAuSol) {
rollData.diceFormula += `+3`
}
if (rollData.defenseurAveugle) {
rollData.diceFormula += `+10`
}
if (rollData.defenseurDeDos) {
rollData.diceFormula += `+5`
}
if (rollData.defenseurRestreint) {
rollData.diceFormula += `+3`
}
if (rollData.defenseurImmobilise) {
rollData.diceFormula += `+5`
}
if (rollData.arme?.system.isDistance) {
rollData.difficulte = __distanceDifficulte[rollData.distanceTir]
rollData.difficulte += __tireurDeplacement[rollData.tireurDeplacement]
rollData.difficulte += __cibleCouvert[rollData.cibleCouvert]
rollData.difficulte += __tailleCible[rollData.tailleCible]
rollData.difficulte += rollData.cibleDeplace ? 3 : 0
rollData.difficulte += rollData.cibleCaC ? 3 : 0
}
if (rollData.attaqueDesarme) {
rollData.difficulte += 10
}
// Ajout adversités // Ajout adversités
rollData.diceFormula += `-${rollData.nbAdversites}` rollData.diceFormula += `-${rollData.nbAdversites}`
@@ -395,7 +440,7 @@ export class HawkmoonUtility {
let myRoll = new Roll(rollData.diceFormula).roll({ async: false }) let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
rollData.roll = myRoll rollData.roll = duplicate(myRoll)
console.log(">>>> ", myRoll) console.log(">>>> ", myRoll)
rollData.finalResult = myRoll.total rollData.finalResult = myRoll.total
@@ -416,7 +461,7 @@ export class HawkmoonUtility {
let bonusRoll = new Roll(rollData.bonusFormula).roll({ async: false }) let bonusRoll = new Roll(rollData.bonusFormula).roll({ async: false })
await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode")); await this.showDiceSoNice(bonusRoll, game.settings.get("core", "rollMode"));
rollData.bonusRoll = bonusRoll rollData.bonusRoll = duplicate(bonusRoll)
rollData.finalResult += rollData.bonusRoll.total rollData.finalResult += rollData.bonusRoll.total
@@ -430,7 +475,7 @@ export class HawkmoonUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static getUsers(filter) { static getUsers(filter) {
return game.users.filter(filter).map(user => user.data._id); return game.users.filter(filter).map(user => user._id);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@@ -520,7 +565,19 @@ export class HawkmoonUtility {
pointAmeOptions: this.getPointAmeOptions(), pointAmeOptions: this.getPointAmeOptions(),
difficulte: 0, difficulte: 0,
modificateur: 0, modificateur: 0,
bonusMalusContext: 0 bonusMalusContext: 0,
bonusArmeNaturelle: 0,
defenseurAveugle: false,
defenseurDeDos: false,
defenseurAuSol: false,
defenseurRestreint: false,
defenseurImmobilise: false,
tailleCible: "normal",
tireurDeplacement: "immobile",
cibleCouvert: "aucun",
distanceTir: "porteemoyenne",
attaqueCharge: false,
attaqueDesarme: false
} }
return rollData return rollData
} }
@@ -533,8 +590,14 @@ export class HawkmoonUtility {
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
rollData.armeDefense = defender.getBestDefenseValue() rollData.armeDefense = defender.getBestDefenseValue()
rollData.targetVigueur = defender.getVigueur() rollData.targetVigueur = defender.getVigueur()
rollData.protectionDefenseur = defender.getProtection()
if (rollData.armeDefense) { if (rollData.armeDefense) {
rollData.difficulte = rollData.armeDefense.system.totalDefensif rollData.difficulte = rollData.armeDefense.system.totalDefensif
if ( !rollData.arme.system.armenaturelle && !rollData.arme.system.armefortune ){
if (rollData.armeDefense.system.armenaturelle || rollData.armeDefense.system.armefortune) {
rollData.bonusArmeNaturelle = 3
}
}
} else { } else {
ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.") ui.notifications.warn("Aucune arme de défense équipée, difficulté manuelle à positionner.")
} }

View File

@@ -0,0 +1,8 @@
{"name":"Mêlée","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">M&ecirc;l&eacute;e repr&eacute;sente la ma&icirc;trise martiale et l&rsquo;habilet&eacute; au combat rapproch&eacute;, avec ou sans arme. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage est &agrave; m&ecirc;me de passer la garde de ses adversaires en combat au corps-&agrave;-corps.</p>","niveau":0,"attribut1":"pui","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Armes à une main (Puissance)","used":false,"description":"Pour utiliser des armes comme lépée courte, la hache, une arme improvisée à une main, etc.\n\n"},{"name":"Armes à deux mains (Puissance)","used":false,"description":"Pour utiliser des armes comme la hache nordaine ou lépée arthurienne, une arme improvisée à deux mains, etc."},{"name":"Mains nues (Puissance)","used":false,"description":"Pour se battre à mains nues, quil sagisse dune bagarre ou dun pugilat codifié."}],"predilections[0]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.VM3TSQYxseYdCFjv"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645643952,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"0nhTxujlIUB63Aqt"}
{"name":"Discrétion","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Discr&eacute;tion repr&eacute;sente la capacit&eacute; &agrave; ne pas se faire remarquer, qu&rsquo;il s&rsquo;agisse de se fondre dans la foule, de prendre l'apparence de quelqu&rsquo;un d&rsquo;autre, de se cacher dans l&rsquo;ombre ou encore de se d&eacute;placer en silence. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage est apte &agrave; passer<br>physiquement inaper&ccedil;u.</p>","niveau":0,"attribut1":"adr","attribut2":"tre","attribut3":"none","doublebonus":false,"predilections":[{"name":"Cacher et se cacher (Trempe)","used":false,"description":"Pour se fondre dans le décor. Le personnage adopte un comportement décontracté qui le fait passer inaperçu, il trouve une cachette, etc. Permet également de dissimuler un objet sur soi (quil sagisse dune bourse, dune arme, dun tatouage, etc.).\n\n"},{"name":"Déguisement (Trempe)","used":false,"description":"Pour dissimuler son identité, altérer ses traits ou prendre ceux d'une personne spécifique."},{"name":"Déplacement silencieux (Adresse)","used":false,"description":"Pour se déplacer sans éveiller lattention lorsquon ne peut être vu (dans lobscurité ou à couvert, lorsquun garde est derrière une porte ou un angle\nde mur, etc.)."}]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.gBmAdYl4rhbY89ee"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645638028,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"J4x6SP6l6njOrZn3"}
{"name":"Armes à distance","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Repr&eacute;sente l&rsquo;habilet&eacute; au lancer ou avec une arme &agrave; distance. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus les tirs du personnage sont pr&eacute;cis.&nbsp;</p>\n<p style=\"text-align: justify;\">&nbsp;</p>\n<p style=\"text-align: justify;\">&nbsp;</p>\n<p style=\"text-align: justify;\">&nbsp;</p>","niveau":0,"attribut1":"adr","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Armes à feu (Adresse) ","used":false,"description":"Pour des armes comme le lance-feu. "},{"name":"Armes à projectile (Adresse)","used":false,"description":"Pour des armes comme l'arc, la fronde, l'arbalète, etc."},{"name":"Armes de jet (Adresse)","used":false,"description":"Pour des armes comme la dague de lancer, la bombe à mèche, le javelot, les projectiles improvisés, etc. "}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.MLMlscPBb1ZCPTRl"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666619959067,"modifiedTime":1671645649970,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"UfVYwmPFwy2T7jZM"}
{"name":"Survie","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Survie repr&eacute;sente la capacit&eacute; &agrave; trouver de quoi subsister dans la nature, &agrave; &eacute;tablir un campement, &agrave; faire du feu avec les moyens du bord, &agrave; se rep&eacute;rer. Avec Clairvoyance, cette Comp&eacute;tence permet de trouver des baies comestibles, de poser tous les types de pi&egrave;ges, de pister, de trouver le meilleur emplacement pour un campement. Avec Adresse, elle permet de chasser, de p&ecirc;cher, de faire du feu dans des conditions difficiles et de confectionner les pi&egrave;ges les plus simples (collets, fosses, etc.).</p>\n<p style=\"text-align: justify;\">Les Pr&eacute;dilections repr&eacute;sentent quant &agrave; elles les diff&eacute;rents milieux ou climats.</p>","niveau":0,"attribut1":"adr","attribut2":"cla","attribut3":"none","doublebonus":false,"predilections":[{"name":"Fleuve, Forêt, Hiver, Mer, Montagne, Souterrains, etc. (Adresse ou Clairvoyance)","used":false,"description":"En fonction de chaque milieu, la Prédilection permet dy évoluer de la façon la plus adaptée."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""],"predilections[4]":["Nouvelle prédilection",""],"predilections[5]":["Nouvelle prédilection",""],"predilections[6]":["Nouvelle prédilection",""],"predilections[7]":["Nouvelle prédilection",""],"predilections[8]":["Nouvelle prédilection",""],"predilections[9]":["Nouvelle prédilection",""],"predilections[10]":["Nouvelle prédilection",""],"predilections[11]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.yI1zY5k8mAdx9wHK"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645647913,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"Vpth0atT9qS6VqUB"}
{"name":"Perception","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Perception repr&eacute;sente &agrave; la fois la conscience de son environnement, la capacit&eacute; &agrave; remarquer les d&eacute;tails incongrus, et l&rsquo;aptitude &agrave; lire le langage corporel. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus les sens du personnage sont aff&ucirc;t&eacute;s.</p>","niveau":0,"attribut1":"cla","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Empathie (Clairvoyance)","used":false,"description":"Pour déchiffrer, par son attitude ou ses gestes, lopinion ou la sincérité dun interlocuteur, pour deviner les choses exprimées à mots couverts, pour comprendre quelquun qui sexprime par signes."},{"name":"Recherche (Clairvoyance)","used":false,"description":"Pour remarquer les détails les plus infimes, pour trouver un objet ou un passage dissimulés."},{"name":"Vigilance (Clairvoyance) ","used":false,"description":"Pour détecter un personnage ou un animal qui se cache, pour remarquer une menace potentielle (piège, terrain dangereux, tireur embusqué), pour rester attentif lors dun tour de garde."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""],"predilections[4]":["Nouvelle prédilection",""],"predilections[5]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.7p2MTjttE4fllp9e"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645646434,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"cunjmZoXNhSX5qdV"}
{"name":"Coercition","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Coercition repr&eacute;sente la capacit&eacute; de forcer quelqu&rsquo;un &agrave; agir contre son gr&eacute;, &agrave; r&eacute;v&eacute;ler des secrets ou &agrave; ob&eacute;ir aveugl&eacute;ment. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage sait se montrer intimidant et jouer sur l&rsquo;autorit&eacute; qu&rsquo;il inspire pour briser la volont&eacute; de ses interlocuteurs.</p>","niveau":0,"attribut1":"pre","attribut2":"none","attribut3":"none","doublebonus":false,"predilections":[{"name":"Commandement (Présence) ","used":false,"description":"Pour donner des ordres auxquels on obéira sans poser de question. "},{"name":"Interrogatoire (Présence)","used":false,"description":"Pour forcer quelqu'un à révéler des informations, que ce soit par la torture ou à l'aide de techniques de manipulation plus subtiles. "},{"name":"Intimidation (Présence)","used":false,"description":"Pour faire peur, pour convaincre quelqu'un de renoncer à se battre, pour donner l'impression d'être dangereux. "}]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.15IDGG6JoZnRCQtY"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620317429,"modifiedTime":1671645635525,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"lchi2ulzWdm8j1l7"}
{"name":"Nage","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Nage repr&eacute;sente la vitesse (Adresse), mais aussi l&rsquo;endurance du nageur (Puissance). La natation est une Comp&eacute;tence assez rare dans le monde de Hawkmoon. Un personnage qui n&rsquo;a plus pied et ne sait pas nager commence &agrave; se noyer au bout d&rsquo;un tour de jeu (soit six secondes). Reportez-vous &agrave; la r&egrave;gle de noyade p. 214.</p>\n<p style=\"text-align: justify;\">&nbsp;</p>\n<h3 style=\"text-align: justify;\"><strong>Pr&eacute;dilections/Ma&icirc;trises</strong></h3>\n<ul>\n<li style=\"text-align: justify;\"><strong>Au choix du joueur et du MJ.</strong></li>\n</ul>","niveau":0,"attribut1":"adr","attribut2":"pui","attribut3":"none","doublebonus":false,"predilections":[],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""],"predilections[3]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.Dw7q0dGCoaBy1Smu"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645639961,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"pyeEZFo46NTnV8WK"}
{"name":"Mouvements","type":"competence","img":"systems/fvtt-hawkmoon-cyd/assets/icons/competence.webp","system":{"description":"<p style=\"text-align: justify;\">Mouvements indique la capacit&eacute; du personnage &agrave; se d&eacute;placer rapidement et longtemps. Cette Comp&eacute;tence repr&eacute;sente aussi bien la souplesse et la vivacit&eacute; des gestes que l&rsquo;endurance physique et la r&eacute;sistance &agrave; l&rsquo;effort. Plus cette Comp&eacute;tence est &eacute;lev&eacute;e, plus le personnage est en forme et peut courir, grimper ou sauter longtemps et rapidement sans se fatiguer.</p>","niveau":0,"attribut1":"adr","attribut2":"pui","attribut3":"none","doublebonus":false,"predilections":[{"name":"Acrobaties (Adresse)","used":true,"description":"Pour faire des figures acrobatiques, sauter en hauteur ou en longueur, jongler, ou encore pour rattraper un objet fragile sans labîmer (ou un ustensile dangereux sans se blesser).\n\n"},{"name":"Course (Puissance)","used":false,"description":"Pour sprinter ou pour tenir la distance dans une course dendurance."},{"name":"Escalade (Puissance) ","used":false,"description":"Pour escalader murs, arbres, etc. Sert également à avancer en étant suspendu à une corde horizontale."}],"predilections[0]":["Nouvelle prédilection",""],"predilections[1]":["Nouvelle prédilection",""],"predilections[2]":["Nouvelle prédilection",""]},"effects":[],"ownership":{"default":0,"8b7NkRYwYKm5eOMy":3,"wYQCdPQVeRKBJmZI":3},"flags":{"core":{"sourceId":"Compendium.fvtt-hawkmoon-cyd.skills.bP7pPSCekexUEf7m"}},"_stats":{"systemId":"fvtt-hawkmoon-cyd","systemVersion":"10.1.7","coreVersion":"10.291","createdTime":1666620807186,"modifiedTime":1671645642114,"lastModifiedBy":"wYQCdPQVeRKBJmZI"},"folder":null,"sort":0,"_id":"tFU5yISK6spdNWco"}

View File

@@ -1209,12 +1209,10 @@ ul, li {
text-shadow: 0px 1px 0px #4d3534; text-shadow: 0px 1px 0px #4d3534;
position: relative; position: relative;
max-height:1.7rem; max-height:1.7rem;
margin-left:4px;
flex-grow:1; flex-grow:1;
max-width: 4rem; max-width: 3.5rem;
min-width: 4rem; min-width: 3.5rem;
} }
.button-sheet-roll:hover { .button-sheet-roll:hover {
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%); background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
background-color: rgb(56, 33, 33); background-color: rgb(56, 33, 33);
@@ -1224,6 +1222,21 @@ ul, li {
top:1px; top:1px;
} }
.defense-sheet {
border-radius: 4px;
text-align: center;
display: inline-block;
font-size: 0.8rem;
padding: 1px 1px 0px 1px;
text-decoration: none;
position: relative;
max-height:1.7rem;
margin-left:4px;
flex-grow:1;
max-width: 3.5rem;
min-width: 3.5rem;
}
.plus-minus-button { .plus-minus-button {
box-shadow: inset 0px 1px 0px 0px #a6827e; box-shadow: inset 0px 1px 0px 0px #a6827e;
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%); background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
@@ -1315,13 +1328,10 @@ ul, li {
/*************************************************************/ /*************************************************************/
.arme-defensif { .arme-defensif {
padding-top: 7px; padding-top: 7px;
padding-left: 4px;
margin-left: 4px;
text-align: center; text-align: center;
flex-grow: 2; flex-grow: 2;
} }
/*************************************************************/ /*************************************************************/
.item-name-img { .item-name-img {
flex-grow:1; flex-grow:1;
@@ -1439,4 +1449,11 @@ ul, li {
} }
.argent-total-text { .argent-total-text {
margin-left: 4px; margin-left: 4px;
} }
h4.entry-name.document-name {
color: black;
}
.fxmaster {
background: #443e37E0;
background-color: #443e37E0;
}

View File

@@ -1,7 +1,7 @@
{ {
"id": "fvtt-hawkmoon-cyd", "id": "fvtt-hawkmoon-cyd",
"description": "Hawmoon RPG for FoundryVTT (CYD system - French)", "description": "Hawkmoon RPG for FoundryVTT (CYD system - French)",
"version": "10.1.6", "version": "11.0.6",
"authors": [ "authors": [
{ {
"name": "Uberwald/LeRatierBretonnien", "name": "Uberwald/LeRatierBretonnien",
@@ -35,7 +35,7 @@
"gridUnits": "m", "gridUnits": "m",
"license": "LICENSE.txt", "license": "LICENSE.txt",
"manifest": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/raw/branch/master/system.json", "manifest": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/raw/branch/master/system.json",
"download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-10.1.6.zip", "download": "https://www.uberwald.me/gitea/public/fvtt-hawkmoon-cyd/archive/fvtt-hawkmoon-cyd-11.0.6.zip",
"languages": [ "languages": [
{ {
"lang": "fr", "lang": "fr",
@@ -49,91 +49,133 @@
"type": "Item", "type": "Item",
"label": "Compétences", "label": "Compétences",
"name": "skills", "name": "skills",
"path": "packs/competences.db", "path": "packs/competences",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
},
{
"type": "Item",
"label": "Compétences de Créatures",
"name": "skills-creatures",
"path": "packs/competences-creatures",
"system": "fvtt-hawkmoon-cyd",
"flags": {},
"ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "Item", "type": "Item",
"label": "Historiques", "label": "Historiques",
"name": "historiques", "name": "historiques",
"path": "packs/historiques.db", "path": "packs/historiques",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "Item", "type": "Item",
"label": "Armes", "label": "Armes",
"name": "armes", "name": "armes",
"path": "packs/armes.db", "path": "packs/armes",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "Item", "type": "Item",
"label": "Protections", "label": "Protections",
"name": "protections", "name": "protections",
"path": "packs/protections.db", "path": "packs/protections",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "Item", "type": "Item",
"label": "Equipement", "label": "Equipement",
"name": "equipement", "name": "equipement",
"path": "packs/equipement.db", "path": "packs/equipement",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "Item", "type": "Item",
"label": "Profils", "label": "Profils",
"name": "profils", "name": "profils",
"path": "packs/profils.db", "path": "packs/profils",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "Item", "type": "Item",
"label": "Talents de Personnage", "label": "Talents de Personnage",
"name": "talents", "name": "talents",
"path": "packs/talents.db", "path": "packs/talents",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "Item", "type": "Item",
"label": "Talents de Cellule", "label": "Talents de Cellule",
"name": "talents-cellule", "name": "talents-cellule",
"path": "packs/talents-cellule.db", "path": "packs/talents-cellule",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "RollTable", "type": "RollTable",
"label": "Tables", "label": "Tables",
"name": "tables", "name": "tables",
"path": "packs/tables.db", "path": "packs/tables",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}, },
{ {
"type": "JournalEntry", "type": "JournalEntry",
"label": "Aides de Jeu", "label": "Aides de Jeu",
"name": "aides-de-jeu", "name": "aides-de-jeu",
"path": "packs/aides-de-jeu.db", "path": "packs/aides-de-jeu",
"system": "fvtt-hawkmoon-cyd", "system": "fvtt-hawkmoon-cyd",
"private": false, "flags": {},
"flags": {} "ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
} }
], ],
"primaryTokenAttribute": "sante.vigueur", "primaryTokenAttribute": "sante.vigueur",
@@ -147,7 +189,6 @@
"background": "systems/fvtt-hawkmoon-cyd/assets/ui/fond_hawkmoon.webp", "background": "systems/fvtt-hawkmoon-cyd/assets/ui/fond_hawkmoon.webp",
"compatibility": { "compatibility": {
"minimum": "10", "minimum": "10",
"verified": "10", "verified": "11"
"maximum": "10"
} }
} }

View File

@@ -19,7 +19,8 @@
"habitat": "", "habitat": "",
"notes": "", "notes": "",
"statut": "", "statut": "",
"gmnotes": "" "gmnotes": "",
"statutresistant": "commun"
} }
}, },
"core": { "core": {
@@ -68,7 +69,8 @@
}, },
"sante": { "sante": {
"vigueur": 0, "vigueur": 0,
"etat": 0 "etat": 0,
"vigueurmodifier": 0
}, },
"adversite": { "adversite": {
"bleue": 0, "bleue": 0,
@@ -208,6 +210,8 @@
}, },
"arme": { "arme": {
"typearme": "", "typearme": "",
"armenaturelle": false,
"armefortune": false,
"bonusmaniementoff": 0, "bonusmaniementoff": 0,
"seuildefense": 0, "seuildefense": 0,
"onlevelonly": false, "onlevelonly": false,

View File

@@ -112,6 +112,13 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
{{#if isGM}}
<div class="flexrow">
<span class="item-name-label competence-name item-field-label-medium">Modificateur de Vigueur</span>
<input type="text" class="item-field-label-short" name="system.sante.vigueurmodifier"
value="{{system.sante.vigueurmodifier}}" data-dtype="Number" />
</div>
{{/if}}
</div> </div>
</div> </div>
@@ -275,11 +282,11 @@
{{#if arme.system.isdefense}} {{#if arme.system.isdefense}}
<span class="item-field-label-short arme-defensif item-field-label-short"><label <span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short">{{arme.system.totalDefensif}}</label></span> class="arme-defensif item-field-label-short defense-sheet">{{arme.system.totalDefensif}}</label></span>
{{else}} {{else}}
<span class="item-field-label-short arme-defensif"><label <span class="item-field-label-short arme-defensif item-field-label-short"><label
class="item-field-label-short arme-defensif">-</label></span> class="arme-defensif item-field-label-short defense-sheet">N/A</label></span>
{{/if}} {{/if}}
<span class="item-field-label-short"> <span class="item-field-label-short">
{{#if arme.system.equipped}} {{#if arme.system.equipped}}
@@ -312,7 +319,7 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i <a class="item-control item-add" data-type="protection" title="Ajouter une arme"><i
class="fas fa-plus"></i></a> class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
@@ -362,7 +369,7 @@
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i <a class="item-control item-add" data-type="monnaie" title="Ajouter une monnaie"><i
class="fas fa-plus"></i></a> class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
@@ -406,7 +413,7 @@
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i <a class="item-control item-add" data-type="equipement" title="Ajouter un équipement"><i
class="fas fa-plus"></i></a> class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
@@ -441,7 +448,7 @@
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i <a class="item-control item-add" data-type="artefact" title="Ajouter un artefact"><i
class="fas fa-plus"></i></a> class="fas fa-plus"></i></a>
</div> </div>
</li> </li>
@@ -502,6 +509,17 @@
<div class="grid grid-3col"> <div class="grid grid-3col">
<div> <div>
<ul> <ul>
<li class="flexrow item">
<label class="generic-label">Statut de résistant</label>
<select class="status-small-label color-class-common item-field-label-long" type="text"
name="system.biodata.statutresistant" value="{{system.biodata.statutresistant}}" data-dtype="String">
{{#select system.biodata.statutresistant}}
<option value="commun">Commun</option>
<option value="clandestin">Clandestin</option>
<option value="insurge">Insurgé</option>
{{/select}}
</select>
</li>
<li class="flexrow item"> <li class="flexrow item">
<label class="generic-label">Sexe</label> <label class="generic-label">Sexe</label>
<input type="text" class="" name="system.biodata.sex" value="{{system.biodata.sex}}" <input type="text" class="" name="system.biodata.sex" value="{{system.biodata.sex}}"

View File

@@ -42,10 +42,19 @@
<li>Total : {{finalResult}}</li> <li>Total : {{finalResult}}</li>
{{#if attaqueCharge}}
<li>Vous avez chargé : vos adversaires bénéficient de +3 pour vous attaquer</li>
{{/if}}
{{#if difficulte}} {{#if difficulte}}
<li>SD : {{difficulte}}</li>
{{#if isSuccess}} {{#if isSuccess}}
<li class="chat-success">Succés... <li class="chat-success">Succés...
</li> </li>
{{#if attaqueDesarme}}
<li>Vous désarmez votre adversaire ! Son arme tombe hors de sa portée.</li>
{{/if}}
{{else}} {{else}}
<li class="chat-failure">Echec...</li> <li class="chat-failure">Echec...</li>
{{/if}} {{/if}}
@@ -53,6 +62,9 @@
{{#if isHeroique}} {{#if isHeroique}}
<li class="chat-success">Héroïque !!!</li> <li class="chat-success">Héroïque !!!</li>
{{#if attaqueDesarme}}
<li>... Et en plus vous récupérez l'arme de votre adversaire dans votre main (si vous le souhaitez) !.</li>
{{/if}}
{{/if}} {{/if}}
{{#if isDramatique}} {{#if isDramatique}}
<li class="chat-failure">Dramatique !!!</li> <li class="chat-failure">Dramatique !!!</li>

View File

@@ -49,7 +49,7 @@
<select class="status-small-label color-class-common edit-item-data competence-niveau" type="text" <select class="status-small-label color-class-common edit-item-data competence-niveau" type="text"
name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number"> name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number">
{{#select attr.value}} {{#select attr.value}}
{{> systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau.html}} {{> systems/fvtt-hawkmoon-cyd/templates/partial-list-niveau-creature.html}}
{{/select}} {{/select}}
</select> </select>
</li> </li>
@@ -65,7 +65,7 @@
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
<li class="item flexrow"> <li class="item flexrow">
<label class="label-name item-field-label-short">Vigueur</label> <label class="label-name item-field-label-short">Vigueur</label>
<label class="label-name item-field-label-short">{{system.sante.vigueur}}</label> <input type="text" class="padd-right numeric-input item-field-label-short" data-dtype="Number" name="system.sante.vigueur" value="{{system.sante.vigueur}}" >
</li> </li>
<li class="item flexrow"> <li class="item flexrow">
<label class="label-name item-field-label-short">Etat</label> <label class="label-name item-field-label-short">Etat</label>
@@ -104,14 +104,6 @@
{{/each}} {{/each}}
</ul> </ul>
<h4 class="item-name-label competence-name">Vitesse</h4>
<ul class="item-list alternate-list">
<li class="item flexrow" data-adversite="{{key}}">
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.vitesse.value"
value="{{system.vitesse.value}}" data-dtype="Number" />
</li>
</ul>
</div> </div>
@@ -277,10 +269,11 @@
</span> </span>
{{#if arme.system.isdefense}} {{#if arme.system.isdefense}}
<span class="item-field-label-short arme-defensif item-field-label-short"><label <span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short">{{arme.system.totalDefensif}}</label></span> class="arme-defensif item-field-label-short defense-sheet">{{arme.system.totalDefensif}}</label></span>
{{else}} {{else}}
<span class="item-field-label-short arme-defensif"><label class="item-field-label-short arme-defensif">-</label></span> <span class="item-field-label-short arme-defensif item-field-label-short"><label
class="arme-defensif item-field-label-short defense-sheet">N/A</label></span>
{{/if}} {{/if}}
<span class="item-field-label-short"> <span class="item-field-label-short">
@@ -314,7 +307,7 @@
</span> </span>
<div class="item-filler">&nbsp;</div> <div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed"> <div class="item-controls item-controls-fixed">
<a class="item-control item-add" data-type="arme" title="Ajouter une arme"><i <a class="item-control item-add" data-type="protection" title="Ajouter une arme"><i
class="fas fa-plus"></i></a> class="fas fa-plus"></i></a>
</div> </div>
</li> </li>

View File

@@ -23,6 +23,14 @@
{{/select}} {{/select}}
</select> </select>
</li> </li>
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Arme naturelle ? </label>
<input type="checkbox" name="system.armenaturelle" {{checked system.armenaturelle}} />
</li>
<li class="flexrow item">
<label class="generic-label item-field-label-long2">Arme de fortune ? </label>
<input type="checkbox" name="system.armefortune" {{checked system.armefortune}} />
</li>
<li class="flexrow item"> <li class="flexrow item">
<label class="generic-label item-field-label-long">Bonus offensif : </label> <label class="generic-label item-field-label-long">Bonus offensif : </label>
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.bonusmaniementoff" <input type="text" class="padd-right numeric-input item-field-label-short" name="system.bonusmaniementoff"
@@ -42,7 +50,7 @@
<li class="flexrow item"> <li class="flexrow item">
<label class="generic-label item-field-label-long">Dégâts : </label> <label class="generic-label item-field-label-long">Dégâts : </label>
<input type="text" class="padd-right numeric-input item-field-label-short" name="system.degats" <input type="text" class="padd-right numeric-input item-field-label-short" name="system.degats"
value="{{system.degats}}" data-dtype="Number" /> value="{{system.degats}}" data-dtype="String" />
</li> </li>
{{/if}} {{/if}}
<li class="flexrow item"> <li class="flexrow item">

View File

@@ -0,0 +1,21 @@
<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>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>

View File

@@ -62,6 +62,85 @@
</div> </div>
{{/if}} {{/if}}
{{#if arme}}
{{#if arme.system.isMelee}}
{{#if bonusArmeNaturelle}}
<div class="flexrow">
<span class="roll-dialog-label">Arme naturelle/fortune en défense</span>
<span class="small-label roll-dialog-label">{{bonusArmeNaturelle}}</span>
</div>
{{/if}}
<div class="flexrow">
<span class="roll-dialog-label">En surplomb ou défenseur au sol (+3)?</span>
<input type="checkbox" id="defenseur-au-sol" {{checked defenseurAuSol}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Défenseur aveuglé (+10)?</span>
<input type="checkbox" id="defenseur-aveugle" {{checked defenseurAveugle}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Défenseur de dos (+5)?</span>
<input type="checkbox" id="defenseur-de-dos" {{checked defenseurDeDos}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Défenseur dans espace restreint (+3)?</span>
<input type="checkbox" id="defenseur-restreint" {{checked defenseurRestreint}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Défenseur immobilisé (+5)?</span>
<input type="checkbox" id="defenseur-immobilise" {{checked defenseurImmobilise}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Charge ?</span>
<input type="checkbox" id="attaque-charge" {{checked attaqueCharge}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Désarmer (SD+10)?</span>
<input type="checkbox" id="attaque-desarme" {{checked attaqueDesarme}} />
</div>
{{else}}
<div class="flexrow">
<span class="roll-dialog-label">Tireur en déplacement ?</span>
<select class="item-field-label-long" type="text" id="tireur-deplacement" data-dtype="string">
{{#select tireurDeplacement}}
<option value="immobile">Immobile (SD+0)</option>
<option value="lent">Lent (SD+3)</option>
<option value="rapide">Rapide (SD+5)</option>
{{/select}}
</select>
</div>
<div class="flexrow">
<span class="roll-dialog-label">Couvert de la cible ?</span>
<select class="item-field-label-long" type="text" id="cible-couvert" data-dtype="string">
{{#select cibleCouvert}}
<option value="aucun">Aucun</option>
<option value="leger">Léger (SD+5)</option>
<option value="complet">Quasi complet (SD+10)</option>
{{/select}}
</select>
</div>
<div class="flexrow">
<span class="roll-dialog-label">Cible se déplace vite (SD+3)?</span>
<input type="checkbox" id="tireur-cible-deplace" {{checked cibleDeplace}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Cible corps à corps (SD+3)?</span>
<input type="checkbox" id="tireur-cible-cac" {{checked cibleCaC}} />
</div>
<div class="flexrow">
<span class="roll-dialog-label">Taille de la cible ?</span>
<select class="item-field-label-long" type="text" id="taille-cible" data-dtype="string">
{{#select tailleCible}}
<option value="normal">Normal (SD+0)</option>
<option value="main">Main (SD+10)</option>
<option value="enfant">Enfant (SD+3)</option>
<option value="maison">Maison (SD-10)</option>
{{/select}}
</select>
</div>
{{/if}}
{{/if}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label">Bonus/Malus </span> <span class="roll-dialog-label">Bonus/Malus </span>
<select class="roll-dialog-label" id="bonus-malus-context" type="text" value="{{bonusMalusContext}}" <select class="roll-dialog-label" id="bonus-malus-context" type="text" value="{{bonusMalusContext}}"
@@ -80,31 +159,47 @@
</select> </select>
</div> </div>
{{#if armeDefense}} {{#if (or armeDefense arme.system.isDistance)}}
<div class="flexrow">
<span class="roll-dialog-label">Défense adversaire : </span> {{#if arme.system.isDistance}}
<span class="roll-dialog-label"><strong>{{difficulte}}</strong> </span> <div class="flexrow">
</div> <span class="roll-dialog-label">SD de distance</span>
<select class="item-field-label-long" type="text" id="distance-tir" data-dtype="string">
{{#select distanceTir}}
<option value="porteecourte">Courte ({{protectionDefenseur}}+5)</option>
<option value="porteemoyenne">Moyenne ({{protectionDefenseur}}+9)</option>
<option value="porteelongue">Longue ({{protectionDefenseur}}+14)</option>
{{/select}}
</select>
</div>
{{else}}
<div class="flexrow">
<span class="roll-dialog-label">Défense adversaire : </span>
<span class="roll-dialog-label"><strong>{{difficulte}}</strong> </span>
</div>
{{/if}}
{{else}} {{else}}
{{#if isInit}} {{#if isInit}}
{{else}} {{else}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label">Difficulté : </span> <span class="roll-dialog-label">Difficulté : </span>
<select class="roll-dialog-label" id="difficulte" type="text" name="difficulte" value="{{difficulte}}" <select class="roll-dialog-label" id="difficulte" type="text" name="difficulte" value="{{difficulte}}"
data-dtype="Number"> data-dtype="Number">
{{#select difficulte}} {{#select difficulte}}
<option value="0">Aucune/Inconnue</option> <option value="0">Aucune/Inconnue</option>
<option value="5">Facile (5)</option> <option value="5">Facile (5)</option>
<option value="10">Moyenne (10)</option> <option value="10">Moyenne (10)</option>
<option value="15">Ardue (15)</option> <option value="15">Ardue (15)</option>
<option value="20">Hasardeuse (20)</option> <option value="20">Hasardeuse (20)</option>
<option value="25">Insensée (25)</option> <option value="25">Insensée (25)</option>
<option value="30">Pure Folie (30)</option> <option value="30">Pure Folie (30)</option>
{{/select}} {{/select}}
</select> </select>
</div>
{{/if}} {{/if}}
</div>
{{/if}} {{/if}}
</div> </div>