FIX: Monster rolls
							parent
							
								
									77e1da23b1
								
							
						
					
					
						commit
						573c9fe23c
					
				|  | @ -148,6 +148,7 @@ | |||
|     "OSE.spells.Class": "Class", | ||||
|     "OSE.spells.Duration": "Duration", | ||||
|     "OSE.spells.Level": "Level", | ||||
|     "OSE.spells.Save": "Save", | ||||
| 
 | ||||
|     "OSE.abilities.Requirements": "Requirements", | ||||
| 
 | ||||
|  |  | |||
|  | @ -117,6 +117,14 @@ export class OseActorSheet extends ActorSheet { | |||
|       item.roll(); | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     html.find(".attack a").click(ev => { | ||||
|       let actorObject = this.actor; | ||||
|       let element = event.currentTarget; | ||||
|       let attack = element.parentElement.parentElement.dataset.attack; | ||||
|       actorObject.rollAttack(attack, { event: event }); | ||||
|     }); | ||||
|      | ||||
|     super.activateListeners(html); | ||||
|   } | ||||
| 
 | ||||
|  | @ -141,6 +149,9 @@ export class OseActorSheet extends ActorSheet { | |||
|     super._onResize(event); | ||||
|     let html = $(event.path); | ||||
|     let resizable = html.find(".resizable"); | ||||
|     if (resizable.length == 0) { | ||||
|       return; | ||||
|     } | ||||
|     resizable.each((_, el) => { | ||||
|       let heightDelta = this.position.height - this.options.height; | ||||
|       el.style.height = `${heightDelta + parseInt(el.dataset.baseSize)}px`; | ||||
|  |  | |||
|  | @ -159,13 +159,6 @@ export class OseActorSheetCharacter extends OseActorSheet { | |||
|       actorObject.rollExploration(expl, { event: event }); | ||||
|     }); | ||||
| 
 | ||||
|     html.find(".attack a").click(ev => { | ||||
|       let actorObject = this.actor; | ||||
|       let element = event.currentTarget; | ||||
|       let attack = element.parentElement.parentElement.dataset.attack; | ||||
|       actorObject.rollAttack(attack, { event: event }); | ||||
|     }); | ||||
| 
 | ||||
|     html.find(".ability-score .attribute-mod a").click(ev => { | ||||
|       let box = $(event.currentTarget.parentElement.parentElement.parentElement); | ||||
|       box.children('.attribute-bonuses').slideDown(200); | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| import { OseDice } from '../dice.js'; | ||||
| import { OseDice } from "../dice.js"; | ||||
| 
 | ||||
| export class OseActor extends Actor { | ||||
|   /** | ||||
|  | @ -8,11 +8,11 @@ export class OseActor extends Actor { | |||
|   prepareData() { | ||||
|     super.prepareData(); | ||||
|     const data = this.data.data; | ||||
|      | ||||
| 
 | ||||
|     // Determine Initiative
 | ||||
|     if (game.settings.get('ose', 'individualInit')) { | ||||
|       data.initiative.value = data.initiative.mod ; | ||||
|       if (this.data.type == 'character') { | ||||
|     if (game.settings.get("ose", "individualInit")) { | ||||
|       data.initiative.value = data.initiative.mod; | ||||
|       if (this.data.type == "character") { | ||||
|         const mods = this.computeModifiers(); | ||||
|         data.initiative.value += mods.dex; | ||||
|       } | ||||
|  | @ -20,7 +20,7 @@ export class OseActor extends Actor { | |||
|       data.initiative.value = 0; | ||||
|     } | ||||
|   } | ||||
|    /* -------------------------------------------- */ | ||||
|   /* -------------------------------------------- */ | ||||
|   /*  Socket Listeners and Handlers | ||||
|     /* -------------------------------------------- */ | ||||
| 
 | ||||
|  | @ -29,14 +29,17 @@ export class OseActor extends Actor { | |||
|   /* -------------------------------------------- */ | ||||
|   rollSave(save, options = {}) { | ||||
|     const label = game.i18n.localize(`OSE.saves.${save}.long`); | ||||
|     const rollParts = ['1d20']; | ||||
|     const rollParts = ["1d20"]; | ||||
| 
 | ||||
|     const data = {...this.data, ...{ | ||||
|       rollData : { | ||||
|         type: 'Save', | ||||
|         stat: save | ||||
|       } | ||||
|     }}; | ||||
|     const data = { | ||||
|       ...this.data, | ||||
|       ...{ | ||||
|         rollData: { | ||||
|           type: "Save", | ||||
|           stat: save, | ||||
|         }, | ||||
|       }, | ||||
|     }; | ||||
| 
 | ||||
|     // Roll and return
 | ||||
|     return OseDice.Roll({ | ||||
|  | @ -44,21 +47,24 @@ export class OseActor extends Actor { | |||
|       parts: rollParts, | ||||
|       data: data, | ||||
|       speaker: ChatMessage.getSpeaker({ actor: this }), | ||||
|       flavor: `${label} ${game.i18n.localize('OSE.SavingThrow')}`, | ||||
|       title: `${label} ${game.i18n.localize('OSE.SavingThrow')}`, | ||||
|       flavor: `${label} ${game.i18n.localize("OSE.SavingThrow")}`, | ||||
|       title: `${label} ${game.i18n.localize("OSE.SavingThrow")}`, | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   rollCheck(score, options = {}) { | ||||
|     const label = game.i18n.localize(`OSE.scores.${score}.long`); | ||||
|     const rollParts = ['1d20']; | ||||
|     const rollParts = ["1d20"]; | ||||
| 
 | ||||
|     const data = {...this.data, ...{ | ||||
|       rollData : { | ||||
|         type: 'Check', | ||||
|         stat: score | ||||
|       } | ||||
|     }}; | ||||
|     const data = { | ||||
|       ...this.data, | ||||
|       ...{ | ||||
|         rollData: { | ||||
|           type: "Check", | ||||
|           stat: score, | ||||
|         }, | ||||
|       }, | ||||
|     }; | ||||
| 
 | ||||
|     // Roll and return
 | ||||
|     return OseDice.Roll({ | ||||
|  | @ -66,21 +72,24 @@ export class OseActor extends Actor { | |||
|       parts: rollParts, | ||||
|       data: data, | ||||
|       speaker: ChatMessage.getSpeaker({ actor: this }), | ||||
|       flavor: `${label} ${game.i18n.localize('OSE.AbilityCheck')}`, | ||||
|       title: `${label} ${game.i18n.localize('OSE.AbilityCheck')}`, | ||||
|       flavor: `${label} ${game.i18n.localize("OSE.AbilityCheck")}`, | ||||
|       title: `${label} ${game.i18n.localize("OSE.AbilityCheck")}`, | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   rollExploration(expl, options = {}) { | ||||
|     const label = game.i18n.localize(`OSE.exploration.${expl}.long`); | ||||
|     const rollParts = ['1d6']; | ||||
|     const rollParts = ["1d6"]; | ||||
| 
 | ||||
|     const data = {...this.data, ...{ | ||||
|       rollData : { | ||||
|         type: 'Exploration', | ||||
|         stat: expl | ||||
|       } | ||||
|     }}; | ||||
|     const data = { | ||||
|       ...this.data, | ||||
|       ...{ | ||||
|         rollData: { | ||||
|           type: "Exploration", | ||||
|           stat: expl, | ||||
|         }, | ||||
|       }, | ||||
|     }; | ||||
| 
 | ||||
|     // Roll and return
 | ||||
|     return OseDice.Roll({ | ||||
|  | @ -88,42 +97,45 @@ export class OseActor extends Actor { | |||
|       parts: rollParts, | ||||
|       data: data, | ||||
|       speaker: ChatMessage.getSpeaker({ actor: this }), | ||||
|       flavor: `${label} ${game.i18n.localize('OSE.ExplorationCheck')}`, | ||||
|       title: `${label} ${game.i18n.localize('OSE.ExplorationCheck')}`, | ||||
|       flavor: `${label} ${game.i18n.localize("OSE.ExplorationCheck")}`, | ||||
|       title: `${label} ${game.i18n.localize("OSE.ExplorationCheck")}`, | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   rollAttack(attack, options={}) { | ||||
|   rollAttack(attack, options = {}) { | ||||
|     const label = game.i18n.localize(`OSE.${attack}`); | ||||
|     const rollParts = ['1d20',]; | ||||
|     const rollParts = ["1d20"]; | ||||
| 
 | ||||
|     const mods = this.computeModifiers(); | ||||
|     if (attack == 'Missile') { | ||||
|     if (attack == "Missile") { | ||||
|       rollParts.push( | ||||
|         '+', | ||||
|         "+", | ||||
|         mods.dex.toString(), | ||||
|         '+', | ||||
|         "+", | ||||
|         this.data.data.thac0.mod.missile.toString() | ||||
|       ); | ||||
|     } else if (attack == 'Melee') { | ||||
|     } else if (attack == "Melee") { | ||||
|       rollParts.push( | ||||
|         '+', | ||||
|         "+", | ||||
|         mods.str.toString(), | ||||
|         '+', | ||||
|         "+", | ||||
|         this.data.data.thac0.mod.melee.toString() | ||||
|       ); | ||||
|     } | ||||
|     if (game.settings.get('ose', 'ascendingAC')) { | ||||
|       rollParts.push('+', this.data.data.thac0.bba.toString()); | ||||
|     if (game.settings.get("ose", "ascendingAC")) { | ||||
|       rollParts.push("+", this.data.data.thac0.bba.toString()); | ||||
|     } | ||||
| 
 | ||||
|     const data = {...this.data, ...{ | ||||
|       rollData : { | ||||
|         type: 'Attack', | ||||
|         stat: attack, | ||||
|         mods: mods | ||||
|       } | ||||
|     }}; | ||||
|     const data = { | ||||
|       ...this.data, | ||||
|       ...{ | ||||
|         rollData: { | ||||
|           type: "Attack", | ||||
|           stat: attack, | ||||
|           mods: mods, | ||||
|         }, | ||||
|       }, | ||||
|     }; | ||||
| 
 | ||||
|     // Roll and return
 | ||||
|     return OseDice.Roll({ | ||||
|  | @ -131,12 +143,24 @@ export class OseActor extends Actor { | |||
|       parts: rollParts, | ||||
|       data: data, | ||||
|       speaker: ChatMessage.getSpeaker({ actor: this }), | ||||
|       flavor: `${label} ${game.i18n.localize('OSE.Attack')}`, | ||||
|       title: `${label} ${game.i18n.localize('OSE.Attack')}`, | ||||
|       flavor: `${label} ${game.i18n.localize("OSE.Attack")}`, | ||||
|       title: `${label} ${game.i18n.localize("OSE.Attack")}`, | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   computeModifiers() { | ||||
|     if (this.data.type != "character") { | ||||
|       return { | ||||
|         str: 0, | ||||
|         dex: 0, | ||||
|         int: 0, | ||||
|         con: 0, | ||||
|         wis: 0, | ||||
|         cha: 0, | ||||
|         npc: 0, | ||||
|         init: 0, | ||||
|       }; | ||||
|     } | ||||
|     let _valueToMod = (val) => { | ||||
|       switch (val) { | ||||
|         case 3: | ||||
|  |  | |||
|  | @ -1 +1,17 @@ | |||
| export const OSE = {}; | ||||
| export const OSE = { | ||||
|     scores: { | ||||
|         str: "OSE.scores.str.long", | ||||
|         int: "OSE.scores.int.long", | ||||
|         dex: "OSE.scores.dex.long", | ||||
|         wis: "OSE.scores.wis.long", | ||||
|         con: "OSE.scores.con.long", | ||||
|         cha: "OSE.scores.cha.long" | ||||
|     }, | ||||
|     saves: { | ||||
|         death: "OSE.saves.death.short", | ||||
|         wand: "OSE.saves.wand.short", | ||||
|         paralysis: "OSE.saves.paralysis.short", | ||||
|         breath: "OSE.saves.breath.short", | ||||
|         spell: "OSE.saves.spell.short" | ||||
|     } | ||||
| }; | ||||
|  | @ -3,11 +3,6 @@ | |||
| .ose.sheet.actor { | ||||
|   $detailsHeight: 44px; | ||||
| 
 | ||||
|   ul li { | ||||
|     list-style: none; | ||||
|     padding: 0; | ||||
|   } | ||||
| 
 | ||||
|   .panel { | ||||
|     border: 1px solid $colorDark; | ||||
|     .panel-title { | ||||
|  | @ -77,7 +72,8 @@ | |||
|     position: absolute; | ||||
|     transform: rotate(90deg); | ||||
|     top: 365px; | ||||
|     right: -169px; | ||||
|     right: -168px; | ||||
|     border-bottom: 1px solid black; | ||||
|     width: 320px; | ||||
|     z-index: -1; | ||||
|     .item { | ||||
|  | @ -103,6 +99,7 @@ | |||
|     padding: 5px 0; | ||||
|     height: calc(100% - 140px); | ||||
|     .attributes { | ||||
|       list-style: none; | ||||
|       margin: 0; | ||||
|       padding: 0; | ||||
|       .attribute { | ||||
|  |  | |||
|  | @ -1,37 +1,47 @@ | |||
| .ose.sheet.item { | ||||
|     .profile-img { | ||||
|         border: none; | ||||
|         flex: 0 0 84px; | ||||
|         height: 84px; | ||||
|   .profile-img { | ||||
|     border: none; | ||||
|     flex: 0 0 84px; | ||||
|     height: 84px; | ||||
|   } | ||||
|   .sheet-body { | ||||
|     .stats { | ||||
|       flex: 0 0 90px; | ||||
|       border-right: 1px groove rgba(0, 0, 0, 0.2); | ||||
|       padding-right: 2px; | ||||
|       font-size: 13px; | ||||
|       .form-group { | ||||
|         margin: 2px; | ||||
|         border: 1px solid rgba(0, 0, 0, 0.15); | ||||
|         label { | ||||
|           background: rgba(0, 0, 0, 0.1); | ||||
|           padding: 0 4px; | ||||
|         } | ||||
|         input { | ||||
|           border-bottom: none; | ||||
|           margin: auto 0; | ||||
|         } | ||||
|       } | ||||
|       .block-input { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|         text-align: center; | ||||
|       } | ||||
|       &.narrow { | ||||
|         .form-group { | ||||
|           label { | ||||
|           } | ||||
|           input { | ||||
|             height: 18px; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     .sheet-body { | ||||
|         .stats { | ||||
|             flex: 0 0 90px; | ||||
|             border-right: 1px groove rgba(0, 0, 0, 0.2); | ||||
|             padding-right: 2px; | ||||
|             .form-group { | ||||
|                 margin: 2px; | ||||
|                 border: 1px solid rgba(0, 0, 0, 0.15); | ||||
|                 label { | ||||
|                     background: rgba(0, 0, 0, 0.1); | ||||
|                     padding: 0 4px; | ||||
|                 } | ||||
|                 input { | ||||
|                     border-bottom: none; | ||||
|                     margin: auto 0; | ||||
|                 } | ||||
|             } | ||||
|             .block-input { | ||||
|                 display: flex; | ||||
|                 flex-direction: column; | ||||
|                 text-align: center; | ||||
|             } | ||||
|         } | ||||
|         .editor { | ||||
|             height: 240px; | ||||
|         } | ||||
|         .weapon-editor .editor { | ||||
|             height: 215px; | ||||
|         } | ||||
|      } | ||||
| } | ||||
|     .editor { | ||||
|       height: 240px; | ||||
|     } | ||||
|     .weapon-editor .editor { | ||||
|       height: 215px; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ | |||
|         "movement": { | ||||
|           "base": 120 | ||||
|         }, | ||||
|         "initative": { | ||||
|         "initiative": { | ||||
|           "value": 0, | ||||
|           "mod": 0 | ||||
|         } | ||||
|  | @ -132,7 +132,6 @@ | |||
|         "alignment": "", | ||||
|         "xp": 0, | ||||
|         "treasure": "", | ||||
|         "size": "", | ||||
|         "appearing": "", | ||||
|         "morale": 0 | ||||
|       }, | ||||
|  | @ -178,7 +177,8 @@ | |||
|       "roll": "", | ||||
|       "description": "", | ||||
|       "memorized": false, | ||||
|       "cast": false | ||||
|       "cast": false, | ||||
|       "save": "" | ||||
|     }, | ||||
|     "ability": { | ||||
|       "requirements": "", | ||||
|  |  | |||
|  | @ -131,7 +131,7 @@ | |||
|                         {{ localize "OSE.HitDiceShort" }} | ||||
|                     </h4> | ||||
|                     <div class="attribute-value"> | ||||
|                         <input name="data.hp.hd" type="text" value="{{data.hp.hd}}" placeholder="0" | ||||
|                         <input name="data.hp.hd" type="text" value="{{data.hp.hd}}" placeholder="" | ||||
|                             data-dtype="String" /> | ||||
|                     </div> | ||||
|                 </li> | ||||
|  |  | |||
|  | @ -6,29 +6,29 @@ | |||
|   <ul class="summary flexrow"> | ||||
|     <li> | ||||
|       <input type="text" name="data.details.title" value="{{data.details.title}}" | ||||
|         placeholder="{{ localize 'OSE.Title' }}" /> | ||||
|          /> | ||||
|       <label>{{localize 'OSE.Title'}}</label> | ||||
|     </li> | ||||
|     <li> | ||||
|       <input type="text" name="data.details.alignment" value="{{data.details.alignment}}" | ||||
|         placeholder="{{ localize 'OSE.Alignment' }}" /> | ||||
|          /> | ||||
|       <label>{{localize 'OSE.Alignment'}}</label> | ||||
|     </li> | ||||
|   </ul> | ||||
|   <ul class="summary flexrow"> | ||||
|     <li class="flex3"> | ||||
|       <input type="text" name="data.details.class" value="{{data.details.class}}" | ||||
|         placeholder="{{ localize 'OSE.Class' }}" /> | ||||
|         /> | ||||
|       <label>{{localize 'OSE.Class'}}</label> | ||||
|     </li> | ||||
|     <li> | ||||
|       <input type="text" name="data.details.level" value="{{data.details.level}}" | ||||
|         placeholder="{{ localize 'OSE.Level' }}" /> | ||||
|          /> | ||||
|       <label>{{localize 'OSE.Level'}}</label> | ||||
|     </li> | ||||
|     <li class="flex2"> | ||||
|       <input type="text" name="data.details.xp.value" value="{{data.details.xp.value}}" | ||||
|         placeholder="{{ localize 'OSE.Experience' }}" /> | ||||
|          /> | ||||
|       <label>{{localize 'OSE.Experience'}}</label> | ||||
|       {{#if data.details.xp.bonus}} | ||||
|       <span class="xp-bonus">+{{data.details.xp.bonus}}%</span> | ||||
|  |  | |||
|  | @ -3,17 +3,16 @@ | |||
|         <li class="attribute health"> | ||||
|             <h4 class="attribute-name box-title" title="{{localize 'OSE.Health'}}">{{ localize "OSE.HealthShort" }}</h4> | ||||
|             <div class="attribute-value flexrow"> | ||||
|                 <input name="data.hp.value" type="text" value="{{data.hp.value}}" data-dtype="Number" | ||||
|                     placeholder="10" /> | ||||
|                 <input name="data.hp.value" type="text" value="{{data.hp.value}}" data-dtype="Number" placeholder="0" /> | ||||
|                 <span class="sep"> / </span> | ||||
|                 <input name="data.hp.max" type="text" value="{{data.hp.max}}" data-dtype="Number" placeholder="10" /> | ||||
|                 <input name="data.hp.max" type="text" value="{{data.hp.max}}" data-dtype="Number" placeholder="0" /> | ||||
|             </div> | ||||
|         </li> | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title" title="{{localize 'OSE.HitDice'}}">{{ localize "OSE.HitDiceShort" }} | ||||
|             </h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.hp.hd" type="text" value="{{data.hp.hd}}" placeholder="0" data-dtype="String" /> | ||||
|                 <input name="data.hp.hd" type="text" value="{{data.hp.hd}}" data-dtype="String" /> | ||||
|             </div> | ||||
|         </li> | ||||
|         <li class="attribute"> | ||||
|  | @ -33,12 +32,20 @@ | |||
|             </div> | ||||
|             {{/if}} | ||||
|         </li> | ||||
|         <li class="attribute"> | ||||
|             <h4 class="attribute-name box-title" title="{{localize 'OSE.Thac0'}}">{{ localize "OSE.Thac0" }}</h4> | ||||
|         <li class="attribute attack" data-attack="Melee"> | ||||
|             {{#if config.ascendingAC}} | ||||
|             <h4 class="attribute-name box-title" title="{{localize 'OSE.AB'}}"><a>{{ localize "OSE.ABShort" }}</a></h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.thac0.bba" type="text" value="{{data.thac0.bba}}" placeholder="0" | ||||
|                     data-dtype="Number" /> | ||||
|             </div> | ||||
|             {{else}} | ||||
|             <h4 class="attribute-name box-title" title="{{localize 'OSE.Thac0'}}"><a>{{ localize "OSE.Thac0" }}</a></h4> | ||||
|             <div class="attribute-value"> | ||||
|                 <input name="data.thac0.value" type="text" value="{{data.thac0.value}}" placeholder="0" | ||||
|                     data-dtype="Number" /> | ||||
|             </div> | ||||
|             {{/if}} | ||||
|         </li> | ||||
|         {{#if data.retainer.enabled}} | ||||
|         <li class="attribute"> | ||||
|  |  | |||
|  | @ -5,38 +5,28 @@ | |||
|   </h1> | ||||
|   <ul class="summary flexrow"> | ||||
|     <li class="flex2"> | ||||
|       <input type="text" name="data.details.alignment" value="{{data.details.alignment}}" | ||||
|         placeholder="{{ localize 'OSE.Alignment' }}" /> | ||||
|       <input type="text" name="data.details.alignment" value="{{data.details.alignment}}" /> | ||||
|       <label>{{localize 'OSE.Alignment'}}</label> | ||||
|     </li> | ||||
|     <li class="flex2"> | ||||
|       <input type="text" name="data.details.treasure" value="{{data.details.treasure}}" | ||||
|         placeholder="{{ localize 'OSE.Treasure' }}" /> | ||||
|       <label>{{localize 'OSE.Treasure'}}</label> | ||||
|     </li> | ||||
|     <li> | ||||
|       <input type="text" name="data.details.appearing" value="{{data.details.appearing}}" | ||||
|         placeholder="{{ localize 'OSE.Appearing' }}" /> | ||||
|       <input type="text" name="data.details.appearing" value="{{data.details.appearing}}" /> | ||||
|       <label>{{localize 'OSE.Appearing'}}</label> | ||||
|     </li> | ||||
|   </ul> | ||||
|   <ul class="summary flexrow"> | ||||
|     <li class="flex2"> | ||||
|       <input type="text" name="data.details.size" value="{{data.details.size}}" | ||||
|         placeholder="{{ localize 'OSE.Size' }}" /> | ||||
|       <label>{{localize 'OSE.Size'}}</label> | ||||
|     </li> | ||||
|     <li class="flex2"> | ||||
|       <input type="text" name="data.details.xp" value="{{data.details.xp}}" | ||||
|         placeholder="{{ localize 'OSE.Experience' }}" /> | ||||
|       <label>{{localize 'OSE.Experience'}}</label> | ||||
|     </li> | ||||
|     {{#if config.morale}} | ||||
|     <li> | ||||
|       <input type="text" name="data.details.morale" value="{{data.details.morale}}" | ||||
|         placeholder="{{ localize 'OSE.Morale' }}" /> | ||||
|       <input type="text" name="data.details.morale" value="{{data.details.morale}}" /> | ||||
|       <label>{{localize 'OSE.Morale'}}</label> | ||||
|     </li> | ||||
|     {{/if}} | ||||
|   </ul> | ||||
|   <ul class="summary flexrow"> | ||||
|     <li class="flex2"> | ||||
|       <input type="text" name="data.details.xp" value="{{data.details.xp}}" /> | ||||
|       <label>{{localize 'OSE.Experience'}}</label> | ||||
|     </li> | ||||
|     <li class="flex2"> | ||||
|       <input type="text" name="data.details.treasure" value="{{data.details.treasure}}" /> | ||||
|       <label>{{localize 'OSE.Treasure'}}</label> | ||||
|     </li> | ||||
|   </ul> | ||||
| </section> | ||||
|  | @ -22,9 +22,9 @@ | |||
|         </button> | ||||
|         {{/if}} | ||||
| 
 | ||||
|         {{#if hasSave}} | ||||
|         <button data-action="save" data-ability="{{data.save.ability}}" disabled> | ||||
|             {{ localize "OSE.SavingThrow" }} {{labels.save}} | ||||
|         {{#if data.save}} | ||||
|         <button data-action="save" data-ability="{{data.save}}" disabled> | ||||
|             {{ localize "OSE.SavingThrow" }} {{data.save}} | ||||
|         </button> | ||||
|         {{/if}} | ||||
| 
 | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ | |||
|   </header> | ||||
|   <section class="sheet-body"> | ||||
|     <div class="flexrow"> | ||||
|       <div class="stats"> | ||||
|       <div class="stats narrow"> | ||||
|         <div class="form-group"> | ||||
|           <label>{{localize 'OSE.spells.Level'}}</label> | ||||
|           <div class="form-fields"> | ||||
|  | @ -34,6 +34,19 @@ | |||
|             <input type="text" name="data.duration" value="{{data.duration}}" data-dtype="String" /> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|           <label>{{localize 'OSE.spells.Save'}}</label> | ||||
|           <div class="form-fields"> | ||||
|             <select name="data.save"> | ||||
|               {{#select data.save}} | ||||
|               <option value=""></option> | ||||
|               {{#each config.saves as |save a|}} | ||||
|               <option value="{{a}}">{{localize save}}</option> | ||||
|               {{/each}} | ||||
|               {{/select}} | ||||
|             </select> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="form-group block-input"> | ||||
|           <label>{{localize 'OSE.items.Roll'}}</label> | ||||
|           <div class="form-fields"> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue