Compare commits
23 Commits
fvtt-dark-
...
fvtt-dark-
Author | SHA1 | Date | |
---|---|---|---|
7dbc5e44b7 | |||
880109f189 | |||
2dbf8fc336 | |||
9b7519afa7 | |||
285d095d91 | |||
79333f8b14 | |||
5477e2be4b | |||
f98852c69f | |||
32b5868646 | |||
606271e725 | |||
2da3d19dbe | |||
7ceada98fb | |||
580b044c77 | |||
83119a2b82 | |||
04365a93d0 | |||
5f36a58805 | |||
55a2d3f4d4 | |||
4d6c0cdc4a | |||
9ff24b536f | |||
4de7215478 | |||
aa1a1e9047 | |||
bb0e323268 | |||
cf010e892e |
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
.vscode/settings.json
|
||||
.idea
|
||||
.history
|
||||
todo.md
|
||||
/.vscode
|
||||
/ignored/
|
||||
/node_modules/
|
||||
/jsconfig.json
|
||||
/package.json
|
||||
/package-lock.json
|
||||
/packs/*/
|
||||
/packs/*/CURRENT
|
||||
/packs/*/LOG
|
||||
/packs/*/LOCK
|
@ -13,10 +13,10 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
|
||||
return mergeObject(super.defaultOptions, {
|
||||
classes: ["fvtt-dark-stars", "sheet", "actor"],
|
||||
template: "systems/fvtt-dark-stars/templates/actor-sheet.hbs",
|
||||
template: "systems/fvtt-dark-stars/templates/actors/actor-sheet.hbs",
|
||||
width: 960,
|
||||
height: 720,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "skills" }],
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "main" }],
|
||||
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
|
||||
editScore: true
|
||||
});
|
||||
@ -35,23 +35,20 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
name: this.actor.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
data: actorData,
|
||||
system: actorData,
|
||||
limited: this.object.limited,
|
||||
skills: this.actor.getSkills( ),
|
||||
perks: this.actor.getPerks( ),
|
||||
weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
|
||||
armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
|
||||
shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields())),
|
||||
spells: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getLore())),
|
||||
equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
|
||||
equippedWeapons: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquippedWeapons()) ),
|
||||
cybers: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getCybers()) ),
|
||||
equippedArmor: this.actor.getEquippedArmor(),
|
||||
equippedShield: this.actor.getEquippedShield(),
|
||||
feats: duplicate(this.actor.getFeats()),
|
||||
subActors: duplicate(this.actor.getSubActors()),
|
||||
race: duplicate(this.actor.getRace()),
|
||||
moneys: duplicate(this.actor.getMoneys()),
|
||||
encCapacity: this.actor.getEncumbranceCapacity(),
|
||||
saveRolls: this.actor.getSaveRoll(),
|
||||
conditions: this.actor.getConditions(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||
notes: await TextEditor.enrichHTML(this.object.system.biodata.notes, {async: true}),
|
||||
@ -98,17 +95,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
|
||||
})
|
||||
|
||||
html.find('.equip-activate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipActivate( itemId)
|
||||
});
|
||||
html.find('.equip-deactivate').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
let itemId = li.data("item-id")
|
||||
this.actor.equipDeactivate( itemId)
|
||||
});
|
||||
|
||||
html.find('.subactor-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id");
|
||||
@ -121,6 +107,12 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
let actorId = li.data("actor-id");
|
||||
this.actor.delSubActor(actorId);
|
||||
});
|
||||
|
||||
html.find('.skill-used-id').change(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.setSkillUsed( li.data("item-id"), event.currentTarget.checked );
|
||||
} );
|
||||
|
||||
html.find('.quantity-minus').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
this.actor.incDecQuantity( li.data("item-id"), -1 );
|
||||
@ -139,10 +131,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
this.actor.incDecAmmo( li.data("item-id"), +1 )
|
||||
} );
|
||||
|
||||
html.find('.roll-ability').click((event) => {
|
||||
const abilityKey = $(event.currentTarget).data("ability-key");
|
||||
this.actor.rollAbility(abilityKey);
|
||||
});
|
||||
html.find('.roll-skill').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const skillId = li.data("item-id")
|
||||
@ -154,20 +142,6 @@ export class DarkStarsActorSheet extends ActorSheet {
|
||||
const skillId = li.data("item-id")
|
||||
this.actor.rollWeapon(skillId)
|
||||
});
|
||||
html.find('.roll-armor-die').click((event) => {
|
||||
this.actor.rollArmorDie()
|
||||
});
|
||||
html.find('.roll-shield-die').click((event) => {
|
||||
this.actor.rollShieldDie()
|
||||
});
|
||||
html.find('.roll-target-die').click((event) => {
|
||||
this.actor.rollDefenseRanged()
|
||||
});
|
||||
|
||||
html.find('.roll-save').click((event) => {
|
||||
const saveKey = $(event.currentTarget).data("save-key")
|
||||
this.actor.rollSave(saveKey)
|
||||
});
|
||||
|
||||
|
||||
html.find('.lock-unlock-sheet').click((event) => {
|
||||
|
@ -64,26 +64,30 @@ export class DarkStarsActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
computeHitPoints() {
|
||||
if (this.type == "character") {
|
||||
let hp = duplicate(this.system.secondary.hp)
|
||||
let max = (this.system.abilities.str.value + this.system.abilities.con.value) * 6
|
||||
if (max != hp.max || hp.value > max) {
|
||||
hp.max = max
|
||||
hp.value = max // Init case
|
||||
this.update({ 'system.secondary.hp': hp })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
computeEffortPoints() {
|
||||
if (this.type == "character") {
|
||||
let effort = duplicate(this.system.secondary.effort)
|
||||
let max = (this.system.abilities.con.value + this.system.abilities.int.value) * 6
|
||||
if (max != effort.max || effort.value > max) {
|
||||
effort.max = max
|
||||
effort.value = max // Init case
|
||||
this.update({ 'system.secondary.effort': effort })
|
||||
}
|
||||
}
|
||||
computeDerivated() {
|
||||
let attr = this.system.attributes
|
||||
let deriv = this.system.derivated
|
||||
let secondary = this.system.secondary
|
||||
|
||||
deriv.csb.value = Math.round((attr.dex.value + attr.sel.value) / 2) + deriv.csb.bonus
|
||||
deriv.asb.value = Math.round((attr.int.value + attr.edu.value) / 2) + deriv.asb.bonus
|
||||
deriv.ssb.value = Math.round((attr.cha.value + attr.emp.value + attr.att.value) / 3) + deriv.ssb.bonus
|
||||
deriv.msb.value = Math.round((attr.con.value + attr.str.value ) / 2) + deriv.msb.bonus
|
||||
deriv.psb.value = Math.round((attr.str.value + attr.dex.value + attr.con.value) / 3) + deriv.psb.bonus
|
||||
|
||||
deriv.ego.value = attr.str.value + attr.cha.value + attr.sel.value + attr.emp.value + deriv.ego.bonus
|
||||
deriv.hup.value = (attr.emp.value * 10) + deriv.hup.bonus
|
||||
deriv.ss.value = (attr.edu.value * 10) + (attr.int.value * 10) + 250 + deriv.ss.bonus
|
||||
|
||||
deriv.mcdb.value = Math.round( (attr.str.value + attr.siz.value) / 4) + deriv.mcdb.bonus
|
||||
deriv.si.value = Math.round( ((attr.dex.value + attr.sel.value) / 5) + 0.5) + deriv.si.bonus
|
||||
|
||||
secondary.hp.max = ((attr.con.value + attr.siz.value ) * 2) + secondary.hp.bonus
|
||||
secondary.fp.max = 10 + attr.str.value + attr.con.value + secondary.fp.bonus
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -91,9 +95,9 @@ export class DarkStarsActor extends Actor {
|
||||
|
||||
if (this.type == 'character' || game.user.isGM) {
|
||||
this.system.encCapacity = this.getEncumbranceCapacity()
|
||||
this.computeDerivated()
|
||||
this.buildContainerTree()
|
||||
this.computeHitPoints()
|
||||
this.computeEffortPoints()
|
||||
}
|
||||
|
||||
super.prepareDerivedData();
|
||||
@ -110,35 +114,6 @@ export class DarkStarsActor extends Actor {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getMoneys() {
|
||||
let comp = this.items.filter(item => item.type == 'money');
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getFeats() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getFeatsWithDie() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat' && item.system.isfeatdie) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getFeatsWithSL() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'feat' && item.system.issl) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getLore() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'spell') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
getEquippedWeapons() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon' && item.system.equipped) || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
@ -158,6 +133,12 @@ export class DarkStarsActor extends Actor {
|
||||
return undefined
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getCybers() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'cyber') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getShields() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'shield') || []);
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
@ -171,11 +152,6 @@ export class DarkStarsActor extends Actor {
|
||||
return undefined
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getRace() {
|
||||
let race = this.items.filter(item => item.type == 'race')
|
||||
return race[0] ?? [];
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
checkAndPrepareEquipment(item) {
|
||||
}
|
||||
|
||||
@ -208,23 +184,38 @@ export class DarkStarsActor extends Actor {
|
||||
return item;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
setSkillUsed( skillId, checked) {
|
||||
let skill = this.items.get(skillId)
|
||||
if(skill) {
|
||||
this.updateEmbeddedDocuments('Item', [ {_id: skill.id, 'system.used': checked} ])
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateSkill(skill) {
|
||||
skill.derivated = duplicate(this.system.derivated[skill.system.base])
|
||||
skill.total = skill.system.value + skill.derivated.value + skill.system.bonus
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getSkills() {
|
||||
this.computeDerivated()
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'skill') || [])
|
||||
for (let skill of comp) {
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
this.updateSkill(skill)
|
||||
}
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getRelevantAbility(statKey) {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'skill' && item.system.ability == ability) || []);
|
||||
return comp;
|
||||
getPerks() {
|
||||
let comp = duplicate(this.items.filter(item => item.type == 'perk') || [])
|
||||
DarkStarsUtility.sortArrayObjectsByName(comp)
|
||||
return comp
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async equipItem(itemId) {
|
||||
let item = this.items.find(item => item.id == itemId)
|
||||
@ -343,7 +334,7 @@ export class DarkStarsActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async incDecHP(formula) {
|
||||
let dmgRoll = new Roll(formula+"[dark-starsorange]").roll({ async: false })
|
||||
let dmgRoll = new Roll(formula + "[dark-starsorange]").roll({ async: false })
|
||||
await DarkStarsUtility.showDiceSoNice(dmgRoll, game.settings.get("core", "rollMode"))
|
||||
let hp = duplicate(this.system.secondary.hp)
|
||||
hp.value = Number(hp.value) + Number(dmgRoll.total)
|
||||
@ -372,7 +363,7 @@ export class DarkStarsActor extends Actor {
|
||||
} else {
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': containerId }])
|
||||
}
|
||||
} else if (object && object.system.containerid) { // remove from container
|
||||
} else if (object?.system.containerid) { // remove from container
|
||||
console.log("Removeing: ", object)
|
||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]);
|
||||
}
|
||||
@ -389,7 +380,7 @@ export class DarkStarsActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async equipGear(equipmentId) {
|
||||
let item = this.items.find(item => item.id == equipmentId);
|
||||
if (item && item.system) {
|
||||
if (item?.system) {
|
||||
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||
}
|
||||
@ -428,12 +419,6 @@ export class DarkStarsActor extends Actor {
|
||||
await this.update({ 'system.subactors': newArray });
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
syncRoll(rollData) {
|
||||
this.lastRollId = rollData.rollId;
|
||||
DarkStarsUtility.saveRollData(rollData);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getOneSkill(skillId) {
|
||||
let skill = this.items.find(item => item.type == 'skill' && item.id == skillId)
|
||||
@ -488,7 +473,7 @@ export class DarkStarsActor extends Actor {
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.quantity + incDec
|
||||
if (newQ >= 0) {
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.quantity': newQ }]) // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -498,7 +483,7 @@ export class DarkStarsActor extends Actor {
|
||||
if (objetQ) {
|
||||
let newQ = objetQ.system.ammocurrent + incDec;
|
||||
if (newQ >= 0 && newQ <= objetQ.system.ammomax) {
|
||||
const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity
|
||||
await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'system.ammocurrent': newQ }]); // pdates one EmbeddedEntity
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -532,6 +517,13 @@ export class DarkStarsActor extends Actor {
|
||||
return this.items.find(cond => cond.type == "condition" && cond.system.targetadvantage)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
modifyRerolls( value) {
|
||||
let rerolls = duplicate(this.system.various.rerolls)
|
||||
rerolls.value += value
|
||||
this.update({ 'system.various.rerolls': rerolls })
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getCommonRollData(abilityKey = undefined) {
|
||||
let noAction = this.isNoAction()
|
||||
@ -545,20 +537,10 @@ export class DarkStarsActor extends Actor {
|
||||
rollData.actorImg = this.img
|
||||
rollData.actorId = this.id
|
||||
rollData.img = this.img
|
||||
rollData.featsDie = this.getFeatsWithDie()
|
||||
rollData.featsSL = this.getFeatsWithSL()
|
||||
rollData.armors = this.getArmors()
|
||||
rollData.conditions = this.getConditions()
|
||||
rollData.featDieName = "none"
|
||||
rollData.featSLName = "none"
|
||||
rollData.rollAdvantage = "none"
|
||||
rollData.advantage = "none"
|
||||
rollData.disadvantage = "none"
|
||||
rollData.forceAdvantage = this.isForcedAdvantage()
|
||||
rollData.forceDisadvantage = this.isForcedDisadvantage()
|
||||
rollData.forceRollAdvantage = this.isForcedRollAdvantage()
|
||||
rollData.forceRollDisadvantage = this.isForcedRollDisadvantage()
|
||||
rollData.noAdvantage = this.isNoAdvantage()
|
||||
rollData.rerolls = this.system.various.rerolls.value
|
||||
|
||||
if (rollData.defenderTokenId) {
|
||||
let defenderToken = game.canvas.tokens.get(rollData.defenderTokenId)
|
||||
let defender = defenderToken.actor
|
||||
@ -607,15 +589,11 @@ export class DarkStarsActor extends Actor {
|
||||
rollSkill(skillId) {
|
||||
let skill = this.items.get(skillId)
|
||||
if (skill) {
|
||||
if (skill.system.islore && skill.system.level == 0) {
|
||||
ui.notifications.warn("You can't use Lore Skills with a SL of 0.")
|
||||
return
|
||||
}
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
this.updateSkill(skill)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "skill"
|
||||
rollData.title = "Skill " + skill.name
|
||||
rollData.skill = skill
|
||||
rollData.img = skill.img
|
||||
if (rollData.target) {
|
||||
@ -634,20 +612,12 @@ export class DarkStarsActor extends Actor {
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
this.updateSkill(skill)
|
||||
let rollData = this.getCommonRollData()
|
||||
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 > DarkStarsUtility.getWeaponMaxRange(rollData.weapon) ) {
|
||||
ui.notifications.warn(`Your target is out of range of your weapon (max: ${DarkStarsUtility.getWeaponMaxRange(rollData.weapon)} - current : ${rollData.tokensDistance})` )
|
||||
return
|
||||
}*/
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
@ -655,152 +625,8 @@ export class DarkStarsActor extends Actor {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseMelee(attackRollData) {
|
||||
let weapon = this.items.get(attackRollData.defenseWeaponId)
|
||||
if (weapon) {
|
||||
weapon = duplicate(weapon)
|
||||
let skill = this.items.find(item => item.name.toLowerCase() == weapon.system.skill.toLowerCase())
|
||||
if (skill) {
|
||||
skill = duplicate(skill)
|
||||
DarkStarsUtility.updateSkill(skill)
|
||||
let abilityKey = skill.system.ability
|
||||
let rollData = this.getCommonRollData(abilityKey)
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "weapondefense"
|
||||
rollData.shield = this.getEquippedShield()
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.skill = skill
|
||||
rollData.weapon = weapon
|
||||
rollData.img = weapon.img
|
||||
if (!rollData.forceDisadvantage) { // This is an attack, check if disadvantaged
|
||||
rollData.forceDisadvantage = this.isDefenseDisadvantage()
|
||||
}
|
||||
|
||||
this.startRoll(rollData)
|
||||
} else {
|
||||
ui.notifications.warn("Unable to find the relevant skill for weapon " + weapon.name)
|
||||
}
|
||||
} else {
|
||||
ui.notifications.warn("Weapon not found ! ")
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollDefenseRanged(attackRollData) {
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.defenderTokenId = undefined // Cleanup
|
||||
rollData.mode = "rangeddefense"
|
||||
if ( attackRollData) {
|
||||
rollData.attackRollData = duplicate(attackRollData)
|
||||
rollData.effectiveRange = DarkStarsUtility.getWeaponRange(attackRollData.weapon)
|
||||
rollData.tokensDistance = attackRollData.tokensDistance // QoL copy
|
||||
}
|
||||
rollData.sizeDice = DarkStarsUtility.getSizeDice(this.system.biodata.size)
|
||||
rollData.distanceBonusDice = 0 //Math.max(0, Math.floor((rollData.tokensDistance - rollData.effectiveRange) + 0.5))
|
||||
rollData.hasCover = "none"
|
||||
rollData.situational = "none"
|
||||
rollData.useshield = false
|
||||
rollData.shield = this.getEquippedShield()
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollShieldDie() {
|
||||
let shield = this.getEquippedShield()
|
||||
if (shield) {
|
||||
shield = duplicate(shield)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "shield"
|
||||
rollData.shield = shield
|
||||
rollData.useshield = true
|
||||
rollData.img = shield.img
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async rollArmorDie(rollData = undefined) {
|
||||
let armor = this.getEquippedArmor()
|
||||
if (armor) {
|
||||
armor = duplicate(armor)
|
||||
let reduce = 0
|
||||
let multiply = 1
|
||||
let disadvantage = false
|
||||
let advantage = false
|
||||
let messages = ["Armor applied"]
|
||||
|
||||
if (rollData) {
|
||||
if (DarkStarsUtility.isArmorLight(armor) && DarkStarsUtility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["Armor ignored : Penetrating weapons ignore Light Armors."] }
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponPenetrating(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Penetrating weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponLight(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with advantage (Light weapon)")
|
||||
advantage = true
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponHeavy(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor with disadvantage (Heavy weapon)")
|
||||
disadvantage = true
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponHack(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor reduced by 1 (Hack weapon)")
|
||||
reduce = 1
|
||||
}
|
||||
if (DarkStarsUtility.isWeaponUndamaging(rollData.attackRollData.weapon)) {
|
||||
messages.push("Armor multiplied by 2 (Undamaging weapon)")
|
||||
multiply = 2
|
||||
}
|
||||
}
|
||||
let diceColor = armor.system.absorprionroll
|
||||
let armorResult = await DarkStarsUtility.getRollTableFromDiceColor(diceColor, false)
|
||||
console.log("Armor log", armorResult)
|
||||
let armorValue = Math.max(0, (Number(armorResult.text) + reduce) * multiply)
|
||||
if (advantage || disadvantage) {
|
||||
let armorResult2 = await DarkStarsUtility.getRollTableFromDiceColor(diceColor, false)
|
||||
let armorValue2 = Math.max(0, (Number(armorResult2.text) + reduce) * multiply)
|
||||
if (advantage) {
|
||||
armorValue = (armorValue2 > armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor advantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
if (disadvantage) {
|
||||
armorValue = (armorValue2 < armorValue) ? armorValue2 : armorValue
|
||||
messages.push(`Armor disadvantage - Roll 1 = ${armorValue} - Roll 2 = ${armorValue2}`)
|
||||
}
|
||||
}
|
||||
armorResult.armorValue = armorValue
|
||||
if (!rollData) {
|
||||
ChatMessage.create({ content: "Armor result : " + armorValue })
|
||||
}
|
||||
messages.push("Armor result : " + armorValue)
|
||||
return { armorIgnored: false, nbSuccess: armorValue, rawArmor: armorResult.text, messages: messages }
|
||||
}
|
||||
return { armorIgnored: true, nbSuccess: 0, messages: ["No armor equipped."] }
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollSave(saveKey) {
|
||||
let saves = this.getSaveRoll()
|
||||
let save = saves[saveKey]
|
||||
if (save) {
|
||||
save = duplicate(save)
|
||||
let rollData = this.getCommonRollData()
|
||||
rollData.mode = "save"
|
||||
rollData.save = save
|
||||
if (rollData.target) {
|
||||
ui.notifications.warn("You are targetting a token with a save roll - Not authorized.")
|
||||
return
|
||||
}
|
||||
this.startRoll(rollData)
|
||||
}
|
||||
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
async startRoll(rollData) {
|
||||
this.syncRoll(rollData)
|
||||
let rollDialog = await DarkStarsRollDialog.create(this, rollData)
|
||||
rollDialog.render(true)
|
||||
}
|
||||
|
@ -3,10 +3,10 @@ export const DARKSTARS_CONFIG = {
|
||||
|
||||
basebonus : {
|
||||
"csb": "CSB",
|
||||
"asb": "SSB",
|
||||
"ssb": "SSB",
|
||||
"msb": "MSB",
|
||||
"psb": "PSB"
|
||||
"psb": "PSB",
|
||||
"asb": "ASB"
|
||||
},
|
||||
location : {
|
||||
"head": "Head",
|
||||
@ -29,6 +29,11 @@ export const DARKSTARS_CONFIG = {
|
||||
"slug": "Slug throwers",
|
||||
"energy": "Energy"
|
||||
},
|
||||
perktypes: {
|
||||
"normal": "Normal",
|
||||
"advanced": "Advanced",
|
||||
"role": "Role"
|
||||
},
|
||||
range: {
|
||||
"1": "Close",
|
||||
"2": "Short",
|
||||
|
@ -59,8 +59,7 @@ export class DarkStarsItemSheet extends ItemSheet {
|
||||
name: this.object.name,
|
||||
editable: this.isEditable,
|
||||
cssClass: this.isEditable ? "editable" : "locked",
|
||||
weaponSkills: DarkStarsUtility.getWeaponSkills(),
|
||||
shieldSkills: DarkStarsUtility.getShieldSkills(),
|
||||
skills: DarkStarsUtility.getSkills(),
|
||||
description: await TextEditor.enrichHTML(this.object.system.description, {async: true}),
|
||||
config: game.system.darkstars.config,
|
||||
system: objectData,
|
||||
@ -133,21 +132,9 @@ export class DarkStarsItemSheet extends ItemSheet {
|
||||
this.deleteSubitem(ev);
|
||||
});
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
let itemId = li.data("item-id");
|
||||
let itemType = li.data("item-type");
|
||||
});
|
||||
|
||||
html.find('.view-subitem').click(ev => {
|
||||
this.viewSubitem(ev);
|
||||
});
|
||||
|
||||
html.find('.view-spec').click(ev => {
|
||||
this.manageSpec();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -5,8 +5,8 @@ export class DarkStarsRollDialog extends Dialog {
|
||||
/* -------------------------------------------- */
|
||||
static async create(actor, rollData) {
|
||||
|
||||
let options = { classes: ["DarkStarsDialog"], width: 540, height: 340, 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-dark-stars/templates/roll-dialog-generic.hbs', rollData);
|
||||
let options = { classes: ["DarkStarsDialog"], width: 420, height: 'fit-content', 'z-index': 99999 };
|
||||
let html = await renderTemplate('systems/fvtt-dark-stars/templates/apps/roll-dialog-generic.hbs', rollData);
|
||||
|
||||
return new DarkStarsRollDialog(actor, rollData, html, options);
|
||||
}
|
||||
@ -58,27 +58,17 @@ export class DarkStarsRollDialog extends Dialog {
|
||||
}
|
||||
$(function () { onLoad(); });
|
||||
|
||||
html.find('#advantage').change((event) => {
|
||||
this.rollData.advantage = event.currentTarget.value
|
||||
html.find('#bonusMalus').change((event) => {
|
||||
this.rollData.bonusMalus = Number(event.currentTarget.value)
|
||||
})
|
||||
html.find('#disadvantage').change((event) => {
|
||||
this.rollData.disadvantage = event.currentTarget.value
|
||||
html.find('#above-effective-range').change((event) => {
|
||||
this.rollData.isAboveEffectiveRange = event.currentTarget.checked
|
||||
})
|
||||
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('#distanceBonusDice').change((event) => {
|
||||
this.rollData.distanceBonusDice = Number(event.currentTarget.value)
|
||||
html.find('#weapon-aiming').change((event) => {
|
||||
this.rollData.weaponAiming = String(event.currentTarget.value)
|
||||
})
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -50,22 +50,6 @@ export class DarkStarsUtility {
|
||||
|
||||
/*-------------------------------------------- */
|
||||
static gameSettings() {
|
||||
/*game.settings.register("fvtt-dark-stars", "dice-color-skill", {
|
||||
name: "Dice color for skills",
|
||||
hint: "Set the dice color for skills",
|
||||
scope: "world",
|
||||
config: true,
|
||||
requiresReload: true ,
|
||||
default: "#101010",
|
||||
type: String
|
||||
})
|
||||
|
||||
Hooks.on('renderSettingsConfig', (event) => {
|
||||
const element = event.element[0].querySelector(`[name='fvtt-dark-stars.dice-color-skill']`)
|
||||
if (!element) return
|
||||
// Replace placeholder element
|
||||
console.log("Element Found !!!!")
|
||||
}) */
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
@ -78,24 +62,11 @@ export class DarkStarsUtility {
|
||||
static getSkills() {
|
||||
return duplicate(this.skills)
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
static getWeaponSkills() {
|
||||
return duplicate(this.weaponSkills)
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
static getShieldSkills() {
|
||||
return duplicate(this.shieldSkills)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async ready() {
|
||||
const skills = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.skills")
|
||||
this.skills = skills.map(i => i.toObject())
|
||||
this.weaponSkills = duplicate(this.skills.filter(item => item.system.isweaponskill))
|
||||
this.shieldSkills = duplicate(this.skills.filter(item => item.system.isshieldskill))
|
||||
|
||||
const rollTables = await DarkStarsUtility.loadCompendium("fvtt-dark-stars.rolltables")
|
||||
this.rollTables = rollTables.map(i => i.toObject())
|
||||
|
||||
}
|
||||
|
||||
@ -116,26 +87,16 @@ export class DarkStarsUtility {
|
||||
static async chatListeners(html) {
|
||||
|
||||
html.on("click", '.view-item-from-chat', event => {
|
||||
game.system.crucible.creator.openItemView(event)
|
||||
game.system.darkstars.creator.openItemView(event)
|
||||
})
|
||||
html.on("click", '.roll-defense-melee', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = DarkStarsUtility.getRollData(rollId)
|
||||
rollData.defenseWeaponId = $(event.currentTarget).data("defense-weapon-id")
|
||||
let actor = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (actor && (game.user.isGM || actor.isOwner)) {
|
||||
actor.rollDefenseMelee(rollData)
|
||||
}
|
||||
html.on("click", '.chat-reroll', event => {
|
||||
let messageId = this.findChatMessageId(event.currentTarget)
|
||||
let message = game.messages.get(messageId)
|
||||
let rollData = message.getFlag("world", "darkstars-roll-data")
|
||||
rollData.reroll = true
|
||||
rollData.roll = undefined
|
||||
this.rollDarkStars(rollData)
|
||||
})
|
||||
html.on("click", '.roll-defense-ranged', event => {
|
||||
let rollId = $(event.currentTarget).data("roll-id")
|
||||
let rollData = DarkStarsUtility.getRollData(rollId)
|
||||
let defender = game.canvas.tokens.get(rollData.defenderTokenId).actor
|
||||
if (defender && (game.user.isGM || defender.isOwner)) {
|
||||
defender.rollDefenseRanged(rollData)
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -278,176 +239,84 @@ export class DarkStarsUtility {
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getAimingMalus(location) {
|
||||
if (location == "arm" || location == "head") {
|
||||
return -50
|
||||
}
|
||||
if (location == "torso" || location == "leg") {
|
||||
return -30
|
||||
}
|
||||
if (location == "hand" ) {
|
||||
return -70
|
||||
}
|
||||
return 0
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static getAimingLocation(roll) {
|
||||
if (roll == 1) return "head"
|
||||
if (roll >=2 && roll <=4 ) return "chest"
|
||||
if (roll >=5 && roll <=6 ) return "abdomen"
|
||||
if (roll == 7 ) return "leftarm"
|
||||
if (roll == 8 ) return "rightarm"
|
||||
if (roll == 9 ) return "rightleg"
|
||||
if (roll == 10 ) return "leftleg"
|
||||
return "abdomen"
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rollDarkStars(rollData) {
|
||||
|
||||
let actor = game.actors.get(rollData.actorId)
|
||||
|
||||
// ability/save/size => 0
|
||||
let diceFormula
|
||||
let startFormula = "0d6cs>=5[blue]"
|
||||
if (rollData.ability) {
|
||||
startFormula = String(rollData.ability.value) + "d6cs>=5[blue]"
|
||||
rollData.percentValue = 0
|
||||
if ( rollData.skill ) {
|
||||
rollData.percentValue = rollData.skill.total
|
||||
}
|
||||
if (rollData.save) {
|
||||
startFormula = String(rollData.save.value) + "d6cs>=5[blue]"
|
||||
}
|
||||
if (rollData.sizeDice) {
|
||||
let nb = rollData.sizeDice.nb + rollData.distanceBonusDice + this.getDiceFromCover(rollData.hasCover) + this.getDiceFromSituational(rollData.situational)
|
||||
startFormula = String(nb) + String(rollData.sizeDice.dice) + "cs>=5[blue]"
|
||||
}
|
||||
diceFormula = startFormula
|
||||
rollData.percentValue += rollData.bonusMalus
|
||||
rollData.diceFormula = "1d100"
|
||||
|
||||
// skill => 2
|
||||
// feat => 4
|
||||
// bonus => 6
|
||||
if (rollData.skill) {
|
||||
let level = rollData.skill.system.level
|
||||
if (rollData.skill.system.issl2) {
|
||||
rollData.hasSLBonus = true
|
||||
level += 2
|
||||
if (level > 7) { level = 7 }
|
||||
}
|
||||
rollData.skill.system.skilldice = __skillLevel2Dice[level]
|
||||
diceFormula += "+" + String(rollData.skill.system.skilldice) + "cs>=5[black]"
|
||||
|
||||
if (rollData.skill.system.skilltype == "complex" && rollData.skill.system.level == 0) {
|
||||
rollData.complexSkillDisadvantage = true
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
if (rollData.isAboveEffectiveRange) {
|
||||
rollData.percentValue -= 30
|
||||
rollData.percentValue = Math.max(0, rollData.percentValue)
|
||||
}
|
||||
|
||||
if (rollData.skill.system.isfeatdie) {
|
||||
rollData.hasFeatDie = true
|
||||
diceFormula += "+ 1d10cs>=5[dark-stars-purple]"
|
||||
} else {
|
||||
diceFormula += `+ 0d10cs>=5[dark-stars-purple]`
|
||||
if (rollData.mode == "weapon") {
|
||||
rollData.locationMalus = this.getAimingMalus(rollData.weaponAiming)
|
||||
rollData.percentValue += rollData.locationMalus
|
||||
}
|
||||
if (rollData.skill.system.bonusdice != "none") {
|
||||
rollData.hasBonusDice = rollData.skill.system.bonusdice
|
||||
diceFormula += `+ ${rollData.hasBonusDice}cs>=5[black]`
|
||||
} else {
|
||||
diceFormula += `+ 0d6cs>=5[black]`
|
||||
}
|
||||
} else {
|
||||
diceFormula += `+ 0d8cs=>5 + 0d10cs>=5 + 0d6cs>=5`
|
||||
}
|
||||
|
||||
// advantage => 8
|
||||
let advFormula = "+ 0d8cs>=5"
|
||||
if (rollData.advantage == "advantage1" || rollData.forceAdvantage) {
|
||||
advFormula = "+ 1d8cs>=5[dark-stars-darkgreen]"
|
||||
}
|
||||
if (rollData.advantage == "advantage2") {
|
||||
advFormula = "+ 2d8cs>=5[dark-stars-darkgreen]"
|
||||
}
|
||||
diceFormula += advFormula
|
||||
|
||||
// disadvantage => 10
|
||||
let disFormula = "- 0d8cs>=5"
|
||||
if (rollData.disadvantage == "disadvantage1" || rollData.forceDisadvantage) {
|
||||
disFormula = "- 1d8cs>=5[red]"
|
||||
}
|
||||
if (rollData.disadvantage == "disadvantage2") {
|
||||
disFormula = "- 2d8cs>=5[red]"
|
||||
}
|
||||
diceFormula += disFormula
|
||||
|
||||
// armor => 12
|
||||
let skillArmorPenalty = 0
|
||||
for (let armor of rollData.armors) {
|
||||
if (armor.system.equipped) {
|
||||
skillArmorPenalty += armor.system.skillpenalty
|
||||
}
|
||||
}
|
||||
if (rollData.skill && rollData.skill.system.armorpenalty && skillArmorPenalty > 0) {
|
||||
rollData.skillArmorPenalty = skillArmorPenalty
|
||||
diceFormula += `- ${skillArmorPenalty}d8cs>=5`
|
||||
} else {
|
||||
diceFormula += `- 0d8cs>=5`
|
||||
}
|
||||
|
||||
// shield => 14
|
||||
if (rollData.useshield && rollData.shield) {
|
||||
diceFormula += "+ 1" + String(rollData.shield.system.shielddie) + "cs>=5[yellow]"
|
||||
} else {
|
||||
diceFormula += " + 0d6cs>=5"
|
||||
}
|
||||
|
||||
// Performs roll
|
||||
console.log("Roll formula", diceFormula)
|
||||
console.log("Roll formula", rollData.diceFormula)
|
||||
let myRoll = rollData.roll
|
||||
if (!myRoll) { // New rolls only of no rerolls
|
||||
myRoll = new Roll(diceFormula).roll({ async: false })
|
||||
myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||
}
|
||||
rollData.rollOrder = 0
|
||||
rollData.roll = myRoll
|
||||
rollData.nbSuccess = myRoll.total
|
||||
rollData.roll = duplicate(myRoll)
|
||||
rollData.diceResult = myRoll.total
|
||||
rollData.isCriticalSuccess = rollData.diceResult <= rollData.skill.derivated.value
|
||||
rollData.isCriticalFailure = rollData.diceResult == 100
|
||||
rollData.isSuccess = rollData.diceResult == 1 || rollData.diceResult <= rollData.percentValue
|
||||
rollData.isFailure = rollData.diceResult == 100 || rollData.diceResult > rollData.percentValue
|
||||
rollData.degrees = Math.floor(rollData.percentValue/10) - Math.floor(rollData.diceResult/10)
|
||||
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollAdvantage) {
|
||||
rollData.rollAdvantage = "roll-advantage"
|
||||
if (rollData.reroll) {
|
||||
actor.modifyRerolls(-1)
|
||||
rollData.rerolls = 0 // DIsable rerolls
|
||||
}
|
||||
if (rollData.rollAdvantage == "none" && rollData.forceRollDisadvantage) {
|
||||
rollData.rollAdvantage = "roll-disadvantage"
|
||||
}
|
||||
if (rollData.rollAdvantage != "none") {
|
||||
|
||||
rollData.rollOrder = 1
|
||||
rollData.rollType = (rollData.rollAdvantage == "roll-advantage") ? "Advantage" : "Disadvantage"
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
if (rollData.weaponAiming == "none" ) {
|
||||
let rollLoc = new Roll("1d10").roll({async: false})
|
||||
rollData.weaponAiming = this.getAimingLocation(rollLoc.total)
|
||||
}
|
||||
|
||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
|
||||
rollData.rollOrder = 2
|
||||
let myRoll2 = new Roll(diceFormula).roll({ async: false })
|
||||
await this.showDiceSoNice(myRoll2, game.settings.get("core", "rollMode"))
|
||||
|
||||
rollData.roll = myRoll2 // Tmp switch to display the proper results
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
rollData.roll = myRoll // Revert the tmp switch
|
||||
rollData.nbSuccess = myRoll.total
|
||||
|
||||
if (rollData.rollAdvantage == "roll-advantage") {
|
||||
if (myRoll2.total > rollData.nbSuccess) {
|
||||
hasChanged = true
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
} else {
|
||||
if (myRoll2.total < rollData.nbSuccess) {
|
||||
rollData.roll = myRoll2
|
||||
rollData.nbSuccess = myRoll2.total
|
||||
}
|
||||
}
|
||||
rollData.rollOrder = 3
|
||||
}
|
||||
rollData.nbSuccess = Math.max(0, rollData.nbSuccess)
|
||||
|
||||
rollData.isFirstRollAdvantage = false
|
||||
// Manage exp
|
||||
if (rollData.skill && rollData.skill.system.level > 0) {
|
||||
let nbSkillSuccess = rollData.roll.terms[2].total
|
||||
if (nbSkillSuccess == 0 || nbSkillSuccess == rollData.skill.system.level) {
|
||||
actor.incrementSkillExp(rollData.skill.id, 1)
|
||||
}
|
||||
}
|
||||
|
||||
this.saveRollData(rollData)
|
||||
actor.lastRoll = rollData
|
||||
|
||||
this.createChatWithRollMode(rollData.alias, {
|
||||
content: await renderTemplate(`systems/fvtt-dark-stars/templates/chat-generic-result.hbs`, rollData)
|
||||
})
|
||||
console.log("Rolldata result", rollData)
|
||||
|
||||
// Message response
|
||||
this.displayDefenseMessage(rollData)
|
||||
|
||||
// Manage defense result
|
||||
this.processAttackDefense(rollData)
|
||||
msg.setFlag("world", "darkstars-roll-data", rollData)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -541,7 +410,7 @@ export class DarkStarsUtility {
|
||||
break;
|
||||
}
|
||||
chatOptions.alias = chatOptions.alias || name;
|
||||
ChatMessage.create(chatOptions);
|
||||
return ChatMessage.create(chatOptions);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -549,7 +418,9 @@ export class DarkStarsUtility {
|
||||
let rollData = {
|
||||
rollId: randomID(16),
|
||||
rollMode: game.settings.get("core", "rollMode"),
|
||||
advantage: "none"
|
||||
bonusMalus : 0,
|
||||
isAboveEffectiveRange: false,
|
||||
weaponAiming: "none"
|
||||
}
|
||||
DarkStarsUtility.updateWithTarget(rollData)
|
||||
return rollData
|
||||
@ -565,7 +436,7 @@ export class DarkStarsUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createChatWithRollMode(name, chatOptions) {
|
||||
this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
return this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
BIN
packs/armor/000005.ldb
Normal file
BIN
packs/armor/000005.ldb
Normal file
Binary file not shown.
1
packs/armor/CURRENT
Normal file
1
packs/armor/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
8
packs/armor/LOG
Normal file
8
packs/armor/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-13:02:58.870058 7fb8ba7fc6c0 Recovering log #40
|
||||
2023/10/10-13:02:58.880628 7fb8ba7fc6c0 Delete type=3 #38
|
||||
2023/10/10-13:02:58.880699 7fb8ba7fc6c0 Delete type=0 #40
|
||||
2023/10/10-13:03:57.333218 7fb8b97fa6c0 Level-0 table #45: started
|
||||
2023/10/10-13:03:57.333256 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/10-13:03:57.369083 7fb8b97fa6c0 Delete type=0 #43
|
||||
2023/10/10-13:03:57.407449 7fb8b97fa6c0 Manual compaction at level-0 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:03:57.476948 7fb8b97fa6c0 Manual compaction at level-1 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
8
packs/armor/LOG.old
Normal file
8
packs/armor/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-12:56:07.885464 7fb8ba7fc6c0 Recovering log #36
|
||||
2023/10/10-12:56:07.903712 7fb8ba7fc6c0 Delete type=3 #34
|
||||
2023/10/10-12:56:07.903825 7fb8ba7fc6c0 Delete type=0 #36
|
||||
2023/10/10-13:02:45.680500 7fb8b97fa6c0 Level-0 table #41: started
|
||||
2023/10/10-13:02:45.680550 7fb8b97fa6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/10-13:02:45.689407 7fb8b97fa6c0 Delete type=0 #39
|
||||
2023/10/10-13:02:45.698832 7fb8b97fa6c0 Manual compaction at level-0 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:02:45.711385 7fb8b97fa6c0 Manual compaction at level-1 from '!items!3O3MjRkrmX4HeaPY' @ 72057594037927935 : 1 .. '!items!q9JGWL4y4udYrzvD' @ 0 : 0; will stop at (end)
|
1
packs/conditions/CURRENT
Normal file
1
packs/conditions/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
7
packs/conditions/LOG
Normal file
7
packs/conditions/LOG
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-13:02:58.920624 7fb8ba7fc6c0 Recovering log #40
|
||||
2023/10/10-13:02:58.932301 7fb8ba7fc6c0 Delete type=3 #38
|
||||
2023/10/10-13:02:58.932409 7fb8ba7fc6c0 Delete type=0 #40
|
||||
2023/10/10-13:03:57.511725 7fb8b97fa6c0 Level-0 table #45: started
|
||||
2023/10/10-13:03:57.511754 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/10-13:03:57.549885 7fb8b97fa6c0 Delete type=0 #43
|
||||
2023/10/10-13:03:57.630117 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
7
packs/conditions/LOG.old
Normal file
7
packs/conditions/LOG.old
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-12:56:07.977477 7fb8ba7fc6c0 Recovering log #36
|
||||
2023/10/10-12:56:07.988921 7fb8ba7fc6c0 Delete type=3 #34
|
||||
2023/10/10-12:56:07.988993 7fb8ba7fc6c0 Delete type=0 #36
|
||||
2023/10/10-13:02:45.737650 7fb8b97fa6c0 Level-0 table #41: started
|
||||
2023/10/10-13:02:45.737688 7fb8b97fa6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/10-13:02:45.746588 7fb8b97fa6c0 Delete type=0 #39
|
||||
2023/10/10-13:02:45.746786 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
1
packs/currency/CURRENT
Normal file
1
packs/currency/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
7
packs/currency/LOG
Normal file
7
packs/currency/LOG
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-13:02:58.934342 7fb8b9ffb6c0 Recovering log #40
|
||||
2023/10/10-13:02:58.944542 7fb8b9ffb6c0 Delete type=3 #38
|
||||
2023/10/10-13:02:58.944867 7fb8b9ffb6c0 Delete type=0 #40
|
||||
2023/10/10-13:03:57.550046 7fb8b97fa6c0 Level-0 table #45: started
|
||||
2023/10/10-13:03:57.550075 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/10-13:03:57.587073 7fb8b97fa6c0 Delete type=0 #43
|
||||
2023/10/10-13:03:57.630133 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
7
packs/currency/LOG.old
Normal file
7
packs/currency/LOG.old
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-12:56:07.991428 7fb8bb7fe6c0 Recovering log #36
|
||||
2023/10/10-12:56:08.002283 7fb8bb7fe6c0 Delete type=3 #34
|
||||
2023/10/10-12:56:08.002401 7fb8bb7fe6c0 Delete type=0 #36
|
||||
2023/10/10-13:02:45.721220 7fb8b97fa6c0 Level-0 table #41: started
|
||||
2023/10/10-13:02:45.721260 7fb8b97fa6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/10-13:02:45.729318 7fb8b97fa6c0 Delete type=0 #39
|
||||
2023/10/10-13:02:45.746755 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
1
packs/equipment/CURRENT
Normal file
1
packs/equipment/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
7
packs/equipment/LOG
Normal file
7
packs/equipment/LOG
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-13:02:58.882548 7fb8b9ffb6c0 Recovering log #40
|
||||
2023/10/10-13:02:58.892996 7fb8b9ffb6c0 Delete type=3 #38
|
||||
2023/10/10-13:02:58.893055 7fb8b9ffb6c0 Delete type=0 #40
|
||||
2023/10/10-13:03:57.369324 7fb8b97fa6c0 Level-0 table #45: started
|
||||
2023/10/10-13:03:57.369366 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/10-13:03:57.407239 7fb8b97fa6c0 Delete type=0 #43
|
||||
2023/10/10-13:03:57.476916 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
7
packs/equipment/LOG.old
Normal file
7
packs/equipment/LOG.old
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-12:56:07.905817 7fb8bb7fe6c0 Recovering log #36
|
||||
2023/10/10-12:56:07.922816 7fb8bb7fe6c0 Delete type=3 #34
|
||||
2023/10/10-12:56:07.922878 7fb8bb7fe6c0 Delete type=0 #36
|
||||
2023/10/10-13:02:45.689545 7fb8b97fa6c0 Level-0 table #41: started
|
||||
2023/10/10-13:02:45.689571 7fb8b97fa6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/10-13:02:45.698697 7fb8b97fa6c0 Delete type=0 #39
|
||||
2023/10/10-13:02:45.711360 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
BIN
packs/perks/000005.ldb
Normal file
BIN
packs/perks/000005.ldb
Normal file
Binary file not shown.
1
packs/perks/CURRENT
Normal file
1
packs/perks/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
8
packs/perks/LOG
Normal file
8
packs/perks/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-13:02:58.959677 7fb8baffd6c0 Recovering log #40
|
||||
2023/10/10-13:02:58.970175 7fb8baffd6c0 Delete type=3 #38
|
||||
2023/10/10-13:02:58.970242 7fb8baffd6c0 Delete type=0 #40
|
||||
2023/10/10-13:03:57.630235 7fb8b97fa6c0 Level-0 table #45: started
|
||||
2023/10/10-13:03:57.630269 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/10-13:03:57.672851 7fb8b97fa6c0 Delete type=0 #43
|
||||
2023/10/10-13:03:57.709398 7fb8b97fa6c0 Manual compaction at level-0 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:03:57.709704 7fb8b97fa6c0 Manual compaction at level-1 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
8
packs/perks/LOG.old
Normal file
8
packs/perks/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-12:56:08.021175 7fb8baffd6c0 Recovering log #36
|
||||
2023/10/10-12:56:08.030985 7fb8baffd6c0 Delete type=3 #34
|
||||
2023/10/10-12:56:08.031047 7fb8baffd6c0 Delete type=0 #36
|
||||
2023/10/10-13:02:45.753579 7fb8b97fa6c0 Level-0 table #41: started
|
||||
2023/10/10-13:02:45.753608 7fb8b97fa6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/10-13:02:45.761146 7fb8b97fa6c0 Delete type=0 #39
|
||||
2023/10/10-13:02:45.761387 7fb8b97fa6c0 Manual compaction at level-0 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:02:45.761412 7fb8b97fa6c0 Manual compaction at level-1 from '!items!0LA7gMBDogO56AZK' @ 72057594037927935 : 1 .. '!items!zwZoHMkWYtMCNx9f' @ 0 : 0; will stop at (end)
|
1
packs/shields/CURRENT
Normal file
1
packs/shields/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
7
packs/shields/LOG
Normal file
7
packs/shields/LOG
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-13:02:58.894614 7fb8bb7fe6c0 Recovering log #40
|
||||
2023/10/10-13:02:58.904547 7fb8bb7fe6c0 Delete type=3 #38
|
||||
2023/10/10-13:02:58.904621 7fb8bb7fe6c0 Delete type=0 #40
|
||||
2023/10/10-13:03:57.477039 7fb8b97fa6c0 Level-0 table #45: started
|
||||
2023/10/10-13:03:57.477065 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/10-13:03:57.511617 7fb8b97fa6c0 Delete type=0 #43
|
||||
2023/10/10-13:03:57.630095 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
7
packs/shields/LOG.old
Normal file
7
packs/shields/LOG.old
Normal file
@ -0,0 +1,7 @@
|
||||
2023/10/10-12:56:07.928078 7fb8b9ffb6c0 Recovering log #36
|
||||
2023/10/10-12:56:07.951219 7fb8b9ffb6c0 Delete type=3 #34
|
||||
2023/10/10-12:56:07.951274 7fb8b9ffb6c0 Delete type=0 #36
|
||||
2023/10/10-13:02:45.729495 7fb8b97fa6c0 Level-0 table #41: started
|
||||
2023/10/10-13:02:45.729530 7fb8b97fa6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/10-13:02:45.737463 7fb8b97fa6c0 Delete type=0 #39
|
||||
2023/10/10-13:02:45.746770 7fb8b97fa6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
BIN
packs/skills/000005.ldb
Normal file
BIN
packs/skills/000005.ldb
Normal file
Binary file not shown.
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000042
|
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-13:02:58.947342 7fb8bb7fe6c0 Recovering log #40
|
||||
2023/10/10-13:02:58.957769 7fb8bb7fe6c0 Delete type=3 #38
|
||||
2023/10/10-13:02:58.957853 7fb8bb7fe6c0 Delete type=0 #40
|
||||
2023/10/10-13:03:57.673002 7fb8b97fa6c0 Level-0 table #45: started
|
||||
2023/10/10-13:03:57.673036 7fb8b97fa6c0 Level-0 table #45: 0 bytes OK
|
||||
2023/10/10-13:03:57.709266 7fb8b97fa6c0 Delete type=0 #43
|
||||
2023/10/10-13:03:57.709730 7fb8b97fa6c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:03:57.709887 7fb8b97fa6c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
8
packs/skills/LOG.old
Normal file
8
packs/skills/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-12:56:08.005346 7fb8b9ffb6c0 Recovering log #36
|
||||
2023/10/10-12:56:08.015748 7fb8b9ffb6c0 Delete type=3 #34
|
||||
2023/10/10-12:56:08.015827 7fb8b9ffb6c0 Delete type=0 #36
|
||||
2023/10/10-13:02:45.746905 7fb8b97fa6c0 Level-0 table #41: started
|
||||
2023/10/10-13:02:45.746952 7fb8b97fa6c0 Level-0 table #41: 0 bytes OK
|
||||
2023/10/10-13:02:45.753418 7fb8b97fa6c0 Delete type=0 #39
|
||||
2023/10/10-13:02:45.761349 7fb8b97fa6c0 Manual compaction at level-0 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:02:45.761401 7fb8b97fa6c0 Manual compaction at level-1 from '!items!5YJWuGaagmi1dgbv' @ 72057594037927935 : 1 .. '!items!yo7mOkfbbOogx8na' @ 0 : 0; will stop at (end)
|
BIN
packs/weapons/000018.ldb
Normal file
BIN
packs/weapons/000018.ldb
Normal file
Binary file not shown.
1
packs/weapons/CURRENT
Normal file
1
packs/weapons/CURRENT
Normal file
@ -0,0 +1 @@
|
||||
MANIFEST-000043
|
8
packs/weapons/LOG
Normal file
8
packs/weapons/LOG
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-13:02:58.906782 7fb8baffd6c0 Recovering log #41
|
||||
2023/10/10-13:02:58.917983 7fb8baffd6c0 Delete type=3 #39
|
||||
2023/10/10-13:02:58.918205 7fb8baffd6c0 Delete type=0 #41
|
||||
2023/10/10-13:03:57.587289 7fb8b97fa6c0 Level-0 table #46: started
|
||||
2023/10/10-13:03:57.587326 7fb8b97fa6c0 Level-0 table #46: 0 bytes OK
|
||||
2023/10/10-13:03:57.629924 7fb8b97fa6c0 Delete type=0 #44
|
||||
2023/10/10-13:03:57.630149 7fb8b97fa6c0 Manual compaction at level-0 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:03:57.630181 7fb8b97fa6c0 Manual compaction at level-1 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
8
packs/weapons/LOG.old
Normal file
8
packs/weapons/LOG.old
Normal file
@ -0,0 +1,8 @@
|
||||
2023/10/10-12:56:07.960871 7fb8baffd6c0 Recovering log #37
|
||||
2023/10/10-12:56:07.972451 7fb8baffd6c0 Delete type=3 #35
|
||||
2023/10/10-12:56:07.972510 7fb8baffd6c0 Delete type=0 #37
|
||||
2023/10/10-13:02:45.711546 7fb8b97fa6c0 Level-0 table #42: started
|
||||
2023/10/10-13:02:45.711570 7fb8b97fa6c0 Level-0 table #42: 0 bytes OK
|
||||
2023/10/10-13:02:45.721031 7fb8b97fa6c0 Delete type=0 #40
|
||||
2023/10/10-13:02:45.746738 7fb8b97fa6c0 Manual compaction at level-0 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
||||
2023/10/10-13:02:45.746799 7fb8b97fa6c0 Manual compaction at level-1 from '!items!265V8wzrrH3EEgtM' @ 72057594037927935 : 1 .. '!items!zx96NZdE3GrK999G' @ 0 : 0; will stop at (end)
|
@ -82,6 +82,14 @@
|
||||
.tabs .item.active, .blessures-list li ul li:first-child:hover, a:hover {
|
||||
text-shadow: 1px 0px 0px #ff6600;
|
||||
}
|
||||
select {
|
||||
background: rgba(228, 240, 240, 0.75);
|
||||
color: rgba(66, 66, 64, 0.95);
|
||||
}
|
||||
select option {
|
||||
background: rgba(228, 240, 240, 0.75);
|
||||
color: rgba(66, 66, 64, 0.95);
|
||||
}
|
||||
|
||||
.rollable:hover, .rollable:focus {
|
||||
color: #000;
|
||||
@ -230,14 +238,15 @@ table {border: 1px solid #7a7971;}
|
||||
|
||||
.fvtt-dark-stars .sheet-header .profile-img {
|
||||
-webkit-box-flex: 0;
|
||||
-ms-flex: 0 0 128px;
|
||||
flex: 0 0 128px;
|
||||
width: 196px;
|
||||
-ms-flex: 0 0 96px;
|
||||
flex: 0 0 96px;
|
||||
width: 96px;
|
||||
height: auto;
|
||||
max-height:260px;
|
||||
max-height:96px;
|
||||
margin-top: 0px;
|
||||
margin-right: 10px;
|
||||
object-fit: cover;
|
||||
border-width: 0px;
|
||||
object-position: 50% 0;
|
||||
}
|
||||
|
||||
@ -561,7 +570,7 @@ ul, li {
|
||||
}
|
||||
.list-item-shadow {
|
||||
background:rgba(87, 60, 32, 0.35);
|
||||
flex-grow: 0;
|
||||
/*flex-grow: 0;*/
|
||||
flex-wrap: nowrap;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
@ -1136,23 +1145,6 @@ ul, li {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.river-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
background-color: #7d5d3b00;
|
||||
border-radius: 3px;
|
||||
border: 2px ridge #846109;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
color: #ffffff;
|
||||
font-size: 0.8rem;
|
||||
padding: 2px 4px 0px 4px;
|
||||
text-decoration: none;
|
||||
text-shadow: 0px 1px 0px #4d3534;
|
||||
position: relative;
|
||||
margin:4px;
|
||||
}
|
||||
|
||||
.chat-card-button {
|
||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||
@ -1458,19 +1450,34 @@ Focus FOC: #ff0084
|
||||
}
|
||||
.item-field-label-short {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 4rem;
|
||||
min-width: 4rem;
|
||||
}
|
||||
.item-field-label-medium {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 6rem;
|
||||
min-width: 6rem;
|
||||
}
|
||||
.item-field-label-long {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 8rem;
|
||||
min-width: 8rem;
|
||||
}
|
||||
.item-field-label-vlong {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 14rem;
|
||||
min-width: 14rem;
|
||||
}
|
||||
.item-field-label-vlong2 {
|
||||
flex-grow:1;
|
||||
margin-top: 4px;
|
||||
max-width: 22rem;
|
||||
min-width: 22rem;
|
||||
}
|
||||
.item-control-end {
|
||||
align-self: flex-end;
|
||||
}
|
||||
|
@ -1,60 +0,0 @@
|
||||
{{!-- Carac Tab --}}
|
||||
<div class="tab items" data-group="primary" data-tab="statistics">
|
||||
|
||||
<div class="grid grid-2col">
|
||||
<div class="">
|
||||
<div class="flexrow">
|
||||
<span class="generic-label packed-left"><a class="generic-pool-roll"><button class="chat-card-button">Dice Pool</button></a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="">
|
||||
|
||||
<ul>
|
||||
<li class="item flexrow list-item" data-key="momentum">
|
||||
<span class="stat-label flexrow" name="momentum"> <h4>{{data.momentum.label}}</h4> </span>
|
||||
<input type="text" class="padd-right" name="data.momentum.value" value="{{data.momentum.value}}" data-dtype="Number"/>
|
||||
<input type="text" class="padd-right" name="data.momentum.max" value="{{data.momentum.max}}" data-dtype="Number"/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<ul>
|
||||
<li class="item flexrow list-item" data-key="mr">
|
||||
<span class="stat-label flexrow" name="mr">
|
||||
<a class="roll-mr" data-stat-key="{{mr}}"><h4>{{data.mr.label}}</h4></a>
|
||||
</span>
|
||||
<select class="carac-base flexrow" type="text" name="data.mr.value" value="{{data.mr.value}}"
|
||||
data-dtype="Number" >
|
||||
{{#select data.mr.value}}
|
||||
{{{@root.optionsDiceList}}}
|
||||
{{/select}}
|
||||
</select>
|
||||
<input type="text" class="padd-right input-numeric-short" name="data.mr.mod" value="{{data.mr.mod}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
<li class="item flexrow list-item" data-attr-key="{{key}}">
|
||||
{{#each data.secondary as |stat2 key|}}
|
||||
{{#if stat2.iscombat}}
|
||||
<span class="stat-label" name="{{key}}">
|
||||
<h4>{{stat2.label}} : </h4>
|
||||
</span>
|
||||
<span class="small-label padd-right packed-left">Cur</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.secondary.{{key}}.value" value="{{stat2.value}}" data-dtype="Number"/>
|
||||
<span class="small-label padd-right packed-left"> Max</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.secondary.{{key}}.max" value="{{stat2.max}}" data-dtype="Number"/>
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</li>
|
||||
<li class="item flexrow list-item" data-key="momentum">
|
||||
<span class="stat-label flexrow" name="momentum"><h4>{{data.momentum.label}}:</h4></span>
|
||||
<span class="small-label padd-right packed-left">Cur</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.momentum.value" value="{{data.momentum.value}}" data-dtype="Number"/>
|
||||
<span class="small-label padd-right packed-left"> Max</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.momentum.max" value="{{data.momentum.max}}" data-dtype="Number"/>
|
||||
</li>
|
128
system.json
128
system.json
@ -25,7 +25,7 @@
|
||||
"type": "Item",
|
||||
"label": "Armors",
|
||||
"name": "armor",
|
||||
"path": "packs/armor.db",
|
||||
"path": "packs/armor",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@ -34,7 +34,7 @@
|
||||
"type": "Item",
|
||||
"label": "Equipments",
|
||||
"name": "equipment",
|
||||
"path": "packs/equipment.db",
|
||||
"path": "packs/equipment",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@ -43,7 +43,7 @@
|
||||
"type": "Item",
|
||||
"label": "Shields",
|
||||
"name": "shields",
|
||||
"path": "packs/shields.db",
|
||||
"path": "packs/shields",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@ -52,7 +52,7 @@
|
||||
"type": "Item",
|
||||
"label": "Weapons",
|
||||
"name": "weapons",
|
||||
"path": "packs/weapons.db",
|
||||
"path": "packs/weapons",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@ -61,7 +61,7 @@
|
||||
"type": "Item",
|
||||
"label": "Conditions",
|
||||
"name": "conditions",
|
||||
"path": "packs/conditions.db",
|
||||
"path": "packs/conditions",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@ -70,52 +70,7 @@
|
||||
"type": "Item",
|
||||
"label": "Currency",
|
||||
"name": "currency",
|
||||
"path": "packs/currency.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Lore - Air",
|
||||
"name": "lore-air",
|
||||
"path": "packs/lore-air.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Lore - Earth",
|
||||
"name": "lore-earth",
|
||||
"path": "packs/lore-earth.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Lore - Fire",
|
||||
"name": "lore-fire",
|
||||
"path": "packs/lore-fire.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Lore - Water",
|
||||
"name": "lore-water",
|
||||
"path": "packs/lore-water.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Lore - Shadow",
|
||||
"name": "lore-shadow",
|
||||
"path": "packs/lore-shadow.db",
|
||||
"path": "packs/currency",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@ -124,70 +79,16 @@
|
||||
"type": "Item",
|
||||
"label": "Skills",
|
||||
"name": "skills",
|
||||
"path": "packs/skills.db",
|
||||
"path": "packs/skills",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Feats",
|
||||
"name": "feats",
|
||||
"path": "packs/feats.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Poisons",
|
||||
"name": "poisons",
|
||||
"path": "packs/poisons.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Powers - Class",
|
||||
"name": "classpowers",
|
||||
"path": "packs/classpowers.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Tricks & Traps",
|
||||
"name": "trickstraps",
|
||||
"path": "packs/trickstraps.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Action Tokens",
|
||||
"name": "action-tokens",
|
||||
"path": "packs/action-tokens.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "Item",
|
||||
"label": "Powers - Monsters",
|
||||
"name": "monster-powers",
|
||||
"path": "packs/monster-powers.db",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
},
|
||||
{
|
||||
"type": "RollTable",
|
||||
"label": "Rolltables",
|
||||
"name": "rolltables",
|
||||
"path": "packs/rolltables.db",
|
||||
"label": "Perks",
|
||||
"name": "perks",
|
||||
"path": "packs/perks",
|
||||
"system": "fvtt-dark-stars",
|
||||
"private": false,
|
||||
"flags": {}
|
||||
@ -199,15 +100,14 @@
|
||||
"styles": [
|
||||
"styles/simple.css"
|
||||
],
|
||||
"version": "10.0.0",
|
||||
"version": "11.0.2",
|
||||
"compatibility": {
|
||||
"minimum": "10",
|
||||
"verified": "10",
|
||||
"maximum": "10"
|
||||
"minimum": "11",
|
||||
"verified": "11"
|
||||
},
|
||||
"title": "Dark Stars RPG",
|
||||
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-dark-stars/raw/branch/main/system.json",
|
||||
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-dark-stars/archive/fvtt-dark-stars-v10.0.0.zip",
|
||||
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-dark-stars/archive/fvtt-dark-stars-v11.0.2.zip",
|
||||
"url": "https://www.uberwald.me/gitea/uberwald/",
|
||||
"background": "images/ui/dark_stars_welcome_page.webp",
|
||||
"id": "fvtt-dark-stars"
|
||||
|
155
template.json
155
template.json
@ -46,105 +46,117 @@
|
||||
"str": {
|
||||
"label": "Strength",
|
||||
"abbrev": "str",
|
||||
"col": 1,
|
||||
"value": 0,
|
||||
"bonusname": "CSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"dex": {
|
||||
"label": "Dexterity",
|
||||
"abbrev": "dex",
|
||||
"col": 1,
|
||||
"value": 0,
|
||||
"bonusname": "ASB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"con": {
|
||||
"label": "Constitution",
|
||||
"abbrev": "con",
|
||||
"col": 1,
|
||||
"value": 0,
|
||||
"bonusname": "SSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"siz": {
|
||||
"label": "Size",
|
||||
"abbrev": "siz",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"bonusname": "MSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"att": {
|
||||
"label": "Attractiveness",
|
||||
"abbrev": "att",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"bonusname": "PSB",
|
||||
"base": 0,
|
||||
"bonus": 0
|
||||
"value": 0
|
||||
},
|
||||
"int": {
|
||||
"label": "Intelligence",
|
||||
"abbrev": "int",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "EGO",
|
||||
"derivvalue": 0,
|
||||
"base": 0
|
||||
"value": 0
|
||||
},
|
||||
"edu": {
|
||||
"label": "Education",
|
||||
"abbrev": "edu",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "HUP",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"value": 0
|
||||
},
|
||||
"cha": {
|
||||
"label": "Charisma",
|
||||
"abbrev": "cha",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "SS",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"value": 0
|
||||
},
|
||||
"emp": {
|
||||
"label": "Empathy",
|
||||
"abbrev": "edu",
|
||||
"col": 2,
|
||||
"value": 0,
|
||||
"derivname": "MCDB",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"abbrev": "emp",
|
||||
"value": 0
|
||||
},
|
||||
"sel": {
|
||||
"label": "Self-Control",
|
||||
"abbrev": "sel",
|
||||
"col": 2,
|
||||
"value": 0
|
||||
}
|
||||
},
|
||||
"derivated": {
|
||||
"csb": {
|
||||
"label": "CSB",
|
||||
"value": 0,
|
||||
"derivname": "SI",
|
||||
"base": 0,
|
||||
"derivvalue": 0
|
||||
"bonus": 0
|
||||
},
|
||||
"asb": {
|
||||
"label": "ASB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"ssb": {
|
||||
"label": "SSB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"msb": {
|
||||
"label": "MSB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"psb": {
|
||||
"label": "PSB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"ego": {
|
||||
"label": "EGO",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"hup": {
|
||||
"label": "HUP",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"ss": {
|
||||
"label": "SS",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"mcdb": {
|
||||
"label": "MCDB",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
},
|
||||
"si": {
|
||||
"label": "SI",
|
||||
"value": 0,
|
||||
"bonus": 0
|
||||
}
|
||||
},
|
||||
"secondary": {
|
||||
"hp": {
|
||||
"label": "Hitpoint",
|
||||
"label": "Hitpoints",
|
||||
"abbrev": "hp",
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"max": 0
|
||||
},
|
||||
"lp": {
|
||||
"label": "Hitpoint",
|
||||
"abbrev": "lp",
|
||||
"fp": {
|
||||
"label": "Fatigue Points",
|
||||
"abbrev": "fp",
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"max": 0
|
||||
@ -152,6 +164,7 @@
|
||||
"bulk": {
|
||||
"label": "Bulk",
|
||||
"abbrev": "bulk",
|
||||
"maxeditable": true,
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"max": 0
|
||||
@ -196,7 +209,7 @@
|
||||
"value": 0,
|
||||
"armour": 0
|
||||
},
|
||||
"righttarm": {
|
||||
"rightarm": {
|
||||
"label": "Right Arm",
|
||||
"dice": [
|
||||
8
|
||||
@ -224,6 +237,11 @@
|
||||
"armour": 0
|
||||
}
|
||||
},
|
||||
"various": {
|
||||
"rerolls": {
|
||||
"value": 0
|
||||
}
|
||||
},
|
||||
"xp": {
|
||||
"total": 0,
|
||||
"spent": 0
|
||||
@ -264,11 +282,17 @@
|
||||
],
|
||||
"skill": {
|
||||
"base": "",
|
||||
"value": 0,
|
||||
"bonus": 0,
|
||||
"used": false,
|
||||
"description": ""
|
||||
},
|
||||
"perk": {
|
||||
"perktype": "normal",
|
||||
"role": "",
|
||||
"requirements": "",
|
||||
"xpcost": 0,
|
||||
"cost": 0,
|
||||
"description": ""
|
||||
},
|
||||
"ability": {
|
||||
@ -280,6 +304,11 @@
|
||||
},
|
||||
"cyber": {
|
||||
"hup": 0,
|
||||
"bulk": 0,
|
||||
"sp": 0,
|
||||
"runningtime": 0,
|
||||
"cost": 0,
|
||||
"equipped": false,
|
||||
"description": ""
|
||||
},
|
||||
"armor": {
|
||||
@ -315,7 +344,7 @@
|
||||
"max": 0,
|
||||
"value": 0
|
||||
},
|
||||
"righttarm": {
|
||||
"rightarm": {
|
||||
"protected": false,
|
||||
"max": 0,
|
||||
"value": 0
|
||||
@ -349,8 +378,12 @@
|
||||
"weapon": {
|
||||
"weapontype": "",
|
||||
"associatedskill": "",
|
||||
"penetration": "",
|
||||
"penetrationmin": "",
|
||||
"penetrationmax": "",
|
||||
"hashpdamage": true,
|
||||
"damage": "",
|
||||
"hasfatiguedamage": false,
|
||||
"fatiguedamage": "",
|
||||
"bulk": 0,
|
||||
"br": 0,
|
||||
"rof": 0,
|
||||
@ -359,8 +392,14 @@
|
||||
"maxrange": "",
|
||||
"sp": 0,
|
||||
"cost": 0,
|
||||
"size": 0,
|
||||
"size": "",
|
||||
"skillbonus": "",
|
||||
"incendiary": false,
|
||||
"armourdestruction": false,
|
||||
"disablesystems": false,
|
||||
"specialffect": false,
|
||||
"guidedweapon": false,
|
||||
"ammotype": "",
|
||||
"equipped": false,
|
||||
"description": ""
|
||||
}
|
||||
|
@ -3,77 +3,10 @@
|
||||
{{!-- Sheet Header --}}
|
||||
<header class="sheet-header">
|
||||
<div class="header-fields">
|
||||
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
<div class="flexrow">
|
||||
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
<div class="flexcol">
|
||||
|
||||
<div class="flexrow">
|
||||
<div class="ability-item">
|
||||
<ul>
|
||||
{{#each data.abilities as |ability key|}}
|
||||
{{#if (eq ability.col 1)}}
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-ability-block.html ability=ability key=key}}
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<span class="ability-label " name="class">
|
||||
<h4 class="ability-text-white ability-margin">Class</h4>
|
||||
</span>
|
||||
<select class="competence-base flexrow" type="text" name="system.biodata.class" value="{{data.biodata.class}}" data-dtype="String">
|
||||
{{#select data.biodata.class}}
|
||||
<option value="chaplain">Chaplain</option>
|
||||
<option value="magus">Magus</option>
|
||||
<option value="martial">Martial</option>
|
||||
<option value="skalawag">Skalawag</option>
|
||||
<option value="warden">Warden</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="ability-item">
|
||||
<ul>
|
||||
{{#each data.abilities as |ability key|}}
|
||||
{{#if (eq ability.col 2)}}
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-ability-block.html ability=ability key=key}}
|
||||
{{/if}}
|
||||
{{/each}}
|
||||
|
||||
{{#if equippedArmor}}
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<img class="sheet-competence-img" src="{{equippedArmor.img}}" />
|
||||
<span class="ability-label " name="class">
|
||||
<h4 class="ability-text-white ability-margin"><a class="roll-armor-die ability-margin">{{equippedArmor.name}}</a></h4>
|
||||
</span>
|
||||
</li>
|
||||
{{/if}}
|
||||
{{#if equippedShield}}
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<img class="sheet-competence-img" src="{{equippedShield.img}}" />
|
||||
<span class="ability-label " name="equippedShield">
|
||||
<h4 class="ability-text-white ability-margin"><a class="roll-shield-die ability-margin">{{equippedShield.name}}</a></h4>
|
||||
</span>
|
||||
</li>
|
||||
{{/if}}
|
||||
<li class="item flexrow list-item" data-attr-key="class">
|
||||
<img class="sheet-competence-img" src="systems/fvtt-crucible-rpg/images/icons/feats/Marksman (Ballistic).webp" />
|
||||
<span class="ability-label " name="rollTarget">
|
||||
<h4 class="ability-text-white ability-margin"><a class="roll-target-die ability-margin">Target Roll</a></h4>
|
||||
</span>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="ability-item status-block">
|
||||
{{> systems/fvtt-crucible-rpg/templates/partial-actor-status.html}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -81,9 +14,10 @@
|
||||
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="main">Main</a>
|
||||
<a class="item" data-tab="skills">Skills</a>
|
||||
<a class="item" data-tab="perks">Perks</a>
|
||||
<a class="item" data-tab="combat">Combat</a>
|
||||
<a class="item" data-tab="lore">Lore</a>
|
||||
<a class="item" data-tab="equipment">Equipment</a>
|
||||
<a class="item" data-tab="biodata">Biography</a>
|
||||
</nav>
|
||||
@ -92,38 +26,121 @@
|
||||
<section class="sheet-body">
|
||||
|
||||
{{!-- Skills Tab --}}
|
||||
<div class="tab skills" data-group="primary" data-tab="skills">
|
||||
<div class="tab main" data-group="primary" data-tab="main">
|
||||
|
||||
<div class="flexrow">
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
{{#each system.attributes as |attr key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">{{attr.label}}</label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.attributes.{{key}}.value" value="{{attr.value}}" data-dtype="Number"/>
|
||||
{{/each}}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
{{#each system.derivated as |deriv key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">{{deriv.label}}</label>
|
||||
<label class="item-field-label-short">{{deriv.value}}</label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.derivated.{{key}}.bonus" value="{{deriv.bonus}}" data-dtype="Number"/>
|
||||
{{/each}}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul class="stat-list alternate-list item-list">
|
||||
{{#each system.secondary as |second key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">{{second.label}}</label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.secondary.{{key}}.value" value="{{second.value}}" data-dtype="Number"/>
|
||||
{{#if second.maxeditable}}
|
||||
<label class="item-field-label-short"> / </label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.secondary.{{key}}.max" value="{{second.max}}" data-dtype="Number"/>
|
||||
{{else}}
|
||||
<label class="item-field-label-short"> / {{second.max}}</label>
|
||||
{{/if}}
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.secondary.{{key}}.bonus" value="{{second.bonus}}" data-dtype="Number"/>
|
||||
{{/each}}
|
||||
</li>
|
||||
<li class="item stat flexrow list-item list-item-shadow">
|
||||
<label class="item-field-label-medium">Rerolls : </label>
|
||||
<input type="text" class="item-field-label-short padd-right" name="system.various.rerolls.value" value="{{system.various.rerolls.value}}" data-dtype="Number"/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Skills Tab --}}
|
||||
<div class="tab skills" data-group="primary" data-tab="skills">
|
||||
|
||||
<ul class="alternate-list item-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<span class="item-name-label-header-long2">
|
||||
<h3><label class="items-title-text">Skills</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Ability</label>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Dice</label>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Base</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Background</label>
|
||||
<label class="short-label">Derivated</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Bonus</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Total</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Used?</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label"> </label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each skills as |skill key|}}
|
||||
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{skill.img}}" /></a>
|
||||
<span class="item-name-label"><a class="roll-skill">{{skill.name}}</a></span>
|
||||
<span class="item-field-label-short">{{upper skill.system.ability}}</span>
|
||||
<span class="item-field-label-short">{{skill.system.skilldice}}</span>
|
||||
<span class="item-field-label-long"> - </span>
|
||||
<div class="item-filler"> </div>
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{skill._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{skill.img}}" />
|
||||
</a>
|
||||
<span class="item-field-label-vlong2"><a class="roll-skill">{{skill.name}}</a></span>
|
||||
<span class="item-field-label-medium">{{skill.system.value}}</span>
|
||||
<span class="item-field-label-long">{{skill.derivated.label}} ({{skill.derivated.value}})</span>
|
||||
<span class="item-field-label-medium">{{skill.system.bonus}}</span>
|
||||
<span class="item-field-label-medium">{{skill.total}}%</span>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" class="skill-used-id" {{checked skill.system.used}}/></label>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Perks Tab --}}
|
||||
<div class="tab perks" data-group="primary" data-tab="perks">
|
||||
|
||||
<ul class="alternate-list item-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header-long2">
|
||||
<h3><label class="items-title-text">Perks</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label"> </label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each perks as |perk key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{perk._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{perk.img}}" />
|
||||
</a>
|
||||
<span class="item-field-label-vlong2">{{perk.name}}</span>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
{{!-- Combat Tab --}}
|
||||
@ -137,10 +154,13 @@
|
||||
<h3><label class="items-title-text">Weapons</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-short">
|
||||
<label class="short-label">Ability</label>
|
||||
<label class="short-label">Type</label>
|
||||
</span>
|
||||
<span class="item-field-label-long">
|
||||
<label class="short-label">Skill</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Range</label>
|
||||
<label class="short-label">Damage</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each equippedWeapons as |weapon key|}}
|
||||
@ -149,44 +169,13 @@
|
||||
src="{{weapon.img}}" /></a>
|
||||
<span class="item-name-label-long"><a class ="roll-weapon">{{weapon.name}}</a></span>
|
||||
|
||||
<span class="item-field-label-short">{{weapon.system.ability}}</span>
|
||||
<span class="item-field-label-short">{{upperFirst weapon.system.weapontype}}</span>
|
||||
|
||||
<span class="item-field-label-medium">{{perk.system.range}}</span>
|
||||
<span class="item-field-label-long">{{weapon.system.skill}}</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
<span class="item-field-label-long">{{weapon.system.damage}}</span>
|
||||
|
||||
<div>
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header-long">
|
||||
<h3><label class="items-title-text">Feats</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Feature Die?</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SL?</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SL</label>
|
||||
</span>
|
||||
</li>
|
||||
{{#each feats as |feat key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{feat._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{feat.img}}" /></a>
|
||||
<span class="item-name-label-long">{{feat.name}}</span>
|
||||
|
||||
<span class="item-field-label-medium">{{upperFirst feat.system.isfeatdie}}</span>
|
||||
<span class="item-field-label-medium">{{upperFirst feat.system.issl}}</span>
|
||||
<span class="item-field-label-medium">{{feat.system.sl}}</span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
@ -197,27 +186,6 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<ul class="stat-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header-long">
|
||||
<h3><label class="items-title-text">Conditions</label></h3>
|
||||
</span>
|
||||
</li>
|
||||
{{#each conditions as |condition key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{condition._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{condition.img}}" /></a>
|
||||
<span class="item-name-label-long">{{condition.name}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -250,9 +218,9 @@
|
||||
<span class="item-name-label">
|
||||
<a class="power-roll">{{spell.name}}</a>
|
||||
</span>
|
||||
<span class="item-field-label-medium">{{upperFirst spell.system.lore}}</span>
|
||||
<span class="item-field-label-short">{{upperFirst spell.system.circle}}</span>
|
||||
<span class="item-field-label-medium">{{upperFirst spell.system.range}}</span>
|
||||
<span class="item-field-label-medium">{{spell.system.lore}}</span>
|
||||
<span class="item-field-label-short">{{spell.system.circle}}</span>
|
||||
<span class="item-field-label-medium">{{spell.system.range}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
@ -343,8 +311,8 @@
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{weapon.img}}" /></a>
|
||||
<span class="item-name-label">{{weapon.name}}</span>
|
||||
<span class="item-field-label-short"><label>{{upper weapon.system.ability}}</label></span>
|
||||
<span class="item-field-label-short"><label>{{upper weapon.system.damage}}</label></span>
|
||||
<span class="item-field-label-short"><label>{{weapon.system.ability}}</label></span>
|
||||
<span class="item-field-label-short"><label>{{weapon.system.damage}}</label></span>
|
||||
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
@ -421,6 +389,40 @@
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
<h3><label class="items-title-text">Cyber</label></h3>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">SP</label>
|
||||
</span>
|
||||
<span class="item-field-label-medium">
|
||||
<label class="short-label">Running time</label>
|
||||
</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-add" data-type="cyber" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{#each cybers as |cyber key|}}
|
||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{cyber._id}}">
|
||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||
src="{{cyber.img}}" /></a>
|
||||
<span class="item-name-label">{{cyber.name}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.sp}}</span>
|
||||
<span class="item-field-label-medium">{{cyber.system.runningtime}}</span>
|
||||
<div class="item-filler"> </div>
|
||||
<div class="item-controls item-controls-fixed">
|
||||
<a class="item-control item-equip" title="Worn">{{#if cyber.system.equipped}}<i
|
||||
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
|
||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||
</div>
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
|
||||
|
||||
<ul class="item-list alternate-list">
|
||||
<li class="item flexrow list-item items-title-bg">
|
||||
<span class="item-name-label-header">
|
||||
|
@ -8,65 +8,10 @@
|
||||
|
||||
<div class="flexcol">
|
||||
|
||||
{{#if sizeDice}}
|
||||
{{#if skill}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Size basic dices : </span>
|
||||
<span class="roll-dialog-label">{{sizeDice.nb}}{{sizeDice.dice}}</span>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Distance bonus dice(s) : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="distanceBonusDice" value="{{distanceBonusDice}}" data-dtype="String" >
|
||||
{{#select distanceBonusDice}}
|
||||
<option value="0">0</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if hasCover}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Cover : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="hasCover" value="{{hasCover}}" data-dtype="String" >
|
||||
{{#select hasCover}}
|
||||
<option value="none">None</option>
|
||||
<option value="cover50">Cover at 50% (+1 dice)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if situational}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Situational : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="situational" value="{{situational}}" data-dtype="String" >
|
||||
{{#select situational}}
|
||||
<option value="none">None</option>
|
||||
<option value="dodge">Dodge (+1 dice)</option>
|
||||
<option value="prone">Prone (+1 dice)</option>
|
||||
<option value="moving">Moving (+1 dice)</option>
|
||||
<option value="Engaged">Engaged (+1 dice)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
{{#if save}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{save.label}} : </span>
|
||||
<span class="roll-dialog-label">{{save.value}}d6</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if ability}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Ability : </span>
|
||||
<span class="roll-dialog-label">{{ability.value}}d6</span>
|
||||
<span class="roll-dialog-label">Skill : </span>
|
||||
<span class="roll-dialog-label">{{skill.name}} ( {{skill.total}}% )</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
@ -75,93 +20,45 @@
|
||||
<span class="roll-dialog-label">Weapon : </span>
|
||||
<span class="roll-dialog-label">{{weapon.name}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if shield}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Use shield ? : </span>
|
||||
<span class="roll-dialog-label"><input type="checkbox" id="useshield" name="useshield" {{checked useshield}}/></span>
|
||||
<span class="roll-dialog-label">Above effective range ({{weapon.system.effectiverange}}, -30%) : </span>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" id="above-effective-range" {{checked isAboveEffectiveRange}}/></label>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">{{shield.name}} : </span>
|
||||
<span class="roll-dialog-label">{{shield.data.shielddie}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if skill}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Skill : </span>
|
||||
<span class="roll-dialog-label">{{skill.name}} - {{skill.data.skilldice}}</span>
|
||||
</div>
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Feature die or SL+2? : </span>
|
||||
<span class="roll-dialog-label">{{#if skill.data.isfeatdie}} Yes {{else}} No {{/if}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{#if noAdvantage}}
|
||||
<div>
|
||||
<span class="roll-dialog-label">No advantage due to condition : {{noAdvantage.name}}</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Advantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="advantage" value="{{advantage}}" data-dtype="String" >
|
||||
{{#select advantage}}
|
||||
<span class="roll-dialog-label">Aiming : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="weapon-aiming" value="{{weaponAiming}}" data-dtype="String" >
|
||||
{{#select weaponAiming}}
|
||||
<option value="none">None</option>
|
||||
<option value="advantage1">1 Advantage</option>
|
||||
<option value="advantage2">2 Advantages</option>
|
||||
<option value="arm">Arm (-50)</option>
|
||||
<option value="head">Head (-50)</option>
|
||||
<option value="torso">Torso(-30)</option>
|
||||
<option value="leg">Leg (-30)</option>
|
||||
<option value="hand">Hand/Weapon (-70)</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Disadvantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="disadvantage" value="{{disadvantage}}" data-dtype="String" >
|
||||
{{#select disadvantage}}
|
||||
<option value="none">None</option>
|
||||
<option value="disadvantage1">1 Disadvantage</option>
|
||||
<option value="disadvantage2">2 Disadvantages</option>
|
||||
<span class="roll-dialog-label">Bonus/Malus : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="bonusMalus" value="{{bonusMalus}}" data-dtype="Number" >
|
||||
{{#select bonusMalus}}
|
||||
<option value="-80">-80%</option>
|
||||
<option value="-70">-70%</option>
|
||||
<option value="-60">-60%</option>
|
||||
<option value="-50">-50%</option>
|
||||
<option value="-40">-40%</option>
|
||||
<option value="-30">-30%</option>
|
||||
<option value="-20">-20%</option>
|
||||
<option value="-10">-10%</option>
|
||||
<option value="0">0%</option>
|
||||
<option value="+10">+10%</option>
|
||||
<option value="+20">+20%</option>
|
||||
<option value="+30">+30%</option>
|
||||
<option value="+40">+40%</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll with Advantage/Disadvantage : </span>
|
||||
<select class="status-small-label color-class-common" type="text" id="rollAdvantage" value="{{rollAdvantage}}" data-dtype="String" >
|
||||
{{#select rollAdvantage}}
|
||||
<option value="none">None</option>
|
||||
<option value="roll-advantage">Roll with Advantage</option>
|
||||
<option value="roll-disadvantage">Roll with Disadvantage</option>
|
||||
{{/select}}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{{#if forceAdvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">1 Advantage from condition : {{forceAdvantage.name}}
|
||||
{{#if advantageFromTarget}} (Provided by targetted actor) {{/if}}
|
||||
</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceDisadvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">1 Disadvantage from condition : {{forceDisadvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceRollAdvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll Advantage from condition : {{forceRollAdvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{#if forceRollDisadvantage}}
|
||||
<div class="flexrow">
|
||||
<span class="roll-dialog-label">Roll Disadvantage from condition : {{forceRollDisadvantage.name}} </span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</form>
|
@ -18,131 +18,50 @@
|
||||
|
||||
<div>
|
||||
<ul>
|
||||
{{#if (eq rollOrder 1)}}
|
||||
<li><strong>Roll with {{rollType}} - Roll 1</strong></li>
|
||||
{{/if}}
|
||||
{{#if (eq rollOrder 2)}}
|
||||
<li><strong>Roll with {{rollType}} - Roll 2</strong></li>
|
||||
{{/if}}
|
||||
{{#if (eq rollOrder 3)}}
|
||||
<li><strong>Roll with {{rollType}} - Final result !</strong></li>
|
||||
{{/if}}
|
||||
|
||||
{{#if save}}
|
||||
<li>Save : {{save.label}} - {{save.value}}d6
|
||||
({{#each roll.terms.0.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if sizeDice}}
|
||||
<li>Size/Range/Cover/Situational dices
|
||||
({{#each roll.terms.0.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if ability}}
|
||||
<li>Ability : {{ability.label}} - {{ability.value}}d6
|
||||
({{#each roll.terms.0.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if skill}}
|
||||
<li>Skill : {{skill.name}} - {{skill.data.skilldice}}
|
||||
{{#if featSL}}
|
||||
- with Feat SL +{{featSL}}
|
||||
<li>Skill : {{skill.name}} ({{skill.total}}%)</li>
|
||||
{{/if}}
|
||||
({{#each roll.terms.2.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{#if weapon}}
|
||||
<li>Weapon : {{weapon.name}}</li>
|
||||
<li>Location hit : {{upperFirst weaponAiming}} ({{locationMalus}})</li>
|
||||
{{/if}}
|
||||
{{#if isAboveEffectiveRange}}
|
||||
<li>Above effective range: yes, -30% applied</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if noAdvantage}}
|
||||
<li>No advantage due to condition : {{noAdvantage.name}}</li>
|
||||
<li>Bonus/Malus: {{bonusMalus}}% </li>
|
||||
<li>Final score: {{percentValue}}% </li>
|
||||
<li>Result: {{diceResult}} </li>
|
||||
<li>Degrees: {{degrees}} </li>
|
||||
|
||||
{{#if isCriticalSuccess}}
|
||||
<li><strong>Critical Success !</strong></li>
|
||||
{{else}}
|
||||
{{#if (or (eq advantage "advantage1") forceAdvantage)}}
|
||||
<li>1 Advantage Die !
|
||||
({{#each roll.terms.8.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{#if isSuccess}}
|
||||
<li><strong>Success !</strong></li>
|
||||
{{else}}
|
||||
{{#if isCriticalFailure}}
|
||||
<li><strong>Critical Failure !</strong></li>
|
||||
{{else}}
|
||||
<li><strong>Failure ...</strong></li>
|
||||
{{/if}}
|
||||
{{#if (eq advantage "advantage2") }}
|
||||
<li>2 Advantage Dice !
|
||||
({{#each roll.terms.8.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
{{/if}}
|
||||
|
||||
{{#if (or (eq disadvantage "disadvantage1") forceDisadvantage)}}
|
||||
<li>1 Disadvantage Die !
|
||||
({{#each roll.terms.10.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{#if (and weapon isSuccess)}}
|
||||
{{#if weapon.system.hashpdamage}}
|
||||
<li>Roll HP Damage: [[/r {{weapon.system.damage}}]]</li>
|
||||
{{/if}}
|
||||
{{#if (eq disadvantage "disadvantage2")}}
|
||||
<li>2 Disadvantage Dice !
|
||||
({{#each roll.terms.10.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{#if weapon.system.hasfatiguedamage}}
|
||||
<li>Roll Fatigue Damage: [[/r {{weapon.system.fatiguedamage}}]]</li>
|
||||
{{/if}}
|
||||
{{#if (eq rollAdvantage "roll-advantage")}}
|
||||
<li>Roll with Advantage !</li>
|
||||
{{/if}}
|
||||
{{#if (eq rollAdvantage "roll-disadvantage")}}
|
||||
<li>Roll with Disadvantage !</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if skillArmorPenalty}}
|
||||
<li>Armor Penalty : {{skillArmorPenalty}} Disadvantage Dice
|
||||
({{#each roll.terms.12.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{#if (and (not isSuccess) rerolls)}}
|
||||
<button class="chat-card-button chat-reroll">Reroll !</button>
|
||||
{{/if}}
|
||||
|
||||
{{#if hasBonusDice}}
|
||||
<li>Skill bonus dice : {{hasBonusDice}}
|
||||
({{#each roll.terms.6.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if complexSkillDisadvantage}}
|
||||
<li>Roll with Disadvantage because of Complex Skill at SL 0 !</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if hasFeatDie}}
|
||||
<li>Feat Die : d10
|
||||
({{#each roll.terms.4.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
{{#if useshield}}
|
||||
<li>Shield : {{shield.name}} - {{shield.data.shielddie}}
|
||||
({{#each roll.terms.14.results as |die idx|}}
|
||||
{{die.result}}
|
||||
{{/each}})
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li><strong>Number of successes</strong> {{nbSuccess}} </li>
|
||||
|
||||
<!-- <button class="chat-card-button reroll-level-remaining" data-roll-id="{{rollId}}">Reroll</button> -->
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
<form class="{{cssClass}}" autocomplete="off">
|
||||
<header class="sheet-header">
|
||||
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}"/>
|
||||
<img class="item-sheet-img" src="{{img}}" data-edit="img" title="{{name}}" />
|
||||
<div class="header-fields">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name"/></h1>
|
||||
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
@ -15,10 +15,24 @@
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
<ul>
|
||||
<li class="flexrow"><label class="generic-label">HUP</label>
|
||||
<input type="text" class="" name="system.hup" value="{{system.hup}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="generic-label">Bulk</label>
|
||||
<input type="text" class="" name="system.bulk" value="{{system.bulk}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">SP</label>
|
||||
<input type="text" class="" name="system.sp" value="{{system.sp}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">Running time (hours)</label>
|
||||
<input type="text" class="" name="system.runningtime" value="{{system.runningtime}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">Cost</label>
|
||||
<input type="text" class="" name="system.cost" value="{{system.cost}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">HUP</label>
|
||||
<input type="text" class="" name="system.hup" value="{{system.hup}}" data-dtype="Number" />
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked system.equipped}}/></label>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -15,16 +15,16 @@
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
<ul>
|
||||
<li class="flexrow"><label class="generic-label">Equipped ?</label>
|
||||
<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked system.equipped}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">Quantity</label>
|
||||
<li class="flexrow"><label class="item-field-label-long">Quantity</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.quantity" value="{{system.quantity}}" data-dtype="Number"/>
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">Bulk</label>
|
||||
<li class="flexrow"><label class="item-field-label-long">Bulk</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{system.bulk}}" data-dtype="Number"/>
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">Cost</label>
|
||||
<li class="flexrow"><label class="item-field-label-long">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
</ul>
|
||||
|
@ -14,6 +14,41 @@
|
||||
{{> systems/fvtt-dark-stars/templates/partials/partial-item-description.hbs}}
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Perk Type</label>
|
||||
<select class="item-field-label-vlong" type="text" name="system.perktype" value="{{system.perktype}}" data-dtype="String">
|
||||
{{#select system.perktype}}
|
||||
{{#each config.perktypes as |type key|}}
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
{{#if (eq system.perktype "normal")}}
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Starting Skill Cost</label>
|
||||
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
{{else}}
|
||||
|
||||
{{#if (eq system.perktype "role")}}
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Role</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.role" value="{{system.role}}" data-dtype="String"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">Requirements</label>
|
||||
<input type="text" class="item-field-label-vlong" name="system.requirements" value="{{system.requirements}}" data-dtype="String"/>
|
||||
</li>
|
||||
<li class="flexrow">
|
||||
<label class="item-field-label-long">XP Cost</label>
|
||||
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.xpcost" value="{{system.xpcost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</form>
|
||||
|
@ -15,8 +15,8 @@
|
||||
|
||||
<div class="tab details" data-group="primary" data-tab="details">
|
||||
<ul>
|
||||
<li class="flexrow"><label class="generic-label">Base</label>
|
||||
<select class="competence-base flexrow" type="text" name="system.base" value="{{system.base}}" data-dtype="String">
|
||||
<li class="flexrow"><label class="item-field-label-long">Base</label>
|
||||
<select class="item-field-label-long competence-base flexrow" type="text" name="system.base" value="{{system.base}}" data-dtype="String">
|
||||
{{#select system.base}}
|
||||
{{#each config.basebonus as |name key|}}
|
||||
<option value="{{key}}">{{name}}</option>
|
||||
@ -25,11 +25,15 @@
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Bonus</label>
|
||||
<input type="text" class="" name="system.bonus" value="{{system.bonus}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-long">Starting skill value</label>
|
||||
<input type="text" class="item-field-label-long" name="system.value" value="{{system.value}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Used ?</label>
|
||||
<li class="flexrow"><label class="item-field-label-long">Bonus</label>
|
||||
<input type="text" class="item-field-label-long" name="system.bonus" value="{{system.bonus}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Used ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.used" {{checked system.used}}/></label>
|
||||
</li>
|
||||
|
||||
|
@ -19,84 +19,122 @@
|
||||
<div class="tab" data-group="primary">
|
||||
<ul>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Weapon Type</label>
|
||||
<select class="competence-base flexrow" type="text" name="system.weapontype" value="{{system.weapontype}}" data-dtype="String">
|
||||
<li class="flexrow"><label class="item-field-label-long">Weapon Type</label>
|
||||
<select class="item-field-label-vlong" type="text" name="system.weapontype" value="{{system.weapontype}}" data-dtype="String">
|
||||
{{#select system.weapontype}}
|
||||
{{#each config.weapontypes as |type key|}}
|
||||
<option value="{{key.name}}">{{type}}</option>
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Associated skill</label>
|
||||
<select class="competence-base flexrow" type="text" name="system.skill" value="{{system.skill}}" data-dtype="String">
|
||||
<li class="flexrow"><label class="item-field-label-long">Associated skill</label>
|
||||
<select class="item-field-label-vlong" type="text" name="system.skill" value="{{system.skill}}" data-dtype="String">
|
||||
{{#select system.skill}}
|
||||
{{#each weaponSkills as |skill idx|}}
|
||||
{{#each skills as |skill idx|}}
|
||||
<option value="{{skill.name}}">{{skill.name}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
<li class="flexrow"><label class="generic-label">Penetration</label>
|
||||
<input type="text" class="right" name="system.penetration" value="{{system.penetration}}" data-dtype="String"/>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Penetration min.</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.penetrationmin" value="{{system.penetrationmin}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Damage</label>
|
||||
<input type="text" class="right" name="system.damage" value="{{system.damage}}" data-dtype="String"/>
|
||||
<li class="flexrow"><label class="item-field-label-long">Penetration max.</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.penetrationmax" value="{{system.penetrationmax}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Bulk</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{data.bulk}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">HP damage ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.hashpdamage" {{checked system.hashpdamage}}/></label>
|
||||
</li>
|
||||
{{#if system.hashpdamage}}
|
||||
<li class="flexrow"><label class="item-field-label-vlong">HP Damage formula</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.damage" value="{{system.damage}}" data-dtype="String"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Fatigue damage ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.hasfatiguedamage" {{checked system.hasfatiguedamage}}/></label>
|
||||
</li>
|
||||
{{#if system.hasfatiguedamage}}
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Fatigue damage formula</label>
|
||||
<input type="text" class="right item-field-label-long" name="system.fatiguedamage" value="{{system.fatiguedamage}}" data-dtype="String"/>
|
||||
</li>
|
||||
{{/if}}
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-long">Bulk</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.bulk" value="{{system.bulk}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">BR</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.br" value="{{data.br}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-long">BR</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.br" value="{{system.br}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">RoF</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.rof" value="{{data.rof}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-long">RoF</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.rof" value="{{system.rof}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Ammo</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.ammo" value="{{data.ammo}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-long">Ammo</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.ammo" value="{{system.ammo}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Effective Range</label>
|
||||
<select class="competence-base flexrow" type="text" name="system.effectiverange" value="{{system.effectiverange}}" data-dtype="Number">
|
||||
<li class="flexrow"><label class="item-field-label-long">Effective Range</label>
|
||||
<select class="item-field-label-long" type="text" name="system.effectiverange" value="{{system.effectiverange}}" data-dtype="Number">
|
||||
{{#select system.effectiverange}}
|
||||
{{#each config.range as |type key|}}
|
||||
<option value="{{key.name}}">{{type}}</option>
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Maximum Range</label>
|
||||
<select class="competence-base flexrow" type="text" name="system.maxrange" value="{{system.maxrange}}" data-dtype="Number">
|
||||
<li class="flexrow"><label class="item-field-label-long">Maximum Range</label>
|
||||
<select class="item-field-label-long" type="text" name="system.maxrange" value="{{system.maxrange}}" data-dtype="Number">
|
||||
{{#select system.maxrange}}
|
||||
{{#each config.range as |type key|}}
|
||||
<option value="{{key.name}}">{{type}}</option>
|
||||
<option value="{{key}}">{{type}}</option>
|
||||
{{/each}}
|
||||
{{/select}}
|
||||
</select>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">SP</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.sp" value="{{data.sp}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-long">SP</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.sp" value="{{system.sp}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Size (-1 for non applicable)</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.size" value="{{data.size}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Size </label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.size" value="{{system.size}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked data.equipped}}/></label>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Ammo type </label>
|
||||
<input type="text" class="item-field-label-long padd-right" name="system.ammotype" value="{{system.ammotype}}" data-dtype="String"/>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="generic-label">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{data.cost}}" data-dtype="Number"/>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Incendiary ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.incendiary" {{checked system.incendiary}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Armour destruction ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.armourdestruction" {{checked system.armourdestruction}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Disable system ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.disablesystems" {{checked system.disablesystems}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Special effect ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.specialffect" {{checked system.specialffect}}/></label>
|
||||
</li>
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Guided weapon ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.guidedweapon" {{checked system.guidedweapon}}/></label>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Equipped ?</label>
|
||||
<label class="attribute-value checkbox"><input type="checkbox" name="system.equipped" {{checked system.equipped}}/></label>
|
||||
</li>
|
||||
|
||||
<li class="flexrow"><label class="item-field-label-vlong">Cost</label>
|
||||
<input type="text" class="input-numeric-short padd-right" name="system.cost" value="{{system.cost}}" data-dtype="Number"/>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
Reference in New Issue
Block a user