Add skill+weapon rolls
This commit is contained in:
		| @@ -90,7 +90,7 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet | ||||
|       case "skills": | ||||
|         context.tab = context.tabs.skills | ||||
|         context.skills = doc.itemTypes.skill | ||||
|         context.gifts = doc.itemTypes.gifts | ||||
|         context.gifts = doc.itemTypes.gift | ||||
|         context.vulnerabilities = doc.itemTypes.vulnerability | ||||
|         break | ||||
|       case "spells": | ||||
| @@ -153,6 +153,33 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   getBestWeaponClassSkill(skills, rollType, multiplier = 1.0) { | ||||
|     let maxValue = 0 | ||||
|     let goodSkill = skills[0] | ||||
|     for (let s of skills) { | ||||
|       if (rollType === "weapon-attack") { | ||||
|         if (s.system.weaponBonus.attack > maxValue) { | ||||
|           maxValue = Number(s.system.weaponBonus.attack) | ||||
|           goodSkill = s | ||||
|         } | ||||
|       } | ||||
|       if (rollType === "weapon-defense") { | ||||
|         if (s.system.weaponBonus.defense > maxValue) { | ||||
|           maxValue = Number(s.system.weaponBonus.defense) | ||||
|           goodSkill = s | ||||
|         } | ||||
|       } | ||||
|       if (rollType === "weapon-damage") { | ||||
|         if (s.system.weaponBonus.damage > maxValue) { | ||||
|           maxValue = Number(s.system.weaponBonus.damage) | ||||
|           goodSkill = s | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     goodSkill.weaponSkillModifier = maxValue * multiplier | ||||
|     return goodSkill | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Handles the roll action triggered by user interaction. | ||||
|    * | ||||
| @@ -167,9 +194,9 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet | ||||
|    * (save, resource, or damage) based on the target element's data attributes. It retrieves the | ||||
|    * corresponding value from the document's system and performs the roll. | ||||
|    */ | ||||
|  | ||||
|   async _onRoll(event, target) { | ||||
|     if (this.isEditMode) return | ||||
|     console.log(event, target) | ||||
|     const rollType = event.target.dataset.rollType | ||||
|     let rollTarget | ||||
|     let rollKey = event.target.dataset.rollKey | ||||
| @@ -181,11 +208,59 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet | ||||
|       case "save": | ||||
|         rollTarget = foundry.utils.duplicate(this.document.system.saves[rollKey]) | ||||
|         rollTarget.rollKey = rollKey | ||||
|         rollTarget.rollDice = event.target.dataset?.rollDice | ||||
|         break | ||||
|       case "skill": | ||||
|         rollTarget = this.actor.items.find((i) => i.type === "skill" && i.id === rollKey) | ||||
|         rollTarget.rollKey = rollKey | ||||
|         if (rollTarget.system.category === "weapon") { | ||||
|           ui.notifications.warn(game.i18n.localize("LETHALFANTASY.Notifications.rollFromWeapon")) | ||||
|           return | ||||
|         } | ||||
|         break | ||||
|       case "weapon-attack": | ||||
|       case "weapon-defense": | ||||
|       case "weapon-damage": | ||||
|         let weapon = this.actor.items.find((i) => i.type === "weapon" && i.id === rollKey) | ||||
|         let skill | ||||
|         let skills = this.actor.items.filter((i) => i.type === "skill" && i.name.toLowerCase() === weapon.name.toLowerCase()) | ||||
|         if (skills.length > 0) { | ||||
|           skill = this.getBestWeaponClassSkill(skills, rollType, 1.0) | ||||
|         } else { | ||||
|           skills = this.actor.items.filter((i) => i.type === "skill" && i.name.toLowerCase().replace(" skill", "") === weapon.name.toLowerCase()) | ||||
|           if (skills.length > 0) { | ||||
|             skill = this.getBestWeaponClassSkill(skills, rollType, 1.0) | ||||
|           } else { | ||||
|             skills = this.actor.items.filter((i) => i.type === "skill" && i.system.weaponClass === weapon.system.weaponClass) | ||||
|             if (skills.length > 0) { | ||||
|               skill = this.getBestWeaponClassSkill(skills, rollType, 0.5) | ||||
|             } else { | ||||
|               skills = this.actor.items.filter((i) => i.type === "skill" && i.system.weaponClass.includes(SYSTEM.WEAPON_CATEGORIES[weapon.system.weaponClass])) | ||||
|               if (skills.length > 0) { | ||||
|                 skill = this.getBestWeaponClassSkill(skills, rollType, 0.25) | ||||
|               } else { | ||||
|                 ui.notifications.warn(game.i18n.localize("LETHALFANTASY.Notifications.skillNotFound")) | ||||
|                 return | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         if (!weapon || !skill) { | ||||
|           console.error("Weapon or skill not found", weapon, skill) | ||||
|           ui.notifications.warn(game.i18n.localize("LETHALFANTASY.Notifications.skillNotFound")) | ||||
|           return | ||||
|         } | ||||
|         rollTarget = skill | ||||
|         rollTarget.weapon = weapon | ||||
|         rollTarget.weaponSkillModifier = skill.weaponSkillModifier | ||||
|         rollTarget.rollKey = rollKey | ||||
|         rollTarget.combat = foundry.utils.duplicate(this.actor.system.combat) | ||||
|         break | ||||
|       case ROLL_TYPE.DAMAGE: | ||||
|         rollTarget = elt.dataset.itemId | ||||
|         break | ||||
|       default: | ||||
|         ui.notifications.error(game.i18n.localize("LETHALFANTASY.Notifications.rollTypeNotFound") + String(rollType)) | ||||
|         break | ||||
|     } | ||||
|     await this.document.system.roll(rollType, rollTarget) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user