|  |  |  | @@ -58,12 +58,12 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |   computeHitPoints() { | 
		
	
		
			
				|  |  |  |  |     if (this.type == "character") { | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   }  | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   rebuildSkills() { | 
		
	
		
			
				|  |  |  |  |     let armorPenalties = Avd12Utility.getArmorPenalty( this.items.find( item => item.type == "armor") ) | 
		
	
		
			
				|  |  |  |  |     let shieldPenalties = Avd12Utility.getArmorPenalty( this.items.find( item => item.type == "shield") ) | 
		
	
		
			
				|  |  |  |  |     let armorPenalties = Avd12Utility.getArmorPenalty(this.items.find(item => item.type == "armor")) | 
		
	
		
			
				|  |  |  |  |     let shieldPenalties = Avd12Utility.getArmorPenalty(this.items.find(item => item.type == "shield")) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     for (let attrKey in this.system.attributes) { | 
		
	
		
			
				|  |  |  |  |       let attr = this.system.attributes[attrKey] | 
		
	
	
		
			
				
					
					|  |  |  | @@ -76,17 +76,17 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |           skill.modifier += Number(trait.system.bonusvalue) | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         // Apply armor penalties | 
		
	
		
			
				|  |  |  |  |         if ( armorPenalties[skillKey]) { | 
		
	
		
			
				|  |  |  |  |         if (armorPenalties[skillKey]) { | 
		
	
		
			
				|  |  |  |  |           console.log("Found armor penalties : ", armorPenalties, skillKey) | 
		
	
		
			
				|  |  |  |  |           skill.modifier += Number(armorPenalties[skillKey]) | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         // Apply shield penalties | 
		
	
		
			
				|  |  |  |  |         if ( shieldPenalties[skillKey]) { | 
		
	
		
			
				|  |  |  |  |         if (shieldPenalties[skillKey]) { | 
		
	
		
			
				|  |  |  |  |           console.log("Found shield penalties : ", shieldPenalties, skillKey) | 
		
	
		
			
				|  |  |  |  |           skill.modifier += Number(shieldPenalties[skillKey]) | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |         // Process additionnal bonuses | 
		
	
		
			
				|  |  |  |  |         for(let item of this.items) { | 
		
	
		
			
				|  |  |  |  |         for (let item of this.items) { | 
		
	
		
			
				|  |  |  |  |           if (item.system.bonus && item.system.bonus[skillKey]) { | 
		
	
		
			
				|  |  |  |  |             skill.modifier += Number(item.system.bonus[skillKey].value) | 
		
	
		
			
				|  |  |  |  |           } | 
		
	
	
		
			
				
					
					|  |  |  | @@ -95,19 +95,32 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |    | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   rebuildMitigations() { | 
		
	
		
			
				|  |  |  |  |     for (let mitiKey in this.system.mitigation) { | 
		
	
		
			
				|  |  |  |  |       let mitigation = this.system.mitigation[mitiKey] | 
		
	
		
			
				|  |  |  |  |       for(let item of this.items) { | 
		
	
		
			
				|  |  |  |  |       for (let item of this.items) { | 
		
	
		
			
				|  |  |  |  |         if (item.system.mitigation && item.system.mitigation[mitiKey]) { | 
		
	
		
			
				|  |  |  |  |           mitigation.value += Number(item.system.mitigation[mitiKey].value) | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   rebuildBonus() { | 
		
	
		
			
				|  |  |  |  |     for (let bonusKey in this.system.bonus) { | 
		
	
		
			
				|  |  |  |  |       let bonus = this.system.bonus[bonusKey] | 
		
	
		
			
				|  |  |  |  |       for (let content in bonus) { | 
		
	
		
			
				|  |  |  |  |         let dataPath = bonusKey + "." + content | 
		
	
		
			
				|  |  |  |  |         //console.log("Parsing", bonusKey, content, dataPath) | 
		
	
		
			
				|  |  |  |  |         let availableTraits = this.items.filter(t => t.type == "trait" && t.system.computebonus && t.system.bonusdata == dataPath) | 
		
	
		
			
				|  |  |  |  |         for (let trait of availableTraits) { | 
		
	
		
			
				|  |  |  |  |           bonus[content] += Number(trait.system.bonusvalue) | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   prepareDerivedData() { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
	
		
			
				
					
					|  |  |  | @@ -118,6 +131,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       this.rebuildSkills() | 
		
	
		
			
				|  |  |  |  |       this.rebuildMitigations() | 
		
	
		
			
				|  |  |  |  |       this.rebuildBonus() | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     super.prepareDerivedData(); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -133,7 +147,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |     this.rebuildSkills() | 
		
	
		
			
				|  |  |  |  |     super._onUpdateEmbeddedDocuments(embeddedName, ...args) | 
		
	
		
			
				|  |  |  |  |   }*/ | 
		
	
		
			
				|  |  |  |  |    | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   getEncumbranceCapacity() { | 
		
	
		
			
				|  |  |  |  |     return 1; | 
		
	
	
		
			
				
					
					|  |  |  | @@ -146,10 +160,23 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |     return comp; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   getEquippedWeapons() { | 
		
	
		
			
				|  |  |  |  |     let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []); | 
		
	
		
			
				|  |  |  |  |     let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []) | 
		
	
		
			
				|  |  |  |  |     comp.forEach(item => { | 
		
	
		
			
				|  |  |  |  |       this.prepareWeapon(item) | 
		
	
		
			
				|  |  |  |  |     }) | 
		
	
		
			
				|  |  |  |  |     Avd12Utility.sortArrayObjectsByName(comp) | 
		
	
		
			
				|  |  |  |  |     return comp; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   getWeapons() { | 
		
	
		
			
				|  |  |  |  |     let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []) | 
		
	
		
			
				|  |  |  |  |     comp.forEach(item => { | 
		
	
		
			
				|  |  |  |  |       this.prepareWeapon(item) | 
		
	
		
			
				|  |  |  |  |     }) | 
		
	
		
			
				|  |  |  |  |     Avd12Utility.sortArrayObjectsByName(comp) | 
		
	
		
			
				|  |  |  |  |     return comp; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   getArmors() { | 
		
	
		
			
				|  |  |  |  |     let comp = duplicate(this.items.filter(item => item.type == 'armor') || []); | 
		
	
	
		
			
				
					
					|  |  |  | @@ -199,29 +226,29 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |     return comp; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   addDamages( damage) { | 
		
	
		
			
				|  |  |  |  |   addDamages(damage, bonusDamage) { | 
		
	
		
			
				|  |  |  |  |     //console.log(damage) | 
		
	
		
			
				|  |  |  |  |     if ( damage.damagetype != "none" && damage.dice ) { | 
		
	
		
			
				|  |  |  |  |       damage.normal   = damage.dice + '+' + damage.bonus  | 
		
	
		
			
				|  |  |  |  |       damage.critical = damage.dice + '+' + Number(damage.bonus)*2 | 
		
	
		
			
				|  |  |  |  |     if (damage.damagetype != "none" && damage.dice) { | 
		
	
		
			
				|  |  |  |  |       let fullBonus = Number(bonusDamage) + Number(damage.bonus) | 
		
	
		
			
				|  |  |  |  |       damage.normal = damage.dice + '+' + fullBonus | 
		
	
		
			
				|  |  |  |  |       damage.critical = damage.dice + '+' + Number(fullBonus) * 2 | 
		
	
		
			
				|  |  |  |  |       let parser = damage.dice.match(/(\d+)(d\d+)/) | 
		
	
		
			
				|  |  |  |  |       let nbDice = 2 | 
		
	
		
			
				|  |  |  |  |       if (parser && parser[1]) { | 
		
	
		
			
				|  |  |  |  |         nbDice = Number(parser[1]) * 2 | 
		
	
		
			
				|  |  |  |  |       }  | 
		
	
		
			
				|  |  |  |  |       damage.brutal   = nbDice + parser[2] + "+" + Number(damage.bonus)*2 | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       damage.brutal = nbDice + parser[2] + "+" + Number(fullBonus) * 2 | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   getWeapons() { | 
		
	
		
			
				|  |  |  |  |     let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []) | 
		
	
		
			
				|  |  |  |  |     comp.forEach(item => { | 
		
	
		
			
				|  |  |  |  |       this.addDamages(item.system.damages.primary) | 
		
	
		
			
				|  |  |  |  |       this.addDamages(item.system.damages.secondary) | 
		
	
		
			
				|  |  |  |  |       this.addDamages(item.system.damages.tertiary) | 
		
	
		
			
				|  |  |  |  |     }) | 
		
	
		
			
				|  |  |  |  |     Avd12Utility.sortArrayObjectsByName(comp) | 
		
	
		
			
				|  |  |  |  |     return comp; | 
		
	
		
			
				|  |  |  |  |   prepareWeapon(weapon) { | 
		
	
		
			
				|  |  |  |  |     weapon.attackBonus = this.system.bonus.weapon.attack + this.system.bonus[weapon.system.weapontype].attack | 
		
	
		
			
				|  |  |  |  |     let bonusDamage = this.system.bonus.weapon.damage + this.system.bonus[weapon.system.weapontype].damage | 
		
	
		
			
				|  |  |  |  |     this.addDamages(weapon.system.damages.primary, bonusDamage) | 
		
	
		
			
				|  |  |  |  |     bonusDamage = this.system.bonus.weapon.damage + this.system.bonus[weapon.system.weapontype].crits | 
		
	
		
			
				|  |  |  |  |     this.addDamages(weapon.system.damages.secondary, bonusDamage) | 
		
	
		
			
				|  |  |  |  |     bonusDamage = this.system.bonus.weapon.damage + this.system.bonus[weapon.system.weapontype].brutals | 
		
	
		
			
				|  |  |  |  |     this.addDamages(weapon.system.damages.tertiary + bonusDamage) | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   getItemById(id) { | 
		
	
	
		
			
				
					
					|  |  |  | @@ -403,7 +430,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   async preprocessItem(event, item, onDrop = false) { | 
		
	
		
			
				|  |  |  |  |     //console.log('ITEM', item) | 
		
	
		
			
				|  |  |  |  |     if ( item.system.focus && item.system.focus?.isfocus) { | 
		
	
		
			
				|  |  |  |  |     if (item.system.focus && item.system.focus?.isfocus) { | 
		
	
		
			
				|  |  |  |  |       let focusItem = this.items.find(it => it.system.focus?.isfocus) | 
		
	
		
			
				|  |  |  |  |       if (focusItem) { | 
		
	
		
			
				|  |  |  |  |         ui.notifications.warn("You already have a Focus Item in your equipment.") | 
		
	
	
		
			
				
					
					|  |  |  | @@ -421,22 +448,22 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |     let focus = this.items.find(it => it.system.focus?.isfocus) | 
		
	
		
			
				|  |  |  |  |     if (focus) { | 
		
	
		
			
				|  |  |  |  |       let focusData = Avd12Utility.computeFocusData(focus.system.focus) | 
		
	
		
			
				|  |  |  |  |       let focusBonus = this.items.filter( it => it.system.focuspointsbonus > 0).reduce((sum, item2) => sum = item2.system.focuspointsbonus, 0) | 
		
	
		
			
				|  |  |  |  |       let focusregenbonus = this.items.filter( it => it.system.focusregenbonus > 0).reduce((sum, item2) => sum = item2.system.focusregenbonus, 0) | 
		
	
		
			
				|  |  |  |  |       let burnchancebonus = this.items.filter( it => it.system.burnchancebonus > 0).reduce((sum, item2) => sum = item2.system.burnchancebonus, 0) | 
		
	
		
			
				|  |  |  |  |       let focusBonus = this.items.filter(it => it.system.focuspointsbonus > 0).reduce((sum, item2) => sum = item2.system.focuspointsbonus, 0) | 
		
	
		
			
				|  |  |  |  |       let focusregenbonus = this.items.filter(it => it.system.focusregenbonus > 0).reduce((sum, item2) => sum = item2.system.focusregenbonus, 0) | 
		
	
		
			
				|  |  |  |  |       let burnchancebonus = this.items.filter(it => it.system.burnchancebonus > 0).reduce((sum, item2) => sum = item2.system.burnchancebonus, 0) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |       let focusPoints = focusData.focusPoints + focusBonus | 
		
	
		
			
				|  |  |  |  |       let focusRegen = focusData.focusRegen + focusregenbonus | 
		
	
		
			
				|  |  |  |  |       //console.log("Update focus", focusPoints, focusRegen) | 
		
	
		
			
				|  |  |  |  |       if ( focusPoints != this.system.focus.focuspoints || focusRegen != this.system.focus.focusregen) { | 
		
	
		
			
				|  |  |  |  |         let focusData = duplicate(this.system.focus)  | 
		
	
		
			
				|  |  |  |  |       if (focusPoints != this.system.focus.focuspoints || focusRegen != this.system.focus.focusregen) { | 
		
	
		
			
				|  |  |  |  |         let focusData = duplicate(this.system.focus) | 
		
	
		
			
				|  |  |  |  |         focusData.focuspoints = focusPoints | 
		
	
		
			
				|  |  |  |  |         focusData.focusregen = focusRegen | 
		
	
		
			
				|  |  |  |  |         this.update( {'system.focus': focusData}) | 
		
	
		
			
				|  |  |  |  |         this.update({ 'system.focus': focusData }) | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       //console.log("FINAL BONUS", focusBonus, focusregenbonus, burnchancebonus) | 
		
	
		
			
				|  |  |  |  |       return { | 
		
	
		
			
				|  |  |  |  |         focusPoints : focusPoints, | 
		
	
		
			
				|  |  |  |  |         focusPoints: focusPoints, | 
		
	
		
			
				|  |  |  |  |         burnChance: focusData.burnChance + burnchancebonus, | 
		
	
		
			
				|  |  |  |  |         focusRegen: focusRegen, | 
		
	
		
			
				|  |  |  |  |         spellAttackBonus: focusData.spellAttackBonus, | 
		
	
	
		
			
				
					
					|  |  |  | @@ -445,7 +472,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     return { | 
		
	
		
			
				|  |  |  |  |       focusPoints : 0, | 
		
	
		
			
				|  |  |  |  |       focusPoints: 0, | 
		
	
		
			
				|  |  |  |  |       burnChance: 0, | 
		
	
		
			
				|  |  |  |  |       focusRegen: 0, | 
		
	
		
			
				|  |  |  |  |       spellAttackBonus: 0, | 
		
	
	
		
			
				
					
					|  |  |  | @@ -657,7 +684,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |       if (spell.system.spelltype != "utility") { | 
		
	
		
			
				|  |  |  |  |         this.startRoll(rollData) | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |         this.spentFocusPoints( spell ) | 
		
	
		
			
				|  |  |  |  |         this.spentFocusPoints(spell) | 
		
	
		
			
				|  |  |  |  |         let msg = await Avd12Utility.createChatWithRollMode(rollData.alias, { | 
		
	
		
			
				|  |  |  |  |           content: await renderTemplate(`systems/fvtt-avd12/templates/chat/chat-utility-spell.hbs`, rollData) | 
		
	
		
			
				|  |  |  |  |         }) | 
		
	
	
		
			
				
					
					|  |  |  | @@ -669,13 +696,13 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
		
			
				|  |  |  |  |   spentFocusPoints( spell) { | 
		
	
		
			
				|  |  |  |  |   spentFocusPoints(spell) { | 
		
	
		
			
				|  |  |  |  |     let spellCost = Avd12Utility.getSpellCost(spell) | 
		
	
		
			
				|  |  |  |  |     let focusData = duplicate(this.system.focus) | 
		
	
		
			
				|  |  |  |  |     focusData.currentfocuspoints -= spellCost | 
		
	
		
			
				|  |  |  |  |     focusData.currentfocuspoints = Math.max(focusData.currentfocuspoints, 0) | 
		
	
		
			
				|  |  |  |  |     console.log("New fovcus", this.system, focusData) | 
		
	
		
			
				|  |  |  |  |     this.update({'system.focus': focusData}) | 
		
	
		
			
				|  |  |  |  |     this.update({ 'system.focus': focusData }) | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   /* -------------------------------------------- */ | 
		
	
	
		
			
				
					
					|  |  |  | @@ -683,6 +710,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |     let weapon = this.items.get(weaponId) | 
		
	
		
			
				|  |  |  |  |     if (weapon) { | 
		
	
		
			
				|  |  |  |  |       weapon = duplicate(weapon) | 
		
	
		
			
				|  |  |  |  |       this.prepareWeapon(weapon) | 
		
	
		
			
				|  |  |  |  |       let rollData = this.getCommonRollData() | 
		
	
		
			
				|  |  |  |  |       rollData.modifier = this.system.bonus[weapon.system.weapontype] | 
		
	
		
			
				|  |  |  |  |       rollData.mode = "weapon" | 
		
	
	
		
			
				
					
					|  |  |  | @@ -698,7 +726,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |     let weapon = this.items.get(weaponId) | 
		
	
		
			
				|  |  |  |  |     if (weapon) { | 
		
	
		
			
				|  |  |  |  |       weapon = duplicate(weapon) | 
		
	
		
			
				|  |  |  |  |       this.addDamages(weapon.system.damages.primary) | 
		
	
		
			
				|  |  |  |  |       this.prepareWeapon(weapon) | 
		
	
		
			
				|  |  |  |  |       let rollData = this.getCommonRollData() | 
		
	
		
			
				|  |  |  |  |       rollData.damageFormula = weapon.system.damages.primary[damageType] | 
		
	
		
			
				|  |  |  |  |       rollData.mode = "weapon-damage" | 
		
	
	
		
			
				
					
					|  |  |  | @@ -712,7 +740,7 @@ export class Avd12Actor extends Actor { | 
		
	
		
			
				|  |  |  |  |         content: await renderTemplate(`systems/fvtt-avd12/templates/chat/chat-damage-result.hbs`, rollData) | 
		
	
		
			
				|  |  |  |  |       }) | 
		
	
		
			
				|  |  |  |  |       msg.setFlag("world", "rolldata", rollData) | 
		
	
		
			
				|  |  |  |  |    | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |       ui.notifications.warn("Unable to find the relevant weapon ") | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
	
		
			
				
					
					|  |  |  |   |