Actor sheet
This commit is contained in:
parent
f5e03886d5
commit
bc7910a50d
@ -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