Actor sheet
This commit is contained in:
		| @@ -37,9 +37,11 @@ | ||||
|   "WH.ui.weapons": "Weapons", | ||||
|   "WH.ui.armors": "Armors", | ||||
|   "WH.ui.shields": "Shields", | ||||
|   "WH.ui.weapon": "Weapon", | ||||
|  | ||||
|   "WH.ui.Strength": "Strength", | ||||
|   "WH.ui.Instinct": "Instinct", | ||||
|   "WH.ui.Dexterity": "Dexterity", | ||||
|   "WH.ui.Mind": "Mind", | ||||
|   "WH.ui.Type": "Type", | ||||
|   "WH.ui.HitPoints": "Hit Points", | ||||
| @@ -48,6 +50,7 @@ | ||||
|   "WH.ui.Mana": "Mana", | ||||
|   "WH.ui.Initiative": "Initiative", | ||||
|   "WH.ui.Movement": "Movement", | ||||
|   "WH.ui.power": "Power", | ||||
|    | ||||
|   "WH.ui.Qty": "Qty", | ||||
|   "WH.ui.maxslots": "Max slots", | ||||
|   | ||||
| @@ -137,12 +137,21 @@ export class WarheroActorSheet extends ActorSheet { | ||||
|       this.actor.rollFromType(rollType, statKey) | ||||
|     }); | ||||
|     html.find('.roll-weapon').click((event) => { | ||||
|       const li = $(event.currentTarget).parents(".item"); | ||||
|       const skillId = li.data("item-id") | ||||
|       this.actor.rollWeapon(skillId) | ||||
|       const li = $(event.currentTarget).parents(".item") | ||||
|       const weaponId = li.data("item-id") | ||||
|       this.actor.rollWeapon(weaponId) | ||||
|     }); | ||||
|      | ||||
|      | ||||
|     html.find('.power-roll').click((event) => { | ||||
|       const li = $(event.currentTarget).parents(".item") | ||||
|       const powerId = li.data("item-id") | ||||
|       this.actor.rollPower(powerId) | ||||
|     });     | ||||
|     html.find('.roll-damage').click((event) => { | ||||
|       const li = $(event.currentTarget).parents(".item") | ||||
|       const weaponId = li.data("item-id") | ||||
|       this.actor.rollDamage(weaponId) | ||||
|     });     | ||||
|          | ||||
|     html.find('.lock-unlock-sheet').click((event) => { | ||||
|       this.options.editScore = !this.options.editScore; | ||||
|       this.render(true); | ||||
|   | ||||
| @@ -183,8 +183,22 @@ export class WarheroActor extends Actor { | ||||
|     return comp; | ||||
|   } | ||||
|   /* -------------------------------------------- */ | ||||
|   prepareWeapon(weapon) { | ||||
|     let formula = weapon.system.damage | ||||
|     if (weapon.system.weapontype == "long") { | ||||
|       formula += "+" + this.system.statistics.str.value | ||||
|     } | ||||
|     if (weapon.system.weapontype == "twohanded") { | ||||
|       formula += "+" + Math.floor(this.system.statistics.str.value*1.5) | ||||
|     } | ||||
|     weapon.damageFormula = formula | ||||
|   } | ||||
|   /* -------------------------------------------- */ | ||||
|   getWeapons() { | ||||
|     let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []); | ||||
|     for (let weapon of comp) { | ||||
|       this.prepareWeapon(weapon) | ||||
|     } | ||||
|     WarheroUtility.sortArrayObjectsByName(comp) | ||||
|     return comp; | ||||
|   } | ||||
| @@ -521,6 +535,15 @@ export class WarheroActor extends Actor { | ||||
|     return this.items.find(cond => cond.type == "condition" && cond.system.targetadvantage) | ||||
|   } | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   spentMana( mana) { | ||||
|     if ( Number(mana) > this.system.attributes.mana.value) { | ||||
|       ui.notifications.warn("Not enough Mana points !") | ||||
|       return false | ||||
|     } | ||||
|     this.update({'system.attributes.mana.value': this.system.attributes.mana.value-mana}) | ||||
|     return true | ||||
|   }  | ||||
|   /* -------------------------------------------- */ | ||||
|   getCommonRollData() { | ||||
|     let rollData = WarheroUtility.getBasicRollData() | ||||
| @@ -547,31 +570,41 @@ export class WarheroActor extends Actor { | ||||
|     let weapon = this.items.get(weaponId) | ||||
|     if (weapon) { | ||||
|       weapon = duplicate(weapon) | ||||
|       let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase()) | ||||
|       if (skill) { | ||||
|         skill = duplicate(skill) | ||||
|         WarheroUtility.updateSkill(skill) | ||||
|         let abilityKey = skill.system.ability | ||||
|         let rollData = this.getCommonRollData(abilityKey) | ||||
|         rollData.mode = "weapon" | ||||
|         rollData.skill = skill | ||||
|         rollData.weapon = weapon | ||||
|         rollData.img = weapon.img | ||||
|         if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged | ||||
|           rollData.forceDisadvantage = this.isAttackDisadvantage() | ||||
|         } | ||||
|         /*if (rollData.weapon.system.isranged && rollData.tokensDistance > WarheroUtility.getWeaponMaxRange(rollData.weapon) ) { | ||||
|           ui.notifications.warn(`Your target is out of range of your weapon (max: ${WarheroUtility.getWeaponMaxRange(rollData.weapon)}  - current : ${rollData.tokensDistance})` ) | ||||
|           return | ||||
|         }*/ | ||||
|         this.startRoll(rollData) | ||||
|       } else { | ||||
|         ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name) | ||||
|       } | ||||
|       let rollData = this.getCommonRollData() | ||||
|       rollData.mode = "weapon" | ||||
|       rollData.stat = duplicate(this.system.statistics.dex) | ||||
|       rollData.weapon = weapon | ||||
|       rollData.img = weapon.img | ||||
|       this.startRoll(rollData) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|  | ||||
|   /* -------------------------------------------- */ | ||||
|   rollDamage(weaponId) { | ||||
|     let weapon = this.items.get(weaponId) | ||||
|     if (weapon) { | ||||
|       weapon = duplicate(weapon) | ||||
|       this.prepareWeapon(weapon) | ||||
|       let rollData = this.getCommonRollData() | ||||
|       rollData.mode = "damage" | ||||
|       rollData.weapon = weapon | ||||
|       rollData.img = weapon.img | ||||
|       this.startRoll(rollData) | ||||
|     } | ||||
|   } | ||||
|   /* -------------------------------------------- */ | ||||
|   rollPower(powerId) { | ||||
|     let power = this.items.get(powerId) | ||||
|     if (power) { | ||||
|       power = duplicate(power) | ||||
|       let rollData = this.getCommonRollData() | ||||
|       rollData.mode = "power" | ||||
|       rollData.power = power | ||||
|       rollData.img = power.img | ||||
|       rollData.hasBM = false | ||||
|       this.startRoll(rollData) | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   /* -------------------------------------------- */ | ||||
|   async startRoll(rollData) { | ||||
|     this.syncRoll(rollData) | ||||
|   | ||||
| @@ -58,23 +58,8 @@ export class WarheroRollDialog extends Dialog { | ||||
|     } | ||||
|     $(function () { onLoad(); }); | ||||
|  | ||||
|     html.find('#advantage').change((event) => { | ||||
|       this.rollData.advantage = event.currentTarget.value | ||||
|     }) | ||||
|     html.find('#disadvantage').change((event) => { | ||||
|       this.rollData.disadvantage = event.currentTarget.value | ||||
|     }) | ||||
|     html.find('#rollAdvantage').change((event) => { | ||||
|       this.rollData.rollAdvantage = event.currentTarget.value | ||||
|     }) | ||||
|     html.find('#useshield').change((event) => { | ||||
|       this.rollData.useshield = event.currentTarget.checked | ||||
|     }) | ||||
|     html.find('#hasCover').change((event) => { | ||||
|       this.rollData.hasCover = event.currentTarget.value | ||||
|     }) | ||||
|     html.find('#situational').change((event) => { | ||||
|       this.rollData.situational = event.currentTarget.value | ||||
|     html.find('#powerLevel').change((event) => { | ||||
|       this.rollData.powerLevel = event.currentTarget.value | ||||
|     }) | ||||
|     html.find('#bonusMalus').change((event) => { | ||||
|       this.rollData.bonusMalus = Number(event.currentTarget.value) | ||||
|   | ||||
| @@ -540,6 +540,30 @@ export class WarheroUtility { | ||||
|  | ||||
|     let actor = game.actors.get(rollData.actorId) | ||||
|  | ||||
|     if ( rollData.mode == "power") { | ||||
|       let manaCost = Array.from(rollData.powerLevel)[0] | ||||
|       if( actor.spentMana(manaCost)) { | ||||
|         let powerKey  = "level"+rollData.powerLevel | ||||
|         rollData.powerText = rollData.power.system[powerKey] | ||||
|         let msg = await this.createChatWithRollMode(rollData.alias, { | ||||
|           content: await renderTemplate(`systems/fvtt-warhero/templates/chat-generic-result.html`, rollData) | ||||
|         }) | ||||
|         msg.setFlag("world", "rolldata", rollData) | ||||
|       } | ||||
|       return | ||||
|     } | ||||
|     if ( rollData.mode == "damage") { | ||||
|       let myRoll = new Roll(rollData.weapon.damageFormula + "+" + rollData.bonusMalus).roll({ async: false }) | ||||
|       await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode")) | ||||
|       rollData.roll = myRoll | ||||
|    | ||||
|       let msg = await this.createChatWithRollMode(rollData.alias, { | ||||
|         content: await renderTemplate(`systems/fvtt-warhero/templates/chat-generic-result.html`, rollData) | ||||
|       }) | ||||
|       msg.setFlag("world", "rolldata", rollData) | ||||
|       return | ||||
|     } | ||||
|  | ||||
|     // ability/save/size => 0 | ||||
|     let diceFormula = "1d20" | ||||
|     if ( rollData.stat) { | ||||
| @@ -667,7 +691,9 @@ export class WarheroUtility { | ||||
|       rollId: randomID(16), | ||||
|       rollMode: game.settings.get("core", "rollMode"), | ||||
|       advantage: "none", | ||||
|       bonusMalus: 0 | ||||
|       bonusMalus: 0, | ||||
|       powerLevel: "1", | ||||
|       hasBM: true | ||||
|     } | ||||
|     WarheroUtility.updateWithTarget(rollData) | ||||
|     return rollData | ||||
|   | ||||
| @@ -100,7 +100,7 @@ | ||||
|   "styles": [ | ||||
|     "styles/simple.css" | ||||
|   ], | ||||
|   "version": "10.0.6", | ||||
|   "version": "10.0.7", | ||||
|   "compatibility": { | ||||
|     "minimum": "10", | ||||
|     "verified": "10", | ||||
| @@ -108,7 +108,7 @@ | ||||
|   }, | ||||
|   "title": "Warhero RPG", | ||||
|   "manifest": "https://www.uberwald.me/gitea/public/fvtt-warhero/raw/branch/master/system.json", | ||||
|   "download": "https://www.uberwald.me/gitea/uberwald/fvtt-warhero/archive/fvtt-warhero-10.0.6.zip", | ||||
|   "download": "https://www.uberwald.me/gitea/uberwald/fvtt-warhero/archive/fvtt-warhero-10.0.7.zip", | ||||
|   "url": "https://www.uberwald.me/gitea/public/fvtt-warhero", | ||||
|   "background": "images/ui/warhero_welcome_page.webp", | ||||
|   "id": "fvtt-warhero" | ||||
|   | ||||
| @@ -28,9 +28,9 @@ | ||||
|             "style": "dropdown", | ||||
|             "value": 0 | ||||
|           }, | ||||
|           "ist": { | ||||
|             "label": "WH.ui.Instinct", | ||||
|             "abbrev": "ist", | ||||
|           "dex": { | ||||
|             "label": "WH.ui.Dexterity", | ||||
|             "abbrev": "dex", | ||||
|             "style": "dropdown", | ||||
|             "value": 0 | ||||
|           }, | ||||
|   | ||||
| @@ -82,7 +82,7 @@ | ||||
|               <span class="item-name-label-header-long"> | ||||
|                 <h3><label class="items-title-text">Weapons</label></h3> | ||||
|               </span> | ||||
|               <span class="item-field-label-short"> | ||||
|               <span class="item-field-label-medium"> | ||||
|                 <label class="short-label">{{localize "WH.ui.Type"}}</label> | ||||
|               </span> | ||||
|               <span class="item-field-label-medium"> | ||||
| @@ -93,11 +93,11 @@ | ||||
|             <li class="item flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}"> | ||||
|               <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" | ||||
|                   src="{{weapon.img}}" /></a> | ||||
|               <span class="item-name-label-long"><a class ="roll-weapon">{{weapon.name}}</a></span> | ||||
|               <span class="item-name-label-long"><a class="roll-weapon"><i class="fa-solid fa-dice-d20"></i>{{weapon.name}}</a></span> | ||||
|  | ||||
|               <span class="item-field-label-short">{{weapon.system.weapontype}}</span> | ||||
|               <span class="item-field-label-medium">{{weapon.system.weapontype}}</span> | ||||
|  | ||||
|               <span class="item-field-label-medium">{{perk.system.damage}}</span> | ||||
|               <span class="item-field-label-medium"><a class="roll-damage"><i class="fa-solid fa-dice-d20"></i>{{weapon.damageFormula}}</a></span> | ||||
|  | ||||
|               <div class="item-filler"> </div> | ||||
|               <div class="item-controls item-controls-fixed"> | ||||
| @@ -125,7 +125,7 @@ | ||||
|             <li class="item flexrow list-item list-item-shadow" data-item-id="{{shield._id}}"> | ||||
|               <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" | ||||
|                   src="{{shield.img}}" /></a> | ||||
|               <span class="item-name-label-long"><a class ="roll-weapon">{{shield.name}}</a></span> | ||||
|               <span class="item-name-label-long">{{shield.name}}</span> | ||||
|  | ||||
|               <span class="item-field-label-short">{{shield.system.shieldtype}}</span> | ||||
|  | ||||
| @@ -157,7 +157,7 @@ | ||||
|             <li class="item flexrow list-item list-item-shadow" data-item-id="{{armor._id}}"> | ||||
|               <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" | ||||
|                   src="{{armor.img}}" /></a> | ||||
|               <span class="item-name-label-long"><a class ="roll-weapon">{{armor.name}}</a></span> | ||||
|               <span class="item-name-label-long">{{armor.name}}</span> | ||||
|  | ||||
|               <span class="item-field-label-short">{{armor.system.armortype}}</span> | ||||
|  | ||||
| @@ -193,7 +193,7 @@ | ||||
|             <a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" | ||||
|                 src="{{power.img}}" /></a> | ||||
|             <span class="item-name-label"> | ||||
|               <a class="power-roll">{{power.name}}</a> | ||||
|               <a class="power-roll"><i class="fa-solid fa-dice-d20"></i>{{power.name}}</a> | ||||
|             </span> | ||||
|             <div class="item-filler"> </div> | ||||
|             <div class="item-controls item-controls-fixed"> | ||||
|   | ||||
| @@ -13,19 +13,26 @@ | ||||
|   </div> | ||||
|   {{/if}} | ||||
|  | ||||
|   <div class="flexcol"> | ||||
|     </div> | ||||
|   <div> | ||||
|     <ul> | ||||
|       {{#if stat}} | ||||
|       <li>{{localize stat.label}} : {{stat.value}}</li> | ||||
|       {{/if}} | ||||
|       {{#if weapon}} | ||||
|       <li>{{localize "WH.ui.weapon"}} : {{weapon.name}}</li> | ||||
|       {{/if}} | ||||
|       {{#if hasBM}} | ||||
|       <li>Bonus/Malus : {{bonusMalus}}</li> | ||||
|       {{/if}} | ||||
|        | ||||
|       {{#if power}} | ||||
|       <li>{{localize "WH.ui.power"}} : {{power.name}}</li> | ||||
|       <li>{{{powerText}}}</li> | ||||
|       {{else}} | ||||
|       <li><strong>Result : {{roll.total}} </strong></li> | ||||
|       {{/if}} | ||||
|  | ||||
|     <div> | ||||
|       <ul> | ||||
|         {{#if stat}} | ||||
|         <li>{{localize stat.label}} : {{stat.value}}</li> | ||||
|         {{/if}} | ||||
|         <li>Bonus/Malus : {{bonusMalus}}</li> | ||||
|    | ||||
|         <li><strong>Result : {{roll.total}} </strong></li> | ||||
|  | ||||
|       </ul>   | ||||
|     </div> | ||||
|     </ul>   | ||||
|   </div> | ||||
|  | ||||
|   </div> | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|   <span class="item-field-label-medium" name="{{key}}"> | ||||
|     <h4 class="item-field-label-medium"> | ||||
|       {{#if roll}} | ||||
|       <a class="roll-this stat-margin" data-type="{{path}}" data-key="{{key}}">{{localize stat.label}}</a> | ||||
|       <i class="fa-solid fa-dice-d20"></i><a class="roll-this stat-margin" data-type="{{path}}" data-key="{{key}}">{{localize stat.label}}</a> | ||||
|       {{else}} | ||||
|       {{localize stat.label}} | ||||
|       {{/if}} | ||||
|   | ||||
| @@ -17,8 +17,14 @@ | ||||
|  | ||||
|       {{#if weapon}} | ||||
|       <div class="flexrow"> | ||||
|         <span class="roll-dialog-label">Weapon : </span> | ||||
|         <span class="roll-dialog-label">{{weapon.name}}</span> | ||||
|         <span class="item-field-label-medium">Weapon : </span> | ||||
|         <span class="item-field-label-medium">{{weapon.name}}</span> | ||||
|         {{#if (eq mode "damage")}} | ||||
|           <div class="flexrow"> | ||||
|             <span class="item-field-label-medium">Damage : </span> | ||||
|             <span class="item-field-label-medium">{{weapon.damageFormula}}</span> | ||||
|           </div> | ||||
|         {{/if}} | ||||
|       </div> | ||||
|       {{/if}} | ||||
|  | ||||
| @@ -33,6 +39,26 @@ | ||||
|       </div> | ||||
|       {{/if}} | ||||
|  | ||||
|       {{#if power}} | ||||
|       <div class="flexrow"> | ||||
|         <span class="item-field-label-medium">Power : </span> | ||||
|         <span class="item-field-label-medium">{{power.name}}</span> | ||||
|       </div> | ||||
|       <div class="flexrow"> | ||||
|         <span class="item-field-label-medium">Power Level : </span> | ||||
|         <select class="item-field-label-medium" type="text" id="powerLevel" value="{{powerLevel}}"> | ||||
|           {{#select powerLevel}} | ||||
|             <option value="1">1</option> | ||||
|             <option value="2">2</option> | ||||
|             <option value="3">3</option> | ||||
|             <option value="4_1">4 - 1</option> | ||||
|             <option value="4_2">4 - 2</option> | ||||
|           {{/select}} | ||||
|         </select> | ||||
|       </div> | ||||
|       {{/if}} | ||||
|  | ||||
|       {{#if hasBM}} | ||||
|       <div class="flexrow"> | ||||
|         <span class="item-field-label-medium">Bonus/Malus : </span> | ||||
|         <select class="item-field-label-medium" type="text" id="bonusMalus" value="{{bonusMalus}}"> | ||||
| @@ -53,6 +79,8 @@ | ||||
|           {{/select}} | ||||
|         </select> | ||||
|       </div> | ||||
|   </div> | ||||
|       {{/if}} | ||||
|  | ||||
|     </div> | ||||
|  | ||||
| </form> | ||||
		Reference in New Issue
	
	Block a user