Minot fixes + archetype
This commit is contained in:
parent
c58e6ac4b8
commit
051d9ca943
31
README.md
Normal file
31
README.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Système Foundry pour Maléfices (French RPG, Arkhane Asylum Publishing)
|
||||||
|
|
||||||
|
## EN
|
||||||
|
|
||||||
|
Unofficial system for Maléfices v4 (French version from Arkhane Asylum Publishing).
|
||||||
|
|
||||||
|
This system has been approved by Arkhane Asylum Publishing ( https://arkhane-asylum.fr ), thanks !
|
||||||
|
The Tarot assets, as well as other graphical elements has been provide by Arkhane Asylum.
|
||||||
|
|
||||||
|
Books are mandatory to play and are available at : https://arkhane-asylum.fr/en/malefices
|
||||||
|
|
||||||
|
## FR
|
||||||
|
|
||||||
|
Système non-officiel pour le JDR Maléfices, version 4 (Arkhane Asylum Publishing).
|
||||||
|
|
||||||
|
Ce système a été autorisé par le Arkhane Asylum Publishing ( https://arkhane-asylum.fr ), merci à eux !
|
||||||
|
Les images du Tarot et autres éléments graphiques ont été fournis par Arkhane Asylum.
|
||||||
|
|
||||||
|
Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : https://arkhane-asylum.fr/fr/malefices
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
|
||||||
|
Maléfices, le jeu de rôle qui sent le souffre, is a property of Arkhane Asylum Publishing.
|
||||||
|
|
||||||
|
# Developmement
|
||||||
|
|
||||||
|
LeRatierBretonnien
|
||||||
|
|
||||||
|
# Tests, icones et saisie des données
|
||||||
|
|
||||||
|
Dame du Lac, Malik
|
@ -37,6 +37,7 @@ export class MaleficesActorSheet extends ActorSheet {
|
|||||||
limited: this.object.limited,
|
limited: this.object.limited,
|
||||||
armes: duplicate(this.actor.getArmes()),
|
armes: duplicate(this.actor.getArmes()),
|
||||||
tarots: duplicate(this.actor.getTarots()),
|
tarots: duplicate(this.actor.getTarots()),
|
||||||
|
archetype: duplicate(this.actor.getArchetype()),
|
||||||
equipements: duplicate(this.actor.getEquipements()),
|
equipements: duplicate(this.actor.getEquipements()),
|
||||||
subActors: duplicate(this.actor.getSubActors()),
|
subActors: duplicate(this.actor.getSubActors()),
|
||||||
phyMalus: this.actor.getPhysiqueMalus(),
|
phyMalus: this.actor.getPhysiqueMalus(),
|
||||||
|
@ -86,7 +86,14 @@ export class MaleficesActor extends Actor {
|
|||||||
MaleficesUtility.sortArrayObjectsByName(comp)
|
MaleficesUtility.sortArrayObjectsByName(comp)
|
||||||
return comp;
|
return comp;
|
||||||
}
|
}
|
||||||
|
getArchetype() {
|
||||||
|
let comp = duplicate(this.items.find(item => item.type == 'archetype') || {name: "Pas d'archetype"})
|
||||||
|
if (comp) {
|
||||||
|
comp.tarot = MaleficesUtility.getTarot(comp.system.lametutelaire)
|
||||||
|
}
|
||||||
|
|
||||||
|
return comp;
|
||||||
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getTarots() {
|
getTarots() {
|
||||||
let comp = duplicate(this.items.filter(item => item.type == 'tarot') || [])
|
let comp = duplicate(this.items.filter(item => item.type == 'tarot') || [])
|
||||||
|
@ -67,6 +67,10 @@ export class MaleficesItemSheet extends ItemSheet {
|
|||||||
isGM: game.user.isGM
|
isGM: game.user.isGM
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( this.object.type == "archetype") {
|
||||||
|
formData.tarots = MaleficesUtility.getTarots()
|
||||||
|
}
|
||||||
|
|
||||||
this.options.editable = !(this.object.origin == "embeddedItem");
|
this.options.editable = !(this.object.origin == "embeddedItem");
|
||||||
console.log("ITEM DATA", formData, this);
|
console.log("ITEM DATA", formData, this);
|
||||||
return formData;
|
return formData;
|
||||||
|
@ -71,8 +71,11 @@ function welcomeMessage() {
|
|||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
whisper: [game.user.id],
|
whisper: [game.user.id],
|
||||||
content: `<div id="welcome-message-Malefices"><span class="rdd-roll-part">
|
content: `<div id="welcome-message-malefices"><span class="rdd-roll-part">
|
||||||
<strong>Bienvenu dans Malefices, le JDR qui sent le souffre !</strong>
|
<strong>Bienvenu dans Malefices, le JDR qui sent le souffre !</strong>
|
||||||
|
<p>Le Livre de Base de Maléfices v4 est nécessaire pour jouer : https://arkhane-asylum.fr/en/malefices/</p>
|
||||||
|
<p>Maléfices et un jeu de rôle publié par Arkhane Asylum Publishing, tout les droits leur appartiennent.</p>
|
||||||
|
<p>Système développé par LeRatierBretonnien avec l'aide de la Dame du Lac et Malik, support sur le <a href="https://discord.gg/pPSDNJk">Discord FR de Foundry</a>.</p>
|
||||||
` });
|
` });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,54 +53,17 @@ export class MaleficesUtility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------- */
|
/*-------------------------------------------- */
|
||||||
static getSkills() {
|
static getTarots() {
|
||||||
return duplicate(this.skills)
|
return duplicate(this.tarots)
|
||||||
}
|
}
|
||||||
/*-------------------------------------------- */
|
static getTarot(tId) {
|
||||||
static getWeaponSkills() {
|
return this.tarots.find(t => t._id == tId)
|
||||||
return duplicate(this.weaponSkills)
|
|
||||||
}
|
|
||||||
/*-------------------------------------------- */
|
|
||||||
static getShieldSkills() {
|
|
||||||
return duplicate(this.shieldSkills)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static isModuleItemAllowed(type) {
|
|
||||||
return __ALLOWED_MODULE_TYPES[type]
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static buildBonusList() {
|
|
||||||
let bonusList = []
|
|
||||||
for (let key in game.system.model.Actor.character.bonus) {
|
|
||||||
let bonuses = game.system.model.Actor.character.bonus[key]
|
|
||||||
for (let bonus in bonuses) {
|
|
||||||
bonusList.push(key + "." + bonus)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let key in game.system.model.Actor.character.attributes) {
|
|
||||||
let attrs = game.system.model.Actor.character.attributes[key]
|
|
||||||
for (let skillKey in attrs.skills) {
|
|
||||||
bonusList.push(key + ".skills." + skillKey + ".modifier")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (let key in game.system.model.Actor.character.universal.skills) {
|
|
||||||
bonusList.push("universal.skills." + key + ".modifier")
|
|
||||||
}
|
|
||||||
return bonusList
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async ready() {
|
static async ready() {
|
||||||
const skills = await MaleficesUtility.loadCompendium("fvtt-malefices.skills")
|
const tarots = await MaleficesUtility.loadCompendium("fvtt-malefices.malefices-tarots")
|
||||||
this.skills = skills.map(i => i.toObject())
|
this.tarots = tarots.map(i => i.toObject())
|
||||||
this.weaponSkills = duplicate(this.skills.filter(item => item.system.isweaponskill))
|
|
||||||
this.shieldSkills = duplicate(this.skills.filter(item => item.system.isshieldskill))
|
|
||||||
|
|
||||||
const rollTables = await MaleficesUtility.loadCompendium("fvtt-malefices.rolltables")
|
|
||||||
this.rollTables = rollTables.map(i => i.toObject())
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -218,145 +181,6 @@ export class MaleficesUtility {
|
|||||||
let newRollData = mergeObject(oldRollData, rollData)
|
let newRollData = mergeObject(oldRollData, rollData)
|
||||||
this.rollDataStore[id] = newRollData
|
this.rollDataStore[id] = newRollData
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
|
||||||
static saveRollData(rollData) {
|
|
||||||
game.socket.emit("system.fvtt-malefices", {
|
|
||||||
name: "msg_update_roll", data: rollData
|
|
||||||
}); // Notify all other clients of the roll
|
|
||||||
this.updateRollData(rollData)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static getRollData(id) {
|
|
||||||
return this.rollDataStore[id]
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static async displayDefenseMessage(rollData) {
|
|
||||||
if (rollData.mode == "weapon" && rollData.defenderTokenId) {
|
|
||||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
|
||||||
if (game.user.isGM || (game.user.character && game.user.character.id == defender.id)) {
|
|
||||||
rollData.defender = defender
|
|
||||||
rollData.defenderWeapons = defender.getEquippedWeapons()
|
|
||||||
rollData.isRangedAttack = rollData.weapon?.system.isranged
|
|
||||||
this.createChatWithRollMode(defender.name, {
|
|
||||||
name: defender.name,
|
|
||||||
alias: defender.name,
|
|
||||||
//user: defender.id,
|
|
||||||
content: await renderTemplate(`systems/fvtt-malefices/templates/chat-request-defense.html`, rollData),
|
|
||||||
whisper: [defender.id].concat(ChatMessage.getWhisperRecipients('GM')),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static getSuccessResult(rollData) {
|
|
||||||
if (rollData.sumSuccess <= -3) {
|
|
||||||
if (rollData.attackRollData.weapon.system.isranged) {
|
|
||||||
return { result: "miss", fumble: true, hpLossType: "melee" }
|
|
||||||
} else {
|
|
||||||
return { result: "miss", fumble: true, attackerHPLoss: "2d3", hpLossType: "melee" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (rollData.sumSuccess == -2) {
|
|
||||||
if (rollData.attackRollData.weapon.system.isranged) {
|
|
||||||
return { result: "miss", dangerous_fumble: true }
|
|
||||||
} else {
|
|
||||||
return { result: "miss", dangerous_fumble: true, attackerHPLoss: "1d3", hpLossType: "melee" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (rollData.sumSuccess == -1) {
|
|
||||||
return { result: "miss" }
|
|
||||||
}
|
|
||||||
if (rollData.sumSuccess == 0) {
|
|
||||||
if (rollData.attackRollData.weapon.system.isranged) {
|
|
||||||
return { result: "target_space", aoe: true }
|
|
||||||
} else {
|
|
||||||
return { result: "clash", hack_vs_shields: true }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (rollData.sumSuccess == 1) {
|
|
||||||
return { result: "hit", defenderDamage: "1", entangle: true, knockback: true }
|
|
||||||
}
|
|
||||||
if (rollData.sumSuccess == 2) {
|
|
||||||
return { result: "hit", defenderDamage: "2", critical_1: true, entangle: true, knockback: true, penetrating_impale: true, hack_armors: true }
|
|
||||||
}
|
|
||||||
if (rollData.sumSuccess >= 3) {
|
|
||||||
return { result: "hit", defenderDamage: "3", critical_2: true, entangle: true, knockback: true, penetrating_impale: true, hack_armors: true }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static async getFumble(weapon) {
|
|
||||||
const pack = game.packs.get("fvtt-malefices.rolltables")
|
|
||||||
const index = await pack.getIndex()
|
|
||||||
let entry
|
|
||||||
|
|
||||||
if (weapon.isranged) {
|
|
||||||
entry = index.find(e => e.name === "Fumble! (ranged)")
|
|
||||||
}
|
|
||||||
if (!weapon.isranged) {
|
|
||||||
entry = index.find(e => e.name === "Fumble! (melee)")
|
|
||||||
}
|
|
||||||
let table = await pack.getDocument(entry._id)
|
|
||||||
const draw = await table.draw({ displayChat: false, rollMode: "gmroll" })
|
|
||||||
return draw.results.length > 0 ? draw.results[0] : undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static async processSuccessResult(rollData) {
|
|
||||||
if (game.user.isGM) { // Only GM process this
|
|
||||||
let result = rollData.successDetails
|
|
||||||
let attacker = game.actors.get(rollData.actorId)
|
|
||||||
let defender = game.canvas.tokens.get(rollData.attackRollData.defenderTokenId).actor
|
|
||||||
|
|
||||||
if (attacker && result.attackerHPLoss) {
|
|
||||||
result.attackerHPLossValue = await attacker.incDecHP("-" + result.attackerHPLoss)
|
|
||||||
}
|
|
||||||
if (attacker && defender && result.defenderDamage) {
|
|
||||||
let dmgDice = (rollData.attackRollData.weapon.system.isranged) ? "d6" : "d8"
|
|
||||||
result.damageWeaponFormula = result.defenderDamage + dmgDice
|
|
||||||
result.defenderHPLossValue = await defender.incDecHP("-" + result.damageWeaponFormula)
|
|
||||||
}
|
|
||||||
if (result.fumble || (result.dangerous_fumble && MaleficesUtility.isWeaponDangerous(rollData.attackRollData.weapon))) {
|
|
||||||
result.fumbleDetails = await this.getFumble(rollData.weapon)
|
|
||||||
}
|
|
||||||
if (result.critical_1 || result.critical_2) {
|
|
||||||
let isDeadly = MaleficesUtility.isWeaponDeadly(rollData.attackRollData.weapon)
|
|
||||||
result.critical = await this.getCritical((result.critical_1) ? "I" : "II", rollData.attackRollData.weapon)
|
|
||||||
result.criticalText = result.critical.text
|
|
||||||
}
|
|
||||||
this.createChatWithRollMode(rollData.alias, {
|
|
||||||
content: await renderTemplate(`systems/fvtt-malefices/templates/chat-attack-defense-result.html`, rollData)
|
|
||||||
})
|
|
||||||
console.log("Results processed", rollData)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static async processAttackDefense(rollData) {
|
|
||||||
if (rollData.attackRollData) {
|
|
||||||
//console.log("Defender token, ", rollData, rollData.defenderTokenId)
|
|
||||||
let defender = game.canvas.tokens.get(rollData.attackRollData.defenderTokenId).actor
|
|
||||||
let sumSuccess = rollData.attackRollData.nbSuccess - rollData.nbSuccess
|
|
||||||
if (sumSuccess > 0) {
|
|
||||||
let armorResult = await defender.rollArmorDie(rollData)
|
|
||||||
rollData.armorResult = armorResult
|
|
||||||
sumSuccess += rollData.armorResult.nbSuccess
|
|
||||||
if (sumSuccess < 0) { // Never below 0
|
|
||||||
sumSuccess = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rollData.sumSuccess = sumSuccess
|
|
||||||
rollData.successDetails = this.getSuccessResult(rollData)
|
|
||||||
if (game.user.isGM) {
|
|
||||||
this.processSuccessResult(rollData)
|
|
||||||
} else {
|
|
||||||
game.socket.emit("system.fvtt-malefices", { msg: "msg_gm_process_attack_defense", data: rollData });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async onSocketMesssage(msg) {
|
static async onSocketMesssage(msg) {
|
||||||
@ -379,18 +203,6 @@ export class MaleficesUtility {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static computeFocusData(focus) {
|
|
||||||
let focusData = {
|
|
||||||
focusPoints: __focusCore[focus.core] + __focusPointTreatment[focus.treatment],
|
|
||||||
burnChance: __burnChanceTreatment[focus.treatment],
|
|
||||||
focusRegen: __focusRegenBond[focus.bond],
|
|
||||||
spellAttackBonus: __bonusSpellAttackBond[focus.bond],
|
|
||||||
spellDamageBonus: __bonusSpellDamageBond[focus.bond]
|
|
||||||
}
|
|
||||||
return focusData
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async searchItem(dataItem) {
|
static async searchItem(dataItem) {
|
||||||
let item
|
let item
|
||||||
@ -404,19 +216,6 @@ export class MaleficesUtility {
|
|||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static getSpellCost(spell) {
|
|
||||||
return __spellCost[spell.system.level]
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
static getArmorPenalty(item) {
|
|
||||||
if (item && (item.type == "shield" || item.type == "armor")) {
|
|
||||||
return __armorPenalties[item.system.category]
|
|
||||||
}
|
|
||||||
return {}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static chatDataSetup(content, modeOverride, isRoll = false, forceWhisper) {
|
static chatDataSetup(content, modeOverride, isRoll = false, forceWhisper) {
|
||||||
let chatData = {
|
let chatData = {
|
||||||
|
@ -786,8 +786,11 @@ ul, li {
|
|||||||
/* Sidebar CSS */
|
/* Sidebar CSS */
|
||||||
#sidebar {
|
#sidebar {
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
background-position: 100%;
|
/*background-position: 100%;*/
|
||||||
background: url("../images/ui/background_01.webp");
|
background-color:#f5f5f5;
|
||||||
|
background-position: 0px 35px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-image: url("../images/ui/background_01.webp");
|
||||||
color: rgba(19, 18, 18, 0.95);
|
color: rgba(19, 18, 18, 0.95);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1229,11 +1232,19 @@ ul, li {
|
|||||||
min-width: 10rem;
|
min-width: 10rem;
|
||||||
}
|
}
|
||||||
.item-name-label-long {
|
.item-name-label-long {
|
||||||
|
margin-top: 4px;
|
||||||
flex-grow:2;
|
flex-grow:2;
|
||||||
max-width: 12rem;
|
max-width: 10rem;
|
||||||
min-width: 12rem;
|
min-width: 10rem;
|
||||||
|
}
|
||||||
|
.item-name-label-medium {
|
||||||
|
margin-top: 4px;
|
||||||
|
flex-grow:2;
|
||||||
|
max-width: 6rem;
|
||||||
|
min-width: 6rem;
|
||||||
}
|
}
|
||||||
.item-name-label-long2 {
|
.item-name-label-long2 {
|
||||||
|
margin-top: 4px;
|
||||||
flex-grow:2;
|
flex-grow:2;
|
||||||
max-width: 22rem;
|
max-width: 22rem;
|
||||||
min-width: 22rem;
|
min-width: 22rem;
|
||||||
@ -1259,7 +1270,6 @@ ul, li {
|
|||||||
min-width: 6.8rem;
|
min-width: 6.8rem;
|
||||||
}
|
}
|
||||||
.item-field-label-long {
|
.item-field-label-long {
|
||||||
margin-top: 4px;
|
|
||||||
flex-grow:1;
|
flex-grow:1;
|
||||||
max-width: 10rem;
|
max-width: 10rem;
|
||||||
min-width: 10rem;
|
min-width: 10rem;
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
],
|
],
|
||||||
"title": "Maléfices, le Jeu de Rôle",
|
"title": "Maléfices, le Jeu de Rôle",
|
||||||
"url": "https://www.uberwald.me/gitea/public/fvtt-malefices",
|
"url": "https://www.uberwald.me/gitea/public/fvtt-malefices",
|
||||||
"version": "10.0.7",
|
"version": "10.0.8",
|
||||||
"download": "https://www.uberwald.me/gitea/public/fvtt-malefices/archive/fvtt-malefices-v10.0.7.zip",
|
"download": "https://www.uberwald.me/gitea/public/fvtt-malefices/archive/fvtt-malefices-v10.0.8.zip",
|
||||||
"background": "systems/fvtt-malefices/images/ui/malefice_welcome_page.webp"
|
"background": "systems/fvtt-malefices/images/ui/malefice_welcome_page.webp"
|
||||||
}
|
}
|
@ -98,6 +98,7 @@
|
|||||||
"types": [
|
"types": [
|
||||||
"arme",
|
"arme",
|
||||||
"equipement",
|
"equipement",
|
||||||
|
"archetype",
|
||||||
"tarot"
|
"tarot"
|
||||||
],
|
],
|
||||||
"templates": {},
|
"templates": {},
|
||||||
@ -109,6 +110,9 @@
|
|||||||
"isreversed": false,
|
"isreversed": false,
|
||||||
"description": ""
|
"description": ""
|
||||||
},
|
},
|
||||||
|
"archetype": {
|
||||||
|
"lametutelaire": ""
|
||||||
|
},
|
||||||
"arme": {
|
"arme": {
|
||||||
"armetype": 0,
|
"armetype": 0,
|
||||||
"porteecourte": "",
|
"porteecourte": "",
|
||||||
|
@ -8,7 +8,17 @@
|
|||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||||
|
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
|
<ul>
|
||||||
|
<li class="flexrow item">
|
||||||
|
<label class="item-name-label-long">Milieu social</label>
|
||||||
|
<input type="text" class="item-field-label-long" name="system.biodata.milieusocial" value="{{system.biodata.milieusocial}}" data-dtype="String" />
|
||||||
|
</li>
|
||||||
|
<li class="item flexrow">
|
||||||
|
<label class="item-name-label-long">Profession</label>
|
||||||
|
<input type="text" class="item-field-label-long" name="system.biodata.profession" value="{{system.biodata.profession}}" data-dtype="String" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -43,7 +53,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{{#each system.attributs as |attr key|}}
|
{{#each system.attributs as |attr key|}}
|
||||||
<li class="item flexrow list-item">
|
<li class="item flexrow list-item">
|
||||||
<span class="item-field-label-long"><a class="roll-attribut" data-attr-key="{{key}}">{{attr.label}}<i class="fa-solid fa-dice-d20"></i></a></span>
|
<span class="item-name-label-long"><a class="roll-attribut" data-attr-key="{{key}}">{{attr.label}}<i class="fa-solid fa-dice-d20"></i></a></span>
|
||||||
<input type="text" class="item-field-label-short" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-short" name="system.attributs.{{key}}.value" value="{{attr.value}}" data-dtype="Number"/>
|
||||||
{{#if attr.hasmax}}
|
{{#if attr.hasmax}}
|
||||||
<input type="text" class="item-field-label-short" name="system.attributs.{{key}}.max" value="{{attr.max}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-short" name="system.attributs.{{key}}.max" value="{{attr.max}}" data-dtype="Number"/>
|
||||||
@ -163,60 +173,67 @@
|
|||||||
|
|
||||||
{{!-- Biography Tab --}}
|
{{!-- Biography Tab --}}
|
||||||
<div class="tab biodata" data-group="primary" data-tab="biodata">
|
<div class="tab biodata" data-group="primary" data-tab="biodata">
|
||||||
|
<div>
|
||||||
|
<ul>
|
||||||
|
<li class="item flexrow" data-item-id="{{archetype._id}}">
|
||||||
|
<label class="item-name-label-medium">Archetype : </label>
|
||||||
|
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{archetype.img}}" /></a>
|
||||||
|
<span class="item-name-label-medium">{{archetype.name}}</span>
|
||||||
|
<label class="item-name-label-long">Lame tutélaire : </label>
|
||||||
|
<span class="item-name-label-medium">{{archetype.tarot.name}}</span>
|
||||||
|
<div class="item-controls item-controls-fixed">
|
||||||
|
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="grid grid-2col">
|
<div class="grid grid-2col">
|
||||||
<div>
|
<div>
|
||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Lieu de naissance</label>
|
<label class="item-name-label-medium">Lieu de naissance</label>
|
||||||
<input type="text" class="" name="system.biodata.lieunaissance" value="{{system.biodata.lieunaissance}}"
|
<input type="text" class="" name="system.biodata.lieunaissance" value="{{system.biodata.lieunaissance}}"
|
||||||
data-dtype="String" />
|
data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Age</label>
|
<label class="item-name-label-medium">Age</label>
|
||||||
<input type="text" class="" name="system.biodata.age" value="{{system.biodata.age}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.age" value="{{system.biodata.age}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Nationalité</label>
|
<label class="item-name-label-medium">Nationalité</label>
|
||||||
<input type="text" class="" name="system.biodata.nationalite" value="{{system.biodata.nationalite}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.nationalite" value="{{system.biodata.nationalite}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Enfance</label>
|
<label class="item-name-label-medium">Enfance</label>
|
||||||
<input type="text" class="" name="system.biodata.enfance" value="{{system.biodata.enfance}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.enfance" value="{{system.biodata.enfance}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Vie d'adulte</label>
|
<label class="item-name-label-medium">Vie d'adulte</label>
|
||||||
<input type="text" class="" name="system.biodata.adulte" value="{{system.biodata.adulte}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.adulte" value="{{system.biodata.adulte}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
|
||||||
<label class="generic-label">Loisirs</label>
|
|
||||||
<input type="text" class="" name="system.biodata.loisirs" value="{{system.biodata.loisirs}}" data-dtype="String" />
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<ul>
|
<ul>
|
||||||
<li class="flexrow item">
|
|
||||||
<label class="generic-label">Milieu social</label>
|
|
||||||
<input type="text" class="" name="system.biodata.milieusocial" value="{{system.biodata.milieusocial}}" data-dtype="String" />
|
|
||||||
</li>
|
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Profession</label>
|
<label class="item-name-label-medium">Résidence</label>
|
||||||
<input type="text" class="" name="system.biodata.profession" value="{{system.biodata.profession}}" data-dtype="String" />
|
|
||||||
</li>
|
|
||||||
<li class="item flexrow">
|
|
||||||
<label class="generic-label">Résidence</label>
|
|
||||||
<input type="text" class="" name="system.biodata.residence" value="{{system.biodata.residence}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.residence" value="{{system.biodata.residence}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Singularité</label>
|
<label class="item-name-label-medium">Singularité</label>
|
||||||
<input type="text" class="" name="system.biodata.singularite" value="{{system.biodata.singularite}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.singularite" value="{{system.biodata.singularite}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Orientation politique</label>
|
<label class="item-name-label-medium">Loisirs</label>
|
||||||
|
<input type="text" class="" name="system.biodata.loisirs" value="{{system.biodata.loisirs}}" data-dtype="String" />
|
||||||
|
</li>
|
||||||
|
<li class="item flexrow">
|
||||||
|
<label class="item-name-label-medium">Orientation politique</label>
|
||||||
<input type="text" class="" name="system.biodata.politique" value="{{system.biodata.politique}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.politique" value="{{system.biodata.politique}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow">
|
<li class="item flexrow">
|
||||||
<label class="generic-label">Orientation religieuse</label>
|
<label class="item-name-label-medium">Orientation religieuse</label>
|
||||||
<input type="text" class="" name="system.biodata.religion" value="{{system.biodata.religion}}" data-dtype="String" />
|
<input type="text" class="" name="system.biodata.religion" value="{{system.biodata.religion}}" data-dtype="String" />
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
37
templates/items/item-archetype-sheet.hbs
Normal file
37
templates/items/item-archetype-sheet.hbs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
|
<header class="sheet-header">
|
||||||
|
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}"/>
|
||||||
|
<div class="header-fields">
|
||||||
|
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
{{> systems/fvtt-malefices/templates/items/partial-item-nav.hbs}}
|
||||||
|
|
||||||
|
|
||||||
|
{{!-- Sheet Body --}}
|
||||||
|
<section class="sheet-body">
|
||||||
|
|
||||||
|
{{> systems/fvtt-malefices/templates/items/partial-item-description.hbs}}
|
||||||
|
|
||||||
|
<div class="tab details" data-group="primary" data-tab="details">
|
||||||
|
|
||||||
|
<div class="tab" data-group="primary">
|
||||||
|
<ul>
|
||||||
|
<li class="flexrow">
|
||||||
|
<label class="item-field-label-long">Lame tutélaire</label>
|
||||||
|
<select class="item-field-label-long" type="text" name="system.lametutelaire" value="{{system.lametutelaire}}" data-dtype="String">
|
||||||
|
{{#select system.lametutelaire}}
|
||||||
|
{{#each tarots as |carte key| }}
|
||||||
|
<option value="{{carte._id}}">{{carte.name}}</option>
|
||||||
|
{{/each}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</form>
|
Loading…
x
Reference in New Issue
Block a user