Minot fixes + archetype
This commit is contained in:
		
							
								
								
									
										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> | ||||||
		Reference in New Issue
	
	Block a user