Compare commits
16 Commits
fvtt-hero-
...
fvtt-hero-
Author | SHA1 | Date | |
---|---|---|---|
58bcfc07a3 | |||
3dcb60e7a9 | |||
6c4812c7e4 | |||
099bb0d88c | |||
9a30275640 | |||
b798cde48d | |||
a943e6defa | |||
9099e812d5 | |||
6d6b7075df | |||
3762e6185b | |||
1e74d6f306 | |||
8f10b9825e | |||
297c94adb7 | |||
b535a86116 | |||
270c7c4a91 | |||
0b0b74754f |
18
README.md
18
README.md
@ -1,2 +1,18 @@
|
|||||||
# fvtt-dark-stars
|
This is the official Hero System 6th Edition game system for FoundryVTT, based on the TTRPG from Hero Games and developed by Legendsmiths, LLC. For more information about Legendsmiths and their work, visit https://legendsmiths.com/.
|
||||||
|
|
||||||
|
The Hero System game system is not usable standalone. To play this game you need a copy of the core rulebook.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
Manifest URL: https://github.com/Legendsmiths-LLC/
|
||||||
|
|
||||||
|
For manual installation, use the provided manifest URL in the "Install System" popup window while managing game systems.
|
||||||
|
|
||||||
|
Copyright (c) 2023 Legendsmiths, LLC
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
All content for the HERO System™® is DOJ, Inc.’s trademark for its roleplaying system. HERO System Copyright ©1984, 1989, 2002, 2009 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Fantasy Hero ©2003, 2010 by DOJ, Inc. d/b/a Hero Games. All rights reserved. Star Hero ©2003, 2011 by DOJ, Inc. d/b/a Hero Games. All rights reserved. All DOJ trademarks and copyrights used with permission and under license with Legendsmiths , LLC. For further information about Hero Games and the HERO System, visit www.herogames.com. All HERO System™® content is not be included to copy, modify, merge, publish, distribute, sublicense, and/or sell with copies of the Software with the exception of the current licensee Legendsmiths, LLC.
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
BIN
images/ui/hero_foundry_cover.webp
Normal file
BIN
images/ui/hero_foundry_cover.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 202 KiB |
@ -14,5 +14,11 @@
|
|||||||
"TypeEquipment": "Equipment",
|
"TypeEquipment": "Equipment",
|
||||||
"TypeCurrency": "Currency",
|
"TypeCurrency": "Currency",
|
||||||
"TypeManeuver": "Maneuver"
|
"TypeManeuver": "Maneuver"
|
||||||
|
},
|
||||||
|
"COMBAT": {
|
||||||
|
"TurnPrev": "Previous initiative",
|
||||||
|
"RoundPrev": "Previous segment",
|
||||||
|
"TurnNext": "Next initiative",
|
||||||
|
"RoundNext": "Next segment"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -53,6 +53,8 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
subActors: duplicate(this.actor.getSubActors()),
|
subActors: duplicate(this.actor.getSubActors()),
|
||||||
race: duplicate(this.actor.getRace()),
|
race: duplicate(this.actor.getRace()),
|
||||||
encCapacity: this.actor.getEncumbranceCapacity(),
|
encCapacity: this.actor.getEncumbranceCapacity(),
|
||||||
|
isHold: this.actor.getHoldAction(),
|
||||||
|
isAbort: this.actor.getAbortAction(),
|
||||||
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
description: await TextEditor.enrichHTML(this.object.system.biodata.description, {async: true}),
|
||||||
motivation: await TextEditor.enrichHTML(this.object.system.biodata.motivation, {async: true}),
|
motivation: await TextEditor.enrichHTML(this.object.system.biodata.motivation, {async: true}),
|
||||||
quote: await TextEditor.enrichHTML(this.object.system.biodata.quote, {async: true}),
|
quote: await TextEditor.enrichHTML(this.object.system.biodata.quote, {async: true}),
|
||||||
@ -66,6 +68,7 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
notes5: await TextEditor.enrichHTML(this.object.system.biodata.notes5, {async: true}),
|
notes5: await TextEditor.enrichHTML(this.object.system.biodata.notes5, {async: true}),
|
||||||
containersTree: this.actor.containersTree,
|
containersTree: this.actor.containersTree,
|
||||||
encCurrent: this.actor.encCurrent,
|
encCurrent: this.actor.encCurrent,
|
||||||
|
totalValue: this.actor.totalValue,
|
||||||
options: this.options,
|
options: this.options,
|
||||||
owner: this.document.isOwner,
|
owner: this.document.isOwner,
|
||||||
editScore: this.options.editScore,
|
editScore: this.options.editScore,
|
||||||
@ -152,6 +155,10 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
const characKey = $(event.currentTarget).data("charac-key");
|
const characKey = $(event.currentTarget).data("charac-key");
|
||||||
this.actor.rollCharac(characKey);
|
this.actor.rollCharac(characKey);
|
||||||
});
|
});
|
||||||
|
html.find('.roll-perception').click((event) => {
|
||||||
|
this.actor.rollPerception("int");
|
||||||
|
});
|
||||||
|
|
||||||
html.find('.roll-direct').click((event) => {
|
html.find('.roll-direct').click((event) => {
|
||||||
const rollFormula = $(event.currentTarget).data("roll-formula")
|
const rollFormula = $(event.currentTarget).data("roll-formula")
|
||||||
const rollSource = $(event.currentTarget).data("roll-source")
|
const rollSource = $(event.currentTarget).data("roll-source")
|
||||||
@ -172,14 +179,25 @@ export class Hero6ActorSheet extends ActorSheet {
|
|||||||
const li = $(event.currentTarget).parents(".item");
|
const li = $(event.currentTarget).parents(".item");
|
||||||
let itemId = li.data("item-id")
|
let itemId = li.data("item-id")
|
||||||
this.actor.rollLiftDice(itemId);
|
this.actor.rollLiftDice(itemId);
|
||||||
});
|
});
|
||||||
|
|
||||||
html.find('.roll-weapon').click((event) => {
|
html.find('.roll-weapon').click((event) => {
|
||||||
const li = $(event.currentTarget).parents(".item");
|
const li = $(event.currentTarget).parents(".item");
|
||||||
const skillId = li.data("item-id")
|
const skillId = li.data("item-id")
|
||||||
this.actor.rollWeapon(skillId)
|
this.actor.rollWeapon(skillId)
|
||||||
});
|
});
|
||||||
|
html.find('.roll-maneuver').click((event) => {
|
||||||
|
const li = $(event.currentTarget).parents(".item");
|
||||||
|
const maneuverId = li.data("maneuver-id")
|
||||||
|
this.actor.rollManeuver(maneuverId)
|
||||||
|
});
|
||||||
|
|
||||||
|
html.find('.hold-action').click((event) => {
|
||||||
|
this.actor.holdAction()
|
||||||
|
});
|
||||||
|
html.find('.abort-action').click((event) => {
|
||||||
|
this.actor.abortAction()
|
||||||
|
});
|
||||||
|
|
||||||
html.find('.lock-unlock-sheet').click((event) => {
|
html.find('.lock-unlock-sheet').click((event) => {
|
||||||
this.options.editScore = !this.options.editScore;
|
this.options.editScore = !this.options.editScore;
|
||||||
this.render(true);
|
this.render(true);
|
||||||
|
@ -4,7 +4,7 @@ import { Hero6RollDialog } from "./hero6-roll-dialog.js";
|
|||||||
import { Hero6LiftDice } from "./hero6-lift-dice.js";
|
import { Hero6LiftDice } from "./hero6-lift-dice.js";
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
const __speed2Segments = [[0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12]
|
const __speed2Segments = [ [0], [7], [6, 12], [4, 8, 12], [3, 6, 9, 12], [3, 5, 8, 10, 12], [2, 4, 6, 8, 10, 12],
|
||||||
[2, 4, 6, 7, 9, 11, 12], [2, 3, 5, 6, 8, 9, 11, 12], [2, 3, 4, 6, 7, 8, 10, 11, 12], [2, 3, 4, 5, 6, 8, 9, 10, 11, 12],
|
[2, 4, 6, 7, 9, 11, 12], [2, 3, 5, 6, 8, 9, 11, 12], [2, 3, 4, 6, 7, 8, 10, 11, 12], [2, 3, 4, 5, 6, 8, 9, 10, 11, 12],
|
||||||
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
|
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]]
|
||||||
|
|
||||||
@ -41,8 +41,9 @@ export class Hero6Actor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data.type == 'character') {
|
if (data.type == 'character') {
|
||||||
//const skills = await Hero6Utility.loadCompendium("fvtt-hero-system-6.skills");
|
const maneuvers = await Hero6Utility.loadCompendium("fvtt-hero-system-6.maneuvers")
|
||||||
//data.items = skills.map(i => i.toObject())
|
let maneuversObj = maneuvers.map(i => i.toObject())
|
||||||
|
data.items = maneuversObj.filter(m => m.system.isstock)
|
||||||
}
|
}
|
||||||
if (data.type == 'npc') {
|
if (data.type == 'npc') {
|
||||||
}
|
}
|
||||||
@ -60,10 +61,23 @@ export class Hero6Actor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
computeHitPoints() {
|
computeDerivatedData() {
|
||||||
if (this.type == "character") {
|
if (this.type == "character") {
|
||||||
|
let newSTREND = this.computeSTREND()
|
||||||
|
if (newSTREND != this.system.characteristics.str.strend) {
|
||||||
|
this.update({ 'system.characteristics.str.strend': newSTREND })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
performMigration() {
|
||||||
|
// Fix OCV/OMCV rollable
|
||||||
|
if (!this.system.characteristics.ocv.hasroll) {
|
||||||
|
this.update({ 'system.characteristics.ocv.hasroll': true, 'system.characteristics.omcv.hasroll': true })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
computeDicesValue() {
|
computeDicesValue() {
|
||||||
this.system.biodata.presenceattack = Hero6Utility.getDerivatedDiceFormulas(this.system.characteristics.pre.value)
|
this.system.biodata.presenceattack = Hero6Utility.getDerivatedDiceFormulas(this.system.characteristics.pre.value)
|
||||||
this.system.characteristics.str.strdice = Hero6LiftDice.getLiftDice(this.system.characteristics.str.value)
|
this.system.characteristics.str.strdice = Hero6LiftDice.getLiftDice(this.system.characteristics.str.value)
|
||||||
@ -75,7 +89,7 @@ export class Hero6Actor extends Actor {
|
|||||||
if (this.type == 'character' || game.user.isGM) {
|
if (this.type == 'character' || game.user.isGM) {
|
||||||
this.system.encCapacity = this.getEncumbranceCapacity()
|
this.system.encCapacity = this.getEncumbranceCapacity()
|
||||||
this.buildContainerTree()
|
this.buildContainerTree()
|
||||||
this.computeHitPoints()
|
this.computeDerivatedData()
|
||||||
this.computeDicesValue()
|
this.computeDicesValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +104,10 @@ export class Hero6Actor extends Actor {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getEncumbranceCapacity() {
|
getEncumbranceCapacity() {
|
||||||
return 1;
|
let numLift = this.system.characteristics.str.lift.match(/\d*\s/g)
|
||||||
|
if (numLift && numLift[0] && Number(numLift[0])) {
|
||||||
|
return numLift[0] / 2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -147,18 +164,6 @@ export class Hero6Actor extends Actor {
|
|||||||
return listItem
|
return listItem
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
getConditions() {
|
|
||||||
let comp = duplicate(this.items.filter(item => item.type == 'condition') || []);
|
|
||||||
Hero6Utility.sortArrayObjectsByName(comp)
|
|
||||||
return comp;
|
|
||||||
}
|
|
||||||
/* -------------------------------------------- */
|
|
||||||
getWeapons() {
|
|
||||||
let comp = duplicate(this.items.filter(item => item.type == 'weapon') || []);
|
|
||||||
Hero6Utility.sortArrayObjectsByName(comp)
|
|
||||||
return comp;
|
|
||||||
}
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getItemById(id) {
|
getItemById(id) {
|
||||||
let item = this.items.find(item => item.id == id);
|
let item = this.items.find(item => item.id == id);
|
||||||
@ -208,6 +213,17 @@ export class Hero6Actor extends Actor {
|
|||||||
skill.roll += skill.system.levels
|
skill.roll += skill.system.levels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
prepareManeuver(maneuver) {
|
||||||
|
|
||||||
|
maneuver.roll = 11 + this.system.characteristics.ocv.value
|
||||||
|
if ( Number(maneuver.system.ocv)) {
|
||||||
|
maneuver.roll += Number(maneuver.system.ocv)
|
||||||
|
} else {
|
||||||
|
maneuver.noOCV = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getSkills() {
|
getSkills() {
|
||||||
@ -324,46 +340,21 @@ export class Hero6Actor extends Actor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------- */
|
/* ------------------------------------------- */
|
||||||
async buildContainerTree() {
|
buildContainerTree() {
|
||||||
let equipments = duplicate(this.items.filter(item => item.type == "equipment") || [])
|
let equipments = duplicate(this.items.filter(item => item.type == "equipment") || []);
|
||||||
for (let equip1 of equipments) {
|
|
||||||
if (equip1.system.iscontainer) {
|
|
||||||
equip1.system.contents = []
|
|
||||||
equip1.system.contentsEnc = 0
|
|
||||||
for (let equip2 of equipments) {
|
|
||||||
if (equip1._id != equip2.id && equip2.system.containerid == equip1.id) {
|
|
||||||
equip1.system.contents.push(equip2)
|
|
||||||
let q = equip2.system.quantity ?? 1
|
|
||||||
equip1.system.contentsEnc += q * equip2.system.weight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute whole enc
|
|
||||||
let enc = 0
|
let enc = 0
|
||||||
for (let item of equipments) {
|
let value = 0
|
||||||
//item.data.idrDice = Hero6Utility.getDiceFromLevel(Number(item.data.idr))
|
for (let equip1 of equipments) {
|
||||||
if (item.system.equipped) {
|
if (Number(equip1.system.weight) && Number(equip1.system.quantity)) {
|
||||||
if (item.system.iscontainer) {
|
enc += equip1.system.weight * equip1.system.quantity
|
||||||
enc += item.system.contentsEnc
|
}
|
||||||
} else if (item.system.containerid == "") {
|
if (Number(equip1.system.value) && Number(equip1.system.quantity)) {
|
||||||
let q = item.system.quantity ?? 1
|
value += equip1.system.value * equip1.system.quantity
|
||||||
enc += q * item.system.weight
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (let item of this.items) { // Process items/shields/armors
|
|
||||||
if ((item.type == "weapon" || item.type == "shield" || item.type == "armor") && item.system.equipped) {
|
|
||||||
let q = item.system.quantity ?? 1
|
|
||||||
enc += q * item.system.weight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store local values
|
// Store local values
|
||||||
this.encCurrent = enc
|
this.encCurrent = enc
|
||||||
this.containersTree = equipments.filter(item => item.system.containerid == "") // Returns the root of equipements without container
|
this.totalValue = value
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -392,7 +383,7 @@ export class Hero6Actor extends Actor {
|
|||||||
} else {
|
} else {
|
||||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': containerId }])
|
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)
|
console.log("Removeing: ", object)
|
||||||
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]);
|
await this.updateEmbeddedDocuments("Item", [{ _id: object.id, 'system.containerid': "" }]);
|
||||||
}
|
}
|
||||||
@ -409,28 +400,93 @@ export class Hero6Actor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async equipGear(equipmentId) {
|
async equipGear(equipmentId) {
|
||||||
let item = this.items.find(item => item.id == 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 };
|
let update = { _id: item.id, "system.equipped": !item.system.equipped };
|
||||||
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
async cleanCombat() {
|
||||||
|
await this.setFlag("world", "hold-action", false)
|
||||||
|
await this.setFlag("world", "abort-action", { state: false, count: 0 } )
|
||||||
|
}
|
||||||
|
async holdAction() {
|
||||||
|
await this.disableAbortAction()
|
||||||
|
if (this.getFlag("world", "hold-action")) {
|
||||||
|
await this.setFlag("world", "hold-action", false)
|
||||||
|
//game.combat.holdAction(this.id, false)
|
||||||
|
game.combat.forceHold(this, false)
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
await this.setFlag("world", "hold-action", true)
|
||||||
|
//game.combat.holdAction(this.id, false)
|
||||||
|
game.combat.forceHold(this, true)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async disableHoldAction() {
|
||||||
|
await this.setFlag("world", "hold-action", false)
|
||||||
|
}
|
||||||
|
async disableAbortAction() {
|
||||||
|
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||||
|
}
|
||||||
|
async abortAction() {
|
||||||
|
await this.disableHoldAction()
|
||||||
|
let abort = this.getFlag("world", "abort-action")
|
||||||
|
if (abort.state) {
|
||||||
|
await this.setFlag("world", "abort-action", { state: false, count: 0 })
|
||||||
|
game.combat.forceAbort(this, false)
|
||||||
|
//game.combat.abortAction(this.id, false)
|
||||||
|
} else {
|
||||||
|
await this.setFlag("world", "abort-action", { state: true, count: 0 })
|
||||||
|
game.combat.forceAbort(this, true)
|
||||||
|
//game.combat.abortAction(this.id, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async incAbortActionCount() {
|
||||||
|
let abort = this.getFlag("world", "abort-action")
|
||||||
|
if (abort.state) {
|
||||||
|
abort.count++
|
||||||
|
await this.setFlag("world", "abort-action", abort)
|
||||||
|
if (abort.count == 2) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
getHoldAction() {
|
||||||
|
return this.getFlag("world", "hold-action")
|
||||||
|
}
|
||||||
|
getAbortAction() {
|
||||||
|
let abort = this.getFlag("world", "abort-action")
|
||||||
|
return abort?.state || false
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
hasPhase(segmentNumber) {
|
hasPhase(segmentNumber) {
|
||||||
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||||
let phases = __speed2Segments[index]
|
let phases = __speed2Segments[index]
|
||||||
|
console.log("index", segmentNumber, index, phases, phases.includes(segmentNumber), __speed2Segments)
|
||||||
return phases.includes(segmentNumber)
|
return phases.includes(segmentNumber)
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getSegments() {
|
getSegments() {
|
||||||
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||||
|
//console.log("INDEX", index, __speed2Segments[index])
|
||||||
return __speed2Segments[index]
|
return __speed2Segments[index]
|
||||||
}
|
}
|
||||||
|
getPhasesString() {
|
||||||
|
let index = Math.min(Math.max(this.system.characteristics.spd.value, 1), 12) // Security bounds
|
||||||
|
return __speed2Segments[index].toString()
|
||||||
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
getBaseInit() {
|
getBaseInit(turn) {
|
||||||
let r = new Roll("1d6").roll({ async: false })
|
if ( turn != this.turn) {
|
||||||
let base = this.system.characteristics.dex.value + (r.total / 10)
|
let r = new Roll("1d6").roll({ async: false })
|
||||||
return base
|
this.currentInit = Number(this.system.characteristics.dex.initiative) + Number(((r.total / 10).toFixed(2)))
|
||||||
|
this.turn = turn
|
||||||
|
}
|
||||||
|
return this.currentInit
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -461,7 +517,7 @@ export class Hero6Actor extends Actor {
|
|||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
prepareCharacValues(charac) {
|
prepareCharacValues(charac) {
|
||||||
charac.total = charac.value
|
charac.total = charac.value
|
||||||
charac.roll = 9 + Math.floor((charac.value) / 5)
|
charac.roll = 9 + Math.round((charac.value) / 5)
|
||||||
}
|
}
|
||||||
prepareCharac() {
|
prepareCharac() {
|
||||||
let characs = duplicate(this.system.characteristics)
|
let characs = duplicate(this.system.characteristics)
|
||||||
@ -472,6 +528,12 @@ export class Hero6Actor extends Actor {
|
|||||||
ch.lift = Hero6LiftDice.getLift(ch.value)
|
ch.lift = Hero6LiftDice.getLift(ch.value)
|
||||||
ch.liftDice = Hero6LiftDice.getLiftDice(ch.value)
|
ch.liftDice = Hero6LiftDice.getLiftDice(ch.value)
|
||||||
}
|
}
|
||||||
|
if (key == "spd") {
|
||||||
|
ch.phasesString = this.getPhasesString()
|
||||||
|
}
|
||||||
|
if (key =="pre") {
|
||||||
|
ch.presenceattack = duplicate(this.system.biodata.presenceattack)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return characs
|
return characs
|
||||||
}
|
}
|
||||||
@ -485,6 +547,22 @@ export class Hero6Actor extends Actor {
|
|||||||
return skill;
|
return skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
computeSTREND() {
|
||||||
|
let newSTREND = 0
|
||||||
|
switch (this.system.characteristics.str.strendmode) {
|
||||||
|
case "str20":
|
||||||
|
newSTREND = Math.floor(this.system.characteristics.str.value / 20)
|
||||||
|
break;
|
||||||
|
case "str10":
|
||||||
|
newSTREND = Math.floor(this.system.characteristics.str.value / 10)
|
||||||
|
break;
|
||||||
|
case "str5":
|
||||||
|
newSTREND = Math.floor(this.system.characteristics.str.value / 5)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return newSTREND
|
||||||
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async deleteAllItemsByType(itemType) {
|
async deleteAllItemsByType(itemType) {
|
||||||
let items = this.items.filter(item => item.type == itemType);
|
let items = this.items.filter(item => item.type == itemType);
|
||||||
@ -557,6 +635,18 @@ export class Hero6Actor extends Actor {
|
|||||||
|
|
||||||
return rollData
|
return rollData
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
rollPerception() {
|
||||||
|
let rollData = this.getCommonRollData("int")
|
||||||
|
rollData.isPerception = true
|
||||||
|
rollData.charac.roll = Number(rollData.charac.perceptionroll)
|
||||||
|
rollData.mode = "perception"
|
||||||
|
if (rollData.target) {
|
||||||
|
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.startRoll(rollData)
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
rollCharac(chKey) {
|
rollCharac(chKey) {
|
||||||
@ -577,6 +667,9 @@ export class Hero6Actor extends Actor {
|
|||||||
if (item.type == "skill") {
|
if (item.type == "skill") {
|
||||||
this.prepareSkill(rollData.item)
|
this.prepareSkill(rollData.item)
|
||||||
}
|
}
|
||||||
|
if (item.type == "maneuver") {
|
||||||
|
this.prepareManeuver(rollData.item)
|
||||||
|
}
|
||||||
this.startRoll(rollData)
|
this.startRoll(rollData)
|
||||||
}
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -585,17 +678,22 @@ export class Hero6Actor extends Actor {
|
|||||||
let rollData = this.getCommonRollData()
|
let rollData = this.getCommonRollData()
|
||||||
rollData.mode = "damage"
|
rollData.mode = "damage"
|
||||||
rollData.item = duplicate(item)
|
rollData.item = duplicate(item)
|
||||||
|
rollData.title = item.name
|
||||||
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage)
|
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(item.system.damage)
|
||||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||||
|
|
||||||
rollData.roll = myRoll
|
rollData.roll = myRoll
|
||||||
rollData.result = myRoll.total
|
rollData.result = myRoll.total
|
||||||
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
||||||
|
|
||||||
let msg = await Hero6Utility.createChatWithRollMode(rollData.alias, {
|
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-damage-result.hbs`, rollData)
|
||||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-damage-result.hbs`, rollData)
|
let msg = await rollData.roll.toMessage({
|
||||||
|
user: game.user.id,
|
||||||
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
|
flavor: msgFlavor
|
||||||
})
|
})
|
||||||
|
rollData.roll = duplicate(rollData.roll) // Convert to object
|
||||||
msg.setFlag("world", "rolldata", rollData)
|
msg.setFlag("world", "rolldata", rollData)
|
||||||
console.log("Rolldata result", rollData)
|
console.log("Rolldata result", rollData)
|
||||||
}
|
}
|
||||||
@ -604,20 +702,45 @@ export class Hero6Actor extends Actor {
|
|||||||
async rollLiftDice() {
|
async rollLiftDice() {
|
||||||
let rollData = this.getCommonRollData()
|
let rollData = this.getCommonRollData()
|
||||||
rollData.mode = "lift-dice"
|
rollData.mode = "lift-dice"
|
||||||
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax( Hero6LiftDice.getLiftDice(this.system.characteristics.str.value))
|
rollData.diceFormula = Hero6Utility.convertRollHeroSyntax(Hero6LiftDice.getLiftDice(this.system.characteristics.str.value))
|
||||||
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
let myRoll = new Roll(rollData.diceFormula).roll({ async: false })
|
||||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||||
|
|
||||||
rollData.roll = myRoll
|
|
||||||
rollData.result = myRoll.total
|
|
||||||
|
|
||||||
let msg = await Hero6Utility.createChatWithRollMode(rollData.alias, {
|
rollData.bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
||||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-lift-dice-result.hbs`, rollData)
|
rollData.result = myRoll.total
|
||||||
|
rollData.roll = duplicate(myRoll)
|
||||||
|
|
||||||
|
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-lift-dice-result.hbs`, rollData)
|
||||||
|
let msg = await myRoll.toMessage({
|
||||||
|
user: game.user.id,
|
||||||
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
|
flavor: msgFlavor
|
||||||
})
|
})
|
||||||
msg.setFlag("world", "rolldata", rollData)
|
msg.setFlag("world", "rolldata", rollData)
|
||||||
console.log("Rolldata result", rollData)
|
console.log("Rolldata result", rollData)
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
rollManeuver(maneuverId) {
|
||||||
|
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)
|
||||||
|
Hero6Utility.updateSkill(skill)
|
||||||
|
let abilityKey = skill.system.ability
|
||||||
|
let rollData = this.getCommonRollData(abilityKey)
|
||||||
|
rollData.mode = "skill"
|
||||||
|
rollData.skill = skill
|
||||||
|
rollData.img = skill.img
|
||||||
|
if (rollData.target) {
|
||||||
|
ui.notifications.warn("You are targetting a token with a skill : please use a Weapon instead.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.startRoll(rollData)
|
||||||
|
}
|
||||||
|
}
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
rollSkill(skillId) {
|
rollSkill(skillId) {
|
||||||
let skill = this.items.get(skillId)
|
let skill = this.items.get(skillId)
|
||||||
|
@ -5,7 +5,7 @@ export class Hero6CombatTracker extends CombatTracker {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static get defaultOptions() {
|
static get defaultOptions() {
|
||||||
var path = "systems/fvtt-hero-system-6/templates/apps/combat-tracker.hbs";
|
let path = "systems/fvtt-hero-system-6/templates/apps/combat-tracker.hbs";
|
||||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||||
template: path,
|
template: path,
|
||||||
});
|
});
|
||||||
@ -16,129 +16,229 @@ export class Hero6CombatTracker extends CombatTracker {
|
|||||||
export class Hero6Combat extends Combat {
|
export class Hero6Combat extends Combat {
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static init() {
|
static ready() {
|
||||||
Hooks.on("getCombatTrackerEntryContext", (html, options) => { Hero6Combat.pushMenuOptions(html, options); });
|
Hooks.on("getCombatTrackerEntryContext", (html, options) => { Hero6Combat.pushMenuOptions(html, options); });
|
||||||
|
game.combat.settings.resource = "characteristics.spd.value";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static pushMenuOptions(html, options) {
|
static pushMenuOptions(html, options) {
|
||||||
let newOpt
|
let newOpt
|
||||||
for (let i = 0; i < options.length; i++) {
|
for (let i = 0; i < options.length; i++) {
|
||||||
let option = options[i];
|
let option = options[i];
|
||||||
if (option.name == 'COMBAT.CombatantReroll') { // Replace !
|
if (option.name == 'COMBAT.CombatantReroll') { // Replace !
|
||||||
option.name = "Hold action";
|
option.name = "Hold/Unhold action";
|
||||||
option.condition = true;
|
option.condition = true;
|
||||||
option.icon = '<i class="far fa-question-circle"></i>';
|
option.icon = '<i class="far fa-question-circle"></i>';
|
||||||
option.callback = target => {
|
option.callback = target => {
|
||||||
Hero6Combat.holdAction(target.data('combatant-id'));
|
let id = target.data('combatant-id')
|
||||||
|
let c = game.combat.combatants.get(id)
|
||||||
|
c.actor.holdAction()
|
||||||
}
|
}
|
||||||
newOpt = duplicate(option)
|
//newOpt = duplicate(option)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newOpt.name = "Abort action"
|
//options.push(newOpt)
|
||||||
newOpt.callback = target => {
|
|
||||||
Hero6Combat.abortAction(target.data('combatant-id'));
|
|
||||||
}
|
|
||||||
options.push( newOpt)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static holdAction(combatantId) {
|
holdAction(combatantId) {
|
||||||
console.log("Combatant HOLD : ", combatantId)
|
this.rebuildInitiative()
|
||||||
const combatant = game.combat.combatants.get(combatantId)
|
//console.log("Rebuilding.....")
|
||||||
combatant.setFlag("world", "hero6-hold-action", true)
|
|
||||||
combatant.update({name: combatant.name + " (H)"})
|
|
||||||
console.log("HOLD", combatant)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static abortAction(html, combatantId) {
|
abortAction(actorId, abortState) {
|
||||||
console.log("Combatant ABORT : ", combatantId);
|
this.rebuildInitiative()
|
||||||
const combatant = game.combat.combatants.get(combatantId);
|
|
||||||
combatant.setFlag("world", "hero6-abort-action", true)
|
|
||||||
combatant.update({name: combatant.name + " (A)"})
|
|
||||||
console.log("ABORT", combatant)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
constructor(data, context) {
|
constructor(data, context) {
|
||||||
super(data, context);
|
super(data, context);
|
||||||
|
|
||||||
this.turnNumber = 1;
|
this.turnNumber = 0;
|
||||||
this.segmentNumber = 12;
|
this.segmentNumber = 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async computeInitiative(c) {
|
async startCombat() {
|
||||||
let id = c._id || c.id
|
game.combat.settings.resource = "characteristics.spd.value";
|
||||||
if (c.actor.hasPhase(this.segmentNumber)) {
|
|
||||||
let baseInit = c.actor ? c.actor.getBaseInit() : - 1;
|
let updList = []
|
||||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: baseInit }]);
|
for (let c of this.combatants) {
|
||||||
} else {
|
this.computeInitiative(c, updList)
|
||||||
await this.updateEmbeddedDocuments("Combatant", [{ _id: id, initiative: -1, visible: false, active: false }]);
|
await c.actor.cleanCombat()
|
||||||
}
|
}
|
||||||
console.log("Combatant", c)
|
if (updList.length > 0) {
|
||||||
|
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.startCombat();
|
||||||
}
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
forceHold(actor, isHold) {
|
||||||
|
if (game.user.isGM) {
|
||||||
|
let updList = []
|
||||||
|
let c = this.combatants.find(c => c.actor._id == actor.id)
|
||||||
|
let name = actor.name + ((isHold) ? " (H)" : "")
|
||||||
|
console.log("ForceHold!!", c, actor)
|
||||||
|
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
|
||||||
|
this.updateEmbeddedDocuments("Combatant", updList)
|
||||||
|
} else {
|
||||||
|
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_hold", data: { actorId: actor.id, isHold: isHold } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
forceAbort(actor, isAbort) {
|
||||||
|
if (game.user.isGM) {
|
||||||
|
let updList = []
|
||||||
|
let c = this.combatants.find(c => c.actor._id == actor.id)
|
||||||
|
let name = actor.name + ((isAbort) ? " (A)" : "")
|
||||||
|
updList.push({ _id: c.id || c._id, name: name, initiative: actor.getBaseInit(this.segmentNumber) })
|
||||||
|
this.updateEmbeddedDocuments("Combatant", updList)
|
||||||
|
} else {
|
||||||
|
game.socket.emit("system.fvtt-hero-system-6", { name: "msg_force_abort", data: { actorId: actor.id, isAbort: isAbort } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
computeInitiative(c, updList) {
|
||||||
|
let id = c._id || c.id
|
||||||
|
let hasSegment = c.actor.hasPhase(this.segmentNumber)
|
||||||
|
let isOnHold = c.actor.getHoldAction()
|
||||||
|
let isOnAbort = c.actor.getAbortAction()
|
||||||
|
let name = c.actor.name
|
||||||
|
if (hasSegment || isOnHold || isOnAbort) {
|
||||||
|
let baseInit = c.actor ? c.actor.getBaseInit(this.segmentNumber) : 0;
|
||||||
|
if (isOnHold) {
|
||||||
|
if (hasSegment) { // On hold + current segment -> auto-disable on hold
|
||||||
|
c.actor.disableHoldAction()
|
||||||
|
} else {
|
||||||
|
name = c.actor.name + " (H)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isOnAbort) {
|
||||||
|
name = c.actor.name + " (A)"
|
||||||
|
if (c.actor.incAbortActionCount()) {
|
||||||
|
c.actor.disableAbortAction()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updList.push({ _id: id, name: name, initiative: baseInit, holdAction: c.holdAction })
|
||||||
|
} else {
|
||||||
|
updList.push({ _id: id, name: name, initiative: 0, holdAction: c.holdAction })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
async rollInitiative(ids, formula = undefined, messageOptions = {}) {
|
||||||
ids = typeof ids === "string" ? [ids] : ids;
|
ids = typeof ids === "string" ? [ids] : ids;
|
||||||
|
|
||||||
|
let updList = []
|
||||||
for (let cId = 0; cId < ids.length; cId++) {
|
for (let cId = 0; cId < ids.length; cId++) {
|
||||||
const c = this.combatants.get(ids[cId])
|
const c = this.combatants.get(ids[cId])
|
||||||
await this.computeInitiative(c)
|
this.computeInitiative(c, updList)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (updList.length > 0) {
|
||||||
|
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
nextRound() {
|
async rebuildInitiative() {
|
||||||
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
let updList = []
|
||||||
if (this.settings.skipDefeated && (turn !== null)) {
|
for (let c of this.combatants) {
|
||||||
turn = this.turns.findIndex(t => !t.isDefeated);
|
this.computeInitiative(c, updList)
|
||||||
if (turn === -1) {
|
}
|
||||||
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
if (updList.length > 0) {
|
||||||
turn = 0;
|
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||||
|
//console.log("Rebuild INIT", updList)
|
||||||
|
for (let c of updList) {
|
||||||
|
if (c.initiative != 0) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
return false
|
||||||
advanceTime += CONFIG.time.roundTime;
|
}
|
||||||
let nextRound = this.round + 1;
|
|
||||||
|
|
||||||
let turnData = this.getFlag("world", "hero6-turn-data")
|
/* -------------------------------------------- */
|
||||||
if (!turnData) {
|
nextTurn() {
|
||||||
turnData = { turnNumber: 1, segmentNumber: 12 }
|
let nbC = this.combatants.filter(c => c.initiative > 0).length
|
||||||
this.setFlag("world", "hero6-turn-data", turnData)
|
//console.log("Next turn called....", this.turn, nbC)
|
||||||
|
if (this.turn < nbC - 1) {
|
||||||
|
super.nextTurn()
|
||||||
|
} else {
|
||||||
|
this.nextRound()
|
||||||
}
|
}
|
||||||
turnData = duplicate(turnData)
|
}
|
||||||
turnData.segmentNumber -= 1
|
|
||||||
if (turnData.segmentNumber <= 0) {
|
|
||||||
turnData.segmentNumber = 12
|
|
||||||
turnData.turnNumber++
|
|
||||||
}
|
|
||||||
this.setFlag("world", "hero6-turn-data", turnData)
|
|
||||||
this.turnNumber = turnData.turnNumber;
|
|
||||||
this.segmentNumber = turnData.segmentNumber;
|
|
||||||
|
|
||||||
// Re-compute init of actors
|
/* -------------------------------------------- */
|
||||||
for (let c of this.combatants) {
|
async nextRound() {
|
||||||
this.computeInitiative(c)
|
let hasCombatants = false
|
||||||
|
let nextRound = this.round
|
||||||
|
let advanceTime = 0
|
||||||
|
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
||||||
|
let turnData = this.getFlag("world", "turnData")
|
||||||
|
|
||||||
|
//console.log("Next round called....", nextRound, turnData)
|
||||||
|
while (!hasCombatants) {
|
||||||
|
if (this.settings.skipDefeated && (turn !== null)) {
|
||||||
|
turn = this.turns.findIndex(t => !t.isDefeated);
|
||||||
|
if (turn === -1) {
|
||||||
|
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
||||||
|
turn = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
||||||
|
advanceTime += CONFIG.time.roundTime;
|
||||||
|
nextRound = nextRound + 1;
|
||||||
|
//console.log("Next round called....2", nextRound, turnData)
|
||||||
|
turnData = this.getFlag("world", "turnData")
|
||||||
|
if (!turnData) {
|
||||||
|
turnData = { turnNumber: 0, segmentNumber: 12 }
|
||||||
|
this.setFlag("world", "turnData", turnData)
|
||||||
|
}
|
||||||
|
turnData = duplicate(turnData)
|
||||||
|
turnData.segmentNumber += 1
|
||||||
|
if (turnData.segmentNumber > 12) {
|
||||||
|
turnData.segmentNumber = 1
|
||||||
|
turnData.turnNumber++
|
||||||
|
ChatMessage.create({
|
||||||
|
content: "Complete Post-Segment 12 Recoveries."
|
||||||
|
})
|
||||||
|
}
|
||||||
|
await this.setFlag("world", "turnData", turnData)
|
||||||
|
this.turnNumber = turnData.turnNumber;
|
||||||
|
this.segmentNumber = turnData.segmentNumber;
|
||||||
|
//console.log("Next round called....3", nextRound, turnData)
|
||||||
|
|
||||||
|
// Re-compute init of actors
|
||||||
|
hasCombatants = await this.rebuildInitiative()
|
||||||
|
//console.log("Going round....", nextRound, hasCombatants)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the document, passing data through a hook first
|
// Update the document, passing data through a hook first
|
||||||
const updateData = { round: nextRound, turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber };
|
const updateData = { round: nextRound, turn };
|
||||||
const updateOptions = { advanceTime, direction: 1 };
|
const updateOptions = { advanceTime, direction: 1 };
|
||||||
Hooks.callAll("combatRound", this, updateData, updateOptions);
|
Hooks.callAll("combatRound", this, updateData, updateOptions);
|
||||||
|
console.log(this)
|
||||||
return this.update(updateData, updateOptions);
|
return this.update(updateData, updateOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
async _onCreateEmbeddedDocuments(type, documents, result, options, userId) {
|
async _onCreateEmbeddedDocuments(type, documents, result, options, userId) {
|
||||||
console.log(">>>>", documents)
|
//console.log("Added...")
|
||||||
super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
|
await super._onCreateEmbeddedDocuments(type, documents, result, options, userId)
|
||||||
|
await this.rebuildInitiative()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* --------------------------------------------
|
||||||
_onUpdate(changed, options, userId) {
|
_onUpdate(changed, options, userId) {
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async checkTurnPosition() {
|
static async checkTurnPosition() {
|
||||||
|
@ -123,9 +123,17 @@ export class Hero6Commands {
|
|||||||
let formula = params.join(' ')
|
let formula = params.join(' ')
|
||||||
if (formula) {
|
if (formula) {
|
||||||
let foundryFormula = Hero6Utility.convertRollHeroSyntax(formula)
|
let foundryFormula = Hero6Utility.convertRollHeroSyntax(formula)
|
||||||
|
|
||||||
let myRoll = new Roll(foundryFormula).roll({ async: false })
|
let myRoll = new Roll(foundryFormula).roll({ async: false })
|
||||||
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
await Hero6Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
||||||
myRoll.toMessage()
|
let bodyValue = Hero6Utility.computeBodyValue(myRoll)
|
||||||
|
|
||||||
|
let msgFlavor = await renderTemplate('systems/fvtt-hero-system-6/templates/chat/chat-hr-roll.hbs', {myRoll, bodyValue} )
|
||||||
|
let msg = await myRoll.toMessage({
|
||||||
|
user: game.user.id,
|
||||||
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
|
flavor: msgFlavor
|
||||||
|
})
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
@ -41,10 +41,10 @@ Hooks.once("init", async function () {
|
|||||||
// Set an initiative formula for the system
|
// Set an initiative formula for the system
|
||||||
CONFIG.Combat.initiative = {
|
CONFIG.Combat.initiative = {
|
||||||
formula: "1d6",
|
formula: "1d6",
|
||||||
decimals: 3
|
decimals: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* ------------------------------- ------------- */
|
||||||
game.socket.on("system.fvtt-hero-system-6", data => {
|
game.socket.on("system.fvtt-hero-system-6", data => {
|
||||||
Hero6Utility.onSocketMesssage(data)
|
Hero6Utility.onSocketMesssage(data)
|
||||||
});
|
});
|
||||||
@ -75,7 +75,7 @@ function welcomeMessage() {
|
|||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
whisper: [game.user.id],
|
whisper: [game.user.id],
|
||||||
content: `<div id="welcome-message-dark-stars"><span class="rdd-roll-part">
|
content: `<div id="welcome-message-dark-stars"><span class="rdd-roll-part">
|
||||||
<strong>Welcome to the Hero6 RPG.</strong>
|
<strong>Welcome to Hero System 6E RPG.</strong>
|
||||||
` });
|
` });
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,6 +96,8 @@ Hooks.once("ready", function () {
|
|||||||
welcomeMessage();
|
welcomeMessage();
|
||||||
Hero6Utility.ready()
|
Hero6Utility.ready()
|
||||||
Hero6Commands.ready()
|
Hero6Commands.ready()
|
||||||
|
Hero6Combat.ready()
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
|
@ -53,7 +53,7 @@ export class Hero6RollDialog extends Dialog {
|
|||||||
activateListeners(html) {
|
activateListeners(html) {
|
||||||
super.activateListeners(html);
|
super.activateListeners(html);
|
||||||
|
|
||||||
var dialog = this;
|
let dialog = this;
|
||||||
function onLoad() {
|
function onLoad() {
|
||||||
}
|
}
|
||||||
$(function () { onLoad(); });
|
$(function () { onLoad(); });
|
||||||
|
@ -41,7 +41,7 @@ export class Hero6Utility {
|
|||||||
return list.length > 0;
|
return list.length > 0;
|
||||||
})
|
})
|
||||||
Handlebars.registerHelper('mul', function (a, b) {
|
Handlebars.registerHelper('mul', function (a, b) {
|
||||||
return parseInt(a) * parseInt(b);
|
return Number(a) * Number(b);
|
||||||
})
|
})
|
||||||
Handlebars.registerHelper('locationLabel', function (key) {
|
Handlebars.registerHelper('locationLabel', function (key) {
|
||||||
return __locationNames[key]
|
return __locationNames[key]
|
||||||
@ -52,6 +52,11 @@ export class Hero6Utility {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
})
|
})
|
||||||
|
Handlebars.registerHelper('checkInit', function (value) {
|
||||||
|
let myValue = Number(value) || 0
|
||||||
|
return myValue > 0
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
this.gameSettings()
|
this.gameSettings()
|
||||||
|
|
||||||
@ -119,6 +124,10 @@ export class Hero6Utility {
|
|||||||
const rollTables = await Hero6Utility.loadCompendium("fvtt-hero-system-6.rolltables")
|
const rollTables = await Hero6Utility.loadCompendium("fvtt-hero-system-6.rolltables")
|
||||||
this.rollTables = rollTables.map(i => i.toObject())
|
this.rollTables = rollTables.map(i => i.toObject())
|
||||||
|
|
||||||
|
for (let actor of game.actors) {
|
||||||
|
actor.performMigration()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
@ -225,12 +234,21 @@ export class Hero6Utility {
|
|||||||
|
|
||||||
/* -------------------------------------------- */
|
/* -------------------------------------------- */
|
||||||
static async onSocketMesssage(msg) {
|
static async onSocketMesssage(msg) {
|
||||||
console.log("SOCKET MESSAGE", msg.name)
|
console.log("SOCKET MESSAGE", msg.name, msg)
|
||||||
if (msg.name == "msg_update_roll") {
|
if (msg.name == "msg_update_roll") {
|
||||||
this.updateRollData(msg.data)
|
this.updateRollData(msg.data)
|
||||||
}
|
}
|
||||||
if (msg.name == "msg_gm_process_attack_defense") {
|
if (msg.name == "msg_force_hold") {
|
||||||
this.processSuccessResult(msg.data)
|
if (game.user.isGM) {
|
||||||
|
let actor = game.actors.get(msg.data.actorId)
|
||||||
|
game.combat.forceHold(actor, msg.data.isHold)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (msg.name == "msg_force_abort") {
|
||||||
|
if (game.user.isGM) {
|
||||||
|
let actor = game.actors.get(msg.data.actorId)
|
||||||
|
game.combat.forceAbort(actor, msg.data.isAbort)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (msg.name == "msg_gm_item_drop" && game.user.isGM) {
|
if (msg.name == "msg_gm_item_drop" && game.user.isGM) {
|
||||||
let actor = game.actors.get(msg.data.actorId)
|
let actor = game.actors.get(msg.data.actorId)
|
||||||
@ -367,32 +385,43 @@ export class Hero6Utility {
|
|||||||
rollData.result = roll.total
|
rollData.result = roll.total
|
||||||
rollData.bodyValue = this.computeBodyValue(rollData.roll)
|
rollData.bodyValue = this.computeBodyValue(rollData.roll)
|
||||||
|
|
||||||
this.outputRollMessage(rollData)
|
this.outputRollMessage(rollData).catch(function() { ui.notifications.warn("Error during message output.") })
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------- ----------------------------- */
|
/* -------------- ----------------------------- */
|
||||||
static async outputRollMessage(rollData) {
|
static async outputRollMessage(rollData) {
|
||||||
let msg = await this.createChatWithRollMode(rollData.alias, {
|
let msgFlavor = await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-generic-result.hbs`, rollData)
|
||||||
content: await renderTemplate(`systems/fvtt-hero-system-6/templates/chat/chat-generic-result.hbs`, rollData)
|
let msg = await rollData.roll.toMessage({
|
||||||
|
user: game.user.id,
|
||||||
|
rollMode: game.settings.get("core", "rollMode"),
|
||||||
|
flavor: msgFlavor
|
||||||
})
|
})
|
||||||
|
rollData.roll = duplicate(rollData.roll) // Convert to object
|
||||||
msg.setFlag("world", "rolldata", rollData)
|
msg.setFlag("world", "rolldata", rollData)
|
||||||
console.log("Rolldata result", rollData)
|
console.log("Rolldata result", rollData)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------- ----------------------------- */
|
/* -------------- ----------------------------- */
|
||||||
static convertRollHeroSyntax( hero6Formula) {
|
static convertRollHeroSyntax(hero6Formula) {
|
||||||
// Ensure we have no space at all
|
// Ensure we have no space at all
|
||||||
//hero6Formula = hero6Formula.replace(/\s/g, '')
|
//hero6Formula = hero6Formula.replace(/\s/g, '')
|
||||||
let hasHalfDice = ""
|
let hasHalfDice = ""
|
||||||
if (hero6Formula.match("1/2d6")) {
|
let newFormula = hero6Formula
|
||||||
hero6Formula = hero6Formula.replace("1/2d6", "d6")
|
|
||||||
hasHalfDice = "+round(1d6)"
|
let form1 = hero6Formula.match(/\s*(\d*)\s*1\/2d6/)
|
||||||
|
if ( form1 ) {
|
||||||
|
let nbDice = form1[1] || 0
|
||||||
|
newFormula = nbDice+"d6+round(1d6/2)"
|
||||||
}
|
}
|
||||||
|
|
||||||
let foundryFormula = hero6Formula + hasHalfDice
|
let form3 = hero6Formula.match(/\s*(\d*)\.5d6/)
|
||||||
foundryFormula = foundryFormula.replace(' ', '')
|
if ( form3 ) {
|
||||||
console.log("Parsed formula : ", hero6Formula, foundryFormula)
|
let nbDice = form3[1] || 0
|
||||||
return foundryFormula
|
newFormula = nbDice+"d6+round(1d6/2)"
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Parsed formula : ", hero6Formula, newFormula)
|
||||||
|
return newFormula
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------- ----------------------------- */
|
/* -------------- ----------------------------- */
|
||||||
@ -433,7 +462,7 @@ export class Hero6Utility {
|
|||||||
static blindMessageToGM(chatOptions) {
|
static blindMessageToGM(chatOptions) {
|
||||||
let chatGM = duplicate(chatOptions);
|
let chatGM = duplicate(chatOptions);
|
||||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||||
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
|
chatGM.content = "Blind message of " + game.user.name + "<br>" + chatOptions.content;
|
||||||
console.log("blindMessageToGM", chatGM);
|
console.log("blindMessageToGM", chatGM);
|
||||||
game.socket.emit("system.fvtt-hero-system-6", { msg: "msg_gm_chat_message", data: chatGM });
|
game.socket.emit("system.fvtt-hero-system-6", { msg: "msg_gm_chat_message", data: chatGM });
|
||||||
}
|
}
|
||||||
|
BIN
packs/complications/000009.ldb
Normal file
BIN
packs/complications/000009.ldb
Normal file
Binary file not shown.
1
packs/complications/CURRENT
Normal file
1
packs/complications/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000042
|
0
packs/complications/LOCK
Normal file
0
packs/complications/LOCK
Normal file
8
packs/complications/LOG
Normal file
8
packs/complications/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:18:14.000526 7f5afddfa6c0 Recovering log #40
|
||||||
|
2023/08/07-22:18:14.012956 7f5afddfa6c0 Delete type=3 #38
|
||||||
|
2023/08/07-22:18:14.012989 7f5afddfa6c0 Delete type=0 #40
|
||||||
|
2023/08/07-23:27:51.013130 7f58677fe6c0 Level-0 table #45: started
|
||||||
|
2023/08/07-23:27:51.013173 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||||
|
2023/08/07-23:27:51.019258 7f58677fe6c0 Delete type=0 #43
|
||||||
|
2023/08/07-23:27:51.040432 7f58677fe6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-23:27:51.040586 7f58677fe6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
8
packs/complications/LOG.old
Normal file
8
packs/complications/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:00:56.735452 7f5afd5f96c0 Recovering log #36
|
||||||
|
2023/08/07-22:00:56.833916 7f5afd5f96c0 Delete type=3 #34
|
||||||
|
2023/08/07-22:00:56.833991 7f5afd5f96c0 Delete type=0 #36
|
||||||
|
2023/08/07-22:18:10.662583 7f58677fe6c0 Level-0 table #41: started
|
||||||
|
2023/08/07-22:18:10.662627 7f58677fe6c0 Level-0 table #41: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.668688 7f58677fe6c0 Delete type=0 #39
|
||||||
|
2023/08/07-22:18:10.668861 7f58677fe6c0 Manual compaction at level-0 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-22:18:10.668891 7f58677fe6c0 Manual compaction at level-1 from '!items!05yAsPAteobyHoVT' @ 72057594037927935 : 1 .. '!items!yFhVFTqzLKcqApBr' @ 0 : 0; will stop at (end)
|
BIN
packs/complications/MANIFEST-000042
Normal file
BIN
packs/complications/MANIFEST-000042
Normal file
Binary file not shown.
0
packs/equipment/000044.log
Normal file
0
packs/equipment/000044.log
Normal file
1
packs/equipment/CURRENT
Normal file
1
packs/equipment/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000042
|
0
packs/equipment/LOCK
Normal file
0
packs/equipment/LOCK
Normal file
7
packs/equipment/LOG
Normal file
7
packs/equipment/LOG
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
2023/08/07-22:18:13.969369 7f5afd5f96c0 Recovering log #40
|
||||||
|
2023/08/07-22:18:13.978774 7f5afd5f96c0 Delete type=3 #38
|
||||||
|
2023/08/07-22:18:13.978872 7f5afd5f96c0 Delete type=0 #40
|
||||||
|
2023/08/07-23:27:50.976450 7f58677fe6c0 Level-0 table #45: started
|
||||||
|
2023/08/07-23:27:50.976502 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||||
|
2023/08/07-23:27:50.982719 7f58677fe6c0 Delete type=0 #43
|
||||||
|
2023/08/07-23:27:50.982828 7f58677fe6c0 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/08/07-22:00:56.587410 7f5afd5f96c0 Recovering log #36
|
||||||
|
2023/08/07-22:00:56.639569 7f5afd5f96c0 Delete type=3 #34
|
||||||
|
2023/08/07-22:00:56.639645 7f5afd5f96c0 Delete type=0 #36
|
||||||
|
2023/08/07-22:18:10.624177 7f58677fe6c0 Level-0 table #41: started
|
||||||
|
2023/08/07-22:18:10.624214 7f58677fe6c0 Level-0 table #41: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.632567 7f58677fe6c0 Delete type=0 #39
|
||||||
|
2023/08/07-22:18:10.642835 7f58677fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
BIN
packs/equipment/MANIFEST-000042
Normal file
BIN
packs/equipment/MANIFEST-000042
Normal file
Binary file not shown.
BIN
packs/maneuvers/000005.ldb
Normal file
BIN
packs/maneuvers/000005.ldb
Normal file
Binary file not shown.
0
packs/maneuvers/000036.log
Normal file
0
packs/maneuvers/000036.log
Normal file
1
packs/maneuvers/CURRENT
Normal file
1
packs/maneuvers/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000034
|
0
packs/maneuvers/LOCK
Normal file
0
packs/maneuvers/LOCK
Normal file
8
packs/maneuvers/LOG
Normal file
8
packs/maneuvers/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:18:14.000527 7f5afd5f96c0 Recovering log #32
|
||||||
|
2023/08/07-22:18:14.012956 7f5afd5f96c0 Delete type=3 #30
|
||||||
|
2023/08/07-22:18:14.012992 7f5afd5f96c0 Delete type=0 #32
|
||||||
|
2023/08/07-23:27:51.026690 7f58677fe6c0 Level-0 table #37: started
|
||||||
|
2023/08/07-23:27:51.026730 7f58677fe6c0 Level-0 table #37: 0 bytes OK
|
||||||
|
2023/08/07-23:27:51.033892 7f58677fe6c0 Delete type=0 #35
|
||||||
|
2023/08/07-23:27:51.040520 7f58677fe6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-23:27:51.040625 7f58677fe6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
8
packs/maneuvers/LOG.old
Normal file
8
packs/maneuvers/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:00:56.752593 7f5afcdf86c0 Recovering log #28
|
||||||
|
2023/08/07-22:00:56.851595 7f5afcdf86c0 Delete type=3 #26
|
||||||
|
2023/08/07-22:00:56.851652 7f5afcdf86c0 Delete type=0 #28
|
||||||
|
2023/08/07-22:18:10.668942 7f58677fe6c0 Level-0 table #33: started
|
||||||
|
2023/08/07-22:18:10.668989 7f58677fe6c0 Level-0 table #33: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.675320 7f58677fe6c0 Delete type=0 #31
|
||||||
|
2023/08/07-22:18:10.691036 7f58677fe6c0 Manual compaction at level-0 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-22:18:10.691069 7f58677fe6c0 Manual compaction at level-1 from '!items!0HeZcvevni63brWf' @ 72057594037927935 : 1 .. '!items!yAT32VYV2aIWOBkK' @ 0 : 0; will stop at (end)
|
BIN
packs/maneuvers/MANIFEST-000034
Normal file
BIN
packs/maneuvers/MANIFEST-000034
Normal file
Binary file not shown.
BIN
packs/perks/000005.ldb
Normal file
BIN
packs/perks/000005.ldb
Normal file
Binary file not shown.
0
packs/perks/000044.log
Normal file
0
packs/perks/000044.log
Normal file
1
packs/perks/CURRENT
Normal file
1
packs/perks/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000042
|
0
packs/perks/LOCK
Normal file
0
packs/perks/LOCK
Normal file
8
packs/perks/LOG
Normal file
8
packs/perks/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:18:14.015482 7f5afcdf86c0 Recovering log #40
|
||||||
|
2023/08/07-22:18:14.031405 7f5afcdf86c0 Delete type=3 #38
|
||||||
|
2023/08/07-22:18:14.031513 7f5afcdf86c0 Delete type=0 #40
|
||||||
|
2023/08/07-23:27:51.019445 7f58677fe6c0 Level-0 table #45: started
|
||||||
|
2023/08/07-23:27:51.019492 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||||
|
2023/08/07-23:27:51.026550 7f58677fe6c0 Delete type=0 #43
|
||||||
|
2023/08/07-23:27:51.040470 7f58677fe6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-23:27:51.040607 7f58677fe6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 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/08/07-22:00:56.836453 7f5afd5f96c0 Recovering log #36
|
||||||
|
2023/08/07-22:00:56.950488 7f5afd5f96c0 Delete type=3 #34
|
||||||
|
2023/08/07-22:00:56.950642 7f5afd5f96c0 Delete type=0 #36
|
||||||
|
2023/08/07-22:18:10.683235 7f58677fe6c0 Level-0 table #41: started
|
||||||
|
2023/08/07-22:18:10.683286 7f58677fe6c0 Level-0 table #41: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.690928 7f58677fe6c0 Delete type=0 #39
|
||||||
|
2023/08/07-22:18:10.691057 7f58677fe6c0 Manual compaction at level-0 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-22:18:10.691082 7f58677fe6c0 Manual compaction at level-1 from '!items!L3vwlIh3oloE6A8W' @ 72057594037927935 : 1 .. '!items!yWTR7MCOtGWm1KCz' @ 0 : 0; will stop at (end)
|
BIN
packs/perks/MANIFEST-000042
Normal file
BIN
packs/perks/MANIFEST-000042
Normal file
Binary file not shown.
BIN
packs/powers/000013.ldb
Normal file
BIN
packs/powers/000013.ldb
Normal file
Binary file not shown.
0
packs/powers/000044.log
Normal file
0
packs/powers/000044.log
Normal file
1
packs/powers/CURRENT
Normal file
1
packs/powers/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000042
|
0
packs/powers/LOCK
Normal file
0
packs/powers/LOCK
Normal file
8
packs/powers/LOG
Normal file
8
packs/powers/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:18:13.982354 7f5afd5f96c0 Recovering log #40
|
||||||
|
2023/08/07-22:18:13.997957 7f5afd5f96c0 Delete type=3 #38
|
||||||
|
2023/08/07-22:18:13.998008 7f5afd5f96c0 Delete type=0 #40
|
||||||
|
2023/08/07-23:27:51.005564 7f58677fe6c0 Level-0 table #45: started
|
||||||
|
2023/08/07-23:27:51.005735 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||||
|
2023/08/07-23:27:51.012861 7f58677fe6c0 Delete type=0 #43
|
||||||
|
2023/08/07-23:27:51.013069 7f58677fe6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-23:27:51.013100 7f58677fe6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
8
packs/powers/LOG.old
Normal file
8
packs/powers/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:00:56.642444 7f5afcdf86c0 Recovering log #36
|
||||||
|
2023/08/07-22:00:56.750892 7f5afcdf86c0 Delete type=3 #34
|
||||||
|
2023/08/07-22:00:56.750934 7f5afcdf86c0 Delete type=0 #36
|
||||||
|
2023/08/07-22:18:10.655429 7f58677fe6c0 Level-0 table #41: started
|
||||||
|
2023/08/07-22:18:10.655482 7f58677fe6c0 Level-0 table #41: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.662426 7f58677fe6c0 Delete type=0 #39
|
||||||
|
2023/08/07-22:18:10.668849 7f58677fe6c0 Manual compaction at level-0 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-22:18:10.668882 7f58677fe6c0 Manual compaction at level-1 from '!items!3vinyVxuFdrQDCBo' @ 72057594037927935 : 1 .. '!items!zpF2QY4tx7qdBomQ' @ 0 : 0; will stop at (end)
|
BIN
packs/powers/MANIFEST-000042
Normal file
BIN
packs/powers/MANIFEST-000042
Normal file
Binary file not shown.
@ -39,9 +39,9 @@
|
|||||||
{"name":"Concealment","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Concealment","description":"Concealment represents a character’s ability to hide things and to find things which others have hidden — important papers, weapons, jewels, arti- facts, drugs, and so forth.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"YfLechAkLdcHGPCm"}
|
{"name":"Concealment","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Concealment","description":"Concealment represents a character’s ability to hide things and to find things which others have hidden — important papers, weapons, jewels, arti- facts, drugs, and so forth.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"YfLechAkLdcHGPCm"}
|
||||||
{"name":"Security Systems","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Security Systems","description":"A character with Security Systems can locate, recognize, evade, and build various types of alarms and traps. This usually requires the proper equipment, and often a lot of time (one Turn or longer) as well.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"bBoNhL0myNTylcHm"}
|
{"name":"Security Systems","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Security Systems","description":"A character with Security Systems can locate, recognize, evade, and build various types of alarms and traps. This usually requires the proper equipment, and often a lot of time (one Turn or longer) as well.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505024,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"bBoNhL0myNTylcHm"}
|
||||||
{"name":"Transport Familiarity","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Transport Familiarity","description":"This Background Skill allows characters to drive or pilot specific types of vehicles, or ride a living mount, under routine conditions (combat or crisis conditions require other Skills listed above).\nEach Transport Familiarity (TF) costs 2 Character Points. The character must select one of the following groups of vehicles:\n\nRiding Animals (horses, camels, elephants, and so on)\nGround Vehicles (cars, trucks, trains, motorcycles, sleds, snowmobiles)\nWater Vehicles (rowed boats, sailed boats, motorized boats)\nAir Vehicles (airplanes, helicopters) Space Vehicles (spaceships, starships) Mecha\nCharacters can purchase a TF with a single specific type of vehicle for 1 Character Point. This includes not only individual vehicles (Ford Mus- tangs, Los Angeles-class submarines) but recreational “vehicles” (such as SCUBA, Parachuting, Snow Skiing, or the like).","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"Background","characteristic":"","base":"","levelscost":"","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"bstMbLdHkP16NpyE"}
|
{"name":"Transport Familiarity","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Transport Familiarity","description":"This Background Skill allows characters to drive or pilot specific types of vehicles, or ride a living mount, under routine conditions (combat or crisis conditions require other Skills listed above).\nEach Transport Familiarity (TF) costs 2 Character Points. The character must select one of the following groups of vehicles:\n\nRiding Animals (horses, camels, elephants, and so on)\nGround Vehicles (cars, trucks, trains, motorcycles, sleds, snowmobiles)\nWater Vehicles (rowed boats, sailed boats, motorized boats)\nAir Vehicles (airplanes, helicopters) Space Vehicles (spaceships, starships) Mecha\nCharacters can purchase a TF with a single specific type of vehicle for 1 Character Point. This includes not only individual vehicles (Ford Mus- tangs, Los Angeles-class submarines) but recreational “vehicles” (such as SCUBA, Parachuting, Snow Skiing, or the like).","notes":"","effects":"","cost":"","activecost":"","basecost":"","value":"","modifiers":"","skilltype":"Background","characteristic":"","base":"","levelscost":"","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505028,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"bstMbLdHkP16NpyE"}
|
||||||
|
{"name":"Charm","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Charm","description":"Charm is the ability to gain others’ trust (and perhaps even friendship) by offering companionship or favors. This Skill is normally only for use on NPCs; a player should have more control over his character’s actions. The GM may rule that Charm can be used on a PC when it fits his Complications or personality.","notes":"","effects":"","cost":null,"activecost":null,"basecost":3,"value":"","modifiers":"","skilltype":"interaction","characteristic":"PRE","base":"","levelscost":2,"levels":null,"skilllevelonly":0,"skillfamiliarity":0,"skilleveryman":false,"skillprofiency":0,"plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.39","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1686003305741,"lastModifiedBy":"psfGTCIZQgpI1hvV"},"ownership":{"default":0,"psfGTCIZQgpI1hvV":3},"folder":null,"sort":0,"_id":"ddpdwDnfixUNP0eF"}
|
||||||
{"name":"Streetwise","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Streetwise","description":"Streetwise gives a character knowledge of the seamy side of civilization. He knows how to find the black market, talk to thugs and criminals, gain information, deal with organized (and not so organized) crime figures, and so on.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505023,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"gIYMsOzBOnRNRCLv"}
|
{"name":"Streetwise","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Streetwise","description":"Streetwise gives a character knowledge of the seamy side of civilization. He knows how to find the black market, talk to thugs and criminals, gain information, deal with organized (and not so organized) crime figures, and so on.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505023,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"gIYMsOzBOnRNRCLv"}
|
||||||
{"name":"Tracking","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Tracking","description":"Characters with Tracking can follow a trail by observing tracks, marks, broken twigs and so forth, and also know how to hide tracks.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505027,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"gpzcF5naO9H3vNzi"}
|
{"name":"Tracking","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Tracking","description":"Characters with Tracking can follow a trail by observing tracks, marks, broken twigs and so forth, and also know how to hide tracks.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505027,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"gpzcF5naO9H3vNzi"}
|
||||||
{"name":"Charm","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Charm","description":"Charm is the ability to gain others’ trust (and perhaps even friendship) by offering companionship or favors. This Skill is normally only for use on NPCs; a player should have more control over his character’s actions. The GM may rule that Charm can be used on a PC when it fits his Complications or personality.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"hZxL8I4mNlTsA9xQ"}
|
|
||||||
{"name":"Systems Operation","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Systems Operation","description":"Characters with Systems Operation know how to operate sensing and communication devices properly. It does not cover navigational equipment (that’s Navigation) or encoding transmissions (that’s Cryptography).","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505025,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"j7rkLue81LaHIzz7"}
|
{"name":"Systems Operation","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Systems Operation","description":"Characters with Systems Operation know how to operate sensing and communication devices properly. It does not cover navigational equipment (that’s Navigation) or encoding transmissions (that’s Cryptography).","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505025,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"j7rkLue81LaHIzz7"}
|
||||||
{"name":"Ventriloquism","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Ventriloquism","description":"A character with Ventriloquism can make his voice sound as if it’s coming from somewhere other than himself, and can speak without apparently moving his lips. Ventriloquism is detected with a PER Roll in a Skill Versus Skill Contest. A Ventriloquism roll takes a -1 for every 2m of distance between the ventriloquist and the point where the voice “speaks.”","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"jFd7i04Eu1FLCEpJ"}
|
{"name":"Ventriloquism","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"Ventriloquism","description":"A character with Ventriloquism can make his voice sound as if it’s coming from somewhere other than himself, and can speak without apparently moving his lips. Ventriloquism is detected with a PER Roll in a Skill Versus Skill Contest. A Ventriloquism roll takes a -1 for every 2m of distance between the ventriloquist and the point where the voice “speaks.”","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Intellect","characteristic":"INT","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505026,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"jFd7i04Eu1FLCEpJ"}
|
||||||
{"name":"High Society","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"High Society","description":"Characters with High Society know about upper-class culture and how to interact with it: what clothes to wear, which fork to use for shrimp, who’s who, the gossip and “court politics” applicable to the situation, and so forth.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505025,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"m40buQ4y7AzWbrA9"}
|
{"name":"High Society","type":"skill","img":"systems/fvtt-hero-system-6/images/icons/HeroIcon-Skills.webp","system":{"displayname":"High Society","description":"Characters with High Society know about upper-class culture and how to interact with it: what clothes to wear, which fork to use for shrimp, who’s who, the gossip and “court politics” applicable to the situation, and so forth.","notes":"","effects":"","cost":"","activecost":"","basecost":"3","value":"","modifiers":"","skilltype":"Interaction","characteristic":"PRE","base":"","levelscost":"2","levels":"","plusonecost":0,"skillroll":""},"effects":[],"flags":{"core":{"sourceId":"Item.KBoef00TNP73lDg0"}},"_stats":{"systemId":"fvtt-hero-system-6","systemVersion":"10.0.4","coreVersion":"10.291","createdTime":1671911635138,"modifiedTime":1674948505025,"lastModifiedBy":"PNdow54uXjPLt2Zr"},"folder":null,"sort":0,"ownership":{"default":0,"PNdow54uXjPLt2Zr":3},"_id":"m40buQ4y7AzWbrA9"}
|
||||||
|
BIN
packs/skills/000005.ldb
Normal file
BIN
packs/skills/000005.ldb
Normal file
Binary file not shown.
0
packs/skills/000044.log
Normal file
0
packs/skills/000044.log
Normal file
1
packs/skills/CURRENT
Normal file
1
packs/skills/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000042
|
0
packs/skills/LOCK
Normal file
0
packs/skills/LOCK
Normal file
8
packs/skills/LOG
Normal file
8
packs/skills/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:18:13.982353 7f5afddfa6c0 Recovering log #40
|
||||||
|
2023/08/07-22:18:13.997971 7f5afddfa6c0 Delete type=3 #38
|
||||||
|
2023/08/07-22:18:13.998032 7f5afddfa6c0 Delete type=0 #40
|
||||||
|
2023/08/07-23:27:50.999438 7f58677fe6c0 Level-0 table #45: started
|
||||||
|
2023/08/07-23:27:50.999471 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||||
|
2023/08/07-23:27:51.005436 7f58677fe6c0 Delete type=0 #43
|
||||||
|
2023/08/07-23:27:51.013039 7f58677fe6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-23:27:51.013085 7f58677fe6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 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/08/07-22:00:56.642359 7f5afd5f96c0 Recovering log #36
|
||||||
|
2023/08/07-22:00:56.733205 7f5afd5f96c0 Delete type=3 #34
|
||||||
|
2023/08/07-22:00:56.733486 7f5afd5f96c0 Delete type=0 #36
|
||||||
|
2023/08/07-22:18:10.649211 7f58677fe6c0 Level-0 table #41: started
|
||||||
|
2023/08/07-22:18:10.649245 7f58677fe6c0 Level-0 table #41: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.655255 7f58677fe6c0 Delete type=0 #39
|
||||||
|
2023/08/07-22:18:10.668835 7f58677fe6c0 Manual compaction at level-0 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-22:18:10.668872 7f58677fe6c0 Manual compaction at level-1 from '!items!0663RVbZRl0oZ0Dr' @ 72057594037927935 : 1 .. '!items!zLKcnLGEcMwECjni' @ 0 : 0; will stop at (end)
|
BIN
packs/skills/MANIFEST-000042
Normal file
BIN
packs/skills/MANIFEST-000042
Normal file
Binary file not shown.
BIN
packs/talents/000005.ldb
Normal file
BIN
packs/talents/000005.ldb
Normal file
Binary file not shown.
0
packs/talents/000044.log
Normal file
0
packs/talents/000044.log
Normal file
1
packs/talents/CURRENT
Normal file
1
packs/talents/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000042
|
0
packs/talents/LOCK
Normal file
0
packs/talents/LOCK
Normal file
8
packs/talents/LOG
Normal file
8
packs/talents/LOG
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:18:14.015482 7f5afd5f96c0 Recovering log #40
|
||||||
|
2023/08/07-22:18:14.034395 7f5afd5f96c0 Delete type=3 #38
|
||||||
|
2023/08/07-22:18:14.034433 7f5afd5f96c0 Delete type=0 #40
|
||||||
|
2023/08/07-23:27:51.034000 7f58677fe6c0 Level-0 table #45: started
|
||||||
|
2023/08/07-23:27:51.034031 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||||
|
2023/08/07-23:27:51.040235 7f58677fe6c0 Delete type=0 #43
|
||||||
|
2023/08/07-23:27:51.040547 7f58677fe6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-23:27:51.040656 7f58677fe6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
8
packs/talents/LOG.old
Normal file
8
packs/talents/LOG.old
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
2023/08/07-22:00:56.853665 7f5afcdf86c0 Recovering log #36
|
||||||
|
2023/08/07-22:00:56.969522 7f5afcdf86c0 Delete type=3 #34
|
||||||
|
2023/08/07-22:00:56.969559 7f5afcdf86c0 Delete type=0 #36
|
||||||
|
2023/08/07-22:18:10.675457 7f58677fe6c0 Level-0 table #41: started
|
||||||
|
2023/08/07-22:18:10.675493 7f58677fe6c0 Level-0 table #41: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.683073 7f58677fe6c0 Delete type=0 #39
|
||||||
|
2023/08/07-22:18:10.691049 7f58677fe6c0 Manual compaction at level-0 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
||||||
|
2023/08/07-22:18:10.691077 7f58677fe6c0 Manual compaction at level-1 from '!items!1oojD2KMJsxNlMez' @ 72057594037927935 : 1 .. '!items!znoFgVzNQOCTGUBl' @ 0 : 0; will stop at (end)
|
BIN
packs/talents/MANIFEST-000042
Normal file
BIN
packs/talents/MANIFEST-000042
Normal file
Binary file not shown.
0
packs/weapons/000044.log
Normal file
0
packs/weapons/000044.log
Normal file
1
packs/weapons/CURRENT
Normal file
1
packs/weapons/CURRENT
Normal file
@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000042
|
0
packs/weapons/LOCK
Normal file
0
packs/weapons/LOCK
Normal file
7
packs/weapons/LOG
Normal file
7
packs/weapons/LOG
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
2023/08/07-22:18:13.969369 7f5afddfa6c0 Recovering log #40
|
||||||
|
2023/08/07-22:18:13.978774 7f5afddfa6c0 Delete type=3 #38
|
||||||
|
2023/08/07-22:18:13.978889 7f5afddfa6c0 Delete type=0 #40
|
||||||
|
2023/08/07-23:27:50.992870 7f58677fe6c0 Level-0 table #45: started
|
||||||
|
2023/08/07-23:27:50.992899 7f58677fe6c0 Level-0 table #45: 0 bytes OK
|
||||||
|
2023/08/07-23:27:50.999291 7f58677fe6c0 Delete type=0 #43
|
||||||
|
2023/08/07-23:27:51.013019 7f58677fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
7
packs/weapons/LOG.old
Normal file
7
packs/weapons/LOG.old
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
2023/08/07-22:00:56.587421 7f5afcdf86c0 Recovering log #36
|
||||||
|
2023/08/07-22:00:56.639569 7f5afcdf86c0 Delete type=3 #34
|
||||||
|
2023/08/07-22:00:56.639646 7f5afcdf86c0 Delete type=0 #36
|
||||||
|
2023/08/07-22:18:10.642928 7f58677fe6c0 Level-0 table #41: started
|
||||||
|
2023/08/07-22:18:10.642973 7f58677fe6c0 Level-0 table #41: 0 bytes OK
|
||||||
|
2023/08/07-22:18:10.649077 7f58677fe6c0 Delete type=0 #39
|
||||||
|
2023/08/07-22:18:10.668818 7f58677fe6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end)
|
BIN
packs/weapons/MANIFEST-000042
Normal file
BIN
packs/weapons/MANIFEST-000042
Normal file
Binary file not shown.
@ -63,6 +63,10 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app.sidebar-popout .window-content {
|
||||||
|
color: rgba(4, 44, 44, 0.98);
|
||||||
|
}
|
||||||
|
|
||||||
.window-header{
|
.window-header{
|
||||||
background: rgba(0,0,0,0.75);
|
background: rgba(0,0,0,0.75);
|
||||||
}
|
}
|
||||||
@ -70,13 +74,13 @@
|
|||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(224, 208, 197, 0.9);
|
||||||
}
|
}
|
||||||
.dialog-content, .dialog-buttons, .form-fields {
|
.dialog-content, .dialog-buttons, .form-fields {
|
||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(4, 44, 44, 0.98);
|
||||||
}
|
}
|
||||||
.dialog-buttons {
|
.dialog-buttons {
|
||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(224, 208, 197, 0.9);
|
||||||
}
|
}
|
||||||
.dialog .dialog-buttons button.default {
|
.dialog .dialog-buttons button.default {
|
||||||
color: rgba(224, 208, 197, 0.9);
|
color: rgba(4, 44, 44, 0.98);
|
||||||
}
|
}
|
||||||
.window-app.sheet .window-content {
|
.window-app.sheet .window-content {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@ -1035,6 +1039,31 @@ ul, li {
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.chat-card-small-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: 1px ridge #846109;
|
||||||
|
display: inline-block;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
text-decoration: none;
|
||||||
|
text-shadow: 0px 1px 0px #4d3534;
|
||||||
|
position: relative;
|
||||||
|
margin:1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chat-card-small-button:hover {
|
||||||
|
background: linear-gradient(to bottom, #800000 5%, #3e0101 100%);
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
.chat-card-small-button:active {
|
||||||
|
position:relative;
|
||||||
|
top:1px;
|
||||||
|
}
|
||||||
|
|
||||||
.chat-card-button {
|
.chat-card-button {
|
||||||
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
box-shadow: inset 0px 1px 0px 0px #a6827e;
|
||||||
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
background: linear-gradient(to bottom, #21374afc 5%, #152833ab 100%);
|
||||||
@ -1258,6 +1287,9 @@ Focus FOC: #ff0084
|
|||||||
background: black;
|
background: black;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
.item-packed {
|
||||||
|
flex-grow:0;
|
||||||
|
}
|
||||||
.items-title-text {
|
.items-title-text {
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
@ -1309,6 +1341,11 @@ Focus FOC: #ff0084
|
|||||||
max-width: 9rem;
|
max-width: 9rem;
|
||||||
min-width: 9rem;
|
min-width: 9rem;
|
||||||
}
|
}
|
||||||
|
.item-field-label-very-short {
|
||||||
|
flex-grow:1;
|
||||||
|
max-width: 2.5rem;
|
||||||
|
min-width: 2.5rem;
|
||||||
|
}
|
||||||
.item-field-label-short {
|
.item-field-label-short {
|
||||||
flex-grow:1;
|
flex-grow:1;
|
||||||
max-width: 4rem;
|
max-width: 4rem;
|
||||||
@ -1324,6 +1361,11 @@ Focus FOC: #ff0084
|
|||||||
max-width: 8rem;
|
max-width: 8rem;
|
||||||
min-width: 8rem;
|
min-width: 8rem;
|
||||||
}
|
}
|
||||||
|
.item-field-text-long {
|
||||||
|
flex-grow:1;
|
||||||
|
max-width: 14rem;
|
||||||
|
min-width: 14rem;
|
||||||
|
}
|
||||||
.item-field-label-long-img {
|
.item-field-label-long-img {
|
||||||
flex-grow:1;
|
flex-grow:1;
|
||||||
max-width: 10rem;
|
max-width: 10rem;
|
||||||
@ -1377,4 +1419,10 @@ Focus FOC: #ff0084
|
|||||||
.textarea-full-height {
|
.textarea-full-height {
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
}
|
||||||
|
.margin-left-4 {
|
||||||
|
margin-left: 4px;
|
||||||
|
}
|
||||||
|
.margin-left-8 {
|
||||||
|
margin-left: 8px;
|
||||||
}
|
}
|
@ -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>
|
|
20
system.json
20
system.json
@ -66,6 +66,15 @@
|
|||||||
"private": false,
|
"private": false,
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "Item",
|
||||||
|
"label": "Maneuvers",
|
||||||
|
"name": "maneuvers",
|
||||||
|
"path": "packs/maneuvers.db",
|
||||||
|
"system": "fvtt-hero-system-6",
|
||||||
|
"private": false,
|
||||||
|
"flags": {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "Item",
|
"type": "Item",
|
||||||
"label": "Perks",
|
"label": "Perks",
|
||||||
@ -91,16 +100,15 @@
|
|||||||
"styles": [
|
"styles": [
|
||||||
"styles/simple.css"
|
"styles/simple.css"
|
||||||
],
|
],
|
||||||
"version": "10.0.37",
|
"version": "11.0.2",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": "10",
|
"minimum": "11",
|
||||||
"verified": "10",
|
"verified": "11"
|
||||||
"maximum": "10"
|
|
||||||
},
|
},
|
||||||
"title": "Hero System v6 for FoundrtVTT (Official)",
|
"title": "Hero System v6 for FoundrtVTT (Official)",
|
||||||
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/main/system.json",
|
"manifest": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/raw/branch/main/system.json",
|
||||||
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v10.0.37.zip",
|
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-hero-system-6/archive/fvtt-hero-system-6-v11.0.1.zip",
|
||||||
"url": "https://www.uberwald.me/gitea/uberwald/",
|
"url": "https://www.uberwald.me/gitea/uberwald/",
|
||||||
"background": "images/ui/hro6_welcome_page.webp",
|
"background": "systems/fvtt-hero-system-6/images/ui/hero_foundry_cover.webp",
|
||||||
"id": "fvtt-hero-system-6"
|
"id": "fvtt-hero-system-6"
|
||||||
}
|
}
|
@ -43,9 +43,10 @@
|
|||||||
"value": 10,
|
"value": 10,
|
||||||
"base": 10,
|
"base": 10,
|
||||||
"category": "main",
|
"category": "main",
|
||||||
"strdice": "",
|
"strdice": "1d6",
|
||||||
"lift": "",
|
"lift": "",
|
||||||
"strend": 0,
|
"strend": 0,
|
||||||
|
"strendmode": "str10",
|
||||||
"hasroll": true,
|
"hasroll": true,
|
||||||
"realcost": 0,
|
"realcost": 0,
|
||||||
"activecost": 0
|
"activecost": 0
|
||||||
@ -55,6 +56,7 @@
|
|||||||
"value": 10,
|
"value": 10,
|
||||||
"base": 10,
|
"base": 10,
|
||||||
"hasroll": true,
|
"hasroll": true,
|
||||||
|
"initiative": 10,
|
||||||
"category": "main"
|
"category": "main"
|
||||||
},
|
},
|
||||||
"con": {
|
"con": {
|
||||||
@ -70,7 +72,7 @@
|
|||||||
"category": "main",
|
"category": "main",
|
||||||
"value": 10,
|
"value": 10,
|
||||||
"base": 10,
|
"base": 10,
|
||||||
"perceptionroll": 10
|
"perceptionroll": 11
|
||||||
},
|
},
|
||||||
"ego": {
|
"ego": {
|
||||||
"label": "EGO",
|
"label": "EGO",
|
||||||
@ -88,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"ocv": {
|
"ocv": {
|
||||||
"label": "OCV",
|
"label": "OCV",
|
||||||
"hasroll": false,
|
"hasroll": true,
|
||||||
"base": 3,
|
"base": 3,
|
||||||
"autoMod": "0",
|
"autoMod": "0",
|
||||||
"userMod": "0",
|
"userMod": "0",
|
||||||
@ -106,7 +108,7 @@
|
|||||||
},
|
},
|
||||||
"omcv": {
|
"omcv": {
|
||||||
"label": "OMCV",
|
"label": "OMCV",
|
||||||
"hasroll": false,
|
"hasroll": true,
|
||||||
"base": 3,
|
"base": 3,
|
||||||
"autoMod": "0",
|
"autoMod": "0",
|
||||||
"userMod": "0",
|
"userMod": "0",
|
||||||
@ -203,6 +205,7 @@
|
|||||||
"ismovement": true,
|
"ismovement": true,
|
||||||
"hasroll": false,
|
"hasroll": false,
|
||||||
"value": 12,
|
"value": 12,
|
||||||
|
"ncvalue": 24,
|
||||||
"base": 12
|
"base": 12
|
||||||
},
|
},
|
||||||
"swimming": {
|
"swimming": {
|
||||||
@ -210,6 +213,7 @@
|
|||||||
"ismovement": true,
|
"ismovement": true,
|
||||||
"hasroll": false,
|
"hasroll": false,
|
||||||
"value": 4,
|
"value": 4,
|
||||||
|
"ncvalue": 8,
|
||||||
"base": 4
|
"base": 4
|
||||||
},
|
},
|
||||||
"leaping": {
|
"leaping": {
|
||||||
@ -217,6 +221,7 @@
|
|||||||
"ismovement": true,
|
"ismovement": true,
|
||||||
"hasroll": false,
|
"hasroll": false,
|
||||||
"value": 4,
|
"value": 4,
|
||||||
|
"ncvalue": 8,
|
||||||
"base": 4,
|
"base": 4,
|
||||||
"leaping_horizontal_base": 0,
|
"leaping_horizontal_base": 0,
|
||||||
"leaping_horizontal_total": 0,
|
"leaping_horizontal_total": 0,
|
||||||
@ -229,25 +234,31 @@
|
|||||||
"movements": {
|
"movements": {
|
||||||
"fly": {
|
"fly": {
|
||||||
"label": "Fly",
|
"label": "Fly",
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
|
|
||||||
},
|
},
|
||||||
"teleport": {
|
"teleport": {
|
||||||
"label": "Teleport",
|
"label": "Teleport",
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
},
|
},
|
||||||
"tunnel": {
|
"tunnel": {
|
||||||
"label": "Tunnel",
|
"label": "Tunnel",
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
},
|
},
|
||||||
"move1": {
|
"move1": {
|
||||||
"label": "N/A",
|
"label": "N/A",
|
||||||
"iseditable": true,
|
"iseditable": true,
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
},
|
},
|
||||||
"move2": {
|
"move2": {
|
||||||
"label": "N/A",
|
"label": "N/A",
|
||||||
"iseditable": true,
|
"iseditable": true,
|
||||||
"value": 0
|
"value": 0,
|
||||||
|
"ncvalue": 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -331,7 +342,7 @@
|
|||||||
"senseaffecting": false,
|
"senseaffecting": false,
|
||||||
"modifiers": [],
|
"modifiers": [],
|
||||||
"levels": 0,
|
"levels": 0,
|
||||||
"quantity": 0,
|
"quantity": 1,
|
||||||
"range": "",
|
"range": "",
|
||||||
"damage": "",
|
"damage": "",
|
||||||
"endurance": 0,
|
"endurance": 0,
|
||||||
@ -341,6 +352,8 @@
|
|||||||
"haseffectroll": false,
|
"haseffectroll": false,
|
||||||
"effectroll": "standard",
|
"effectroll": "standard",
|
||||||
"effectrollformula": "",
|
"effectrollformula": "",
|
||||||
|
"hascharges": false,
|
||||||
|
"nbcharges": 0,
|
||||||
"items": {}
|
"items": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -350,8 +363,8 @@
|
|||||||
],
|
],
|
||||||
"maneuvertype": "general",
|
"maneuvertype": "general",
|
||||||
"pha": "",
|
"pha": "",
|
||||||
"ocv": 0,
|
"ocv": "",
|
||||||
"dcv" : 0,
|
"dcv" : "",
|
||||||
"isstock": false,
|
"isstock": false,
|
||||||
"active": false
|
"active": false
|
||||||
},
|
},
|
||||||
|
@ -125,15 +125,13 @@
|
|||||||
<label class="item-field-label-medium">STR Dice</label>
|
<label class="item-field-label-medium">STR Dice</label>
|
||||||
<a class="roll-lift-dice"><i class="fas fa-dice"></i>{{characteristics.str.strdice}}</a>
|
<a class="roll-lift-dice"><i class="fas fa-dice"></i>{{characteristics.str.strdice}}</a>
|
||||||
<label class="item-field-label-short"> </label>
|
<label class="item-field-label-short"> </label>
|
||||||
|
|
||||||
<label class="item-field-label-medium">Lift</label>
|
<label class="item-field-label-medium">Lift</label>
|
||||||
<input type="text" class="item-field-label-short update-field" disabled data-field-name="system.characteristics.str.lift" value="{{characteristics.str.lift}}" data-dtype="String" />
|
<input type="text" class="item-field-label-short update-field" disabled data-field-name="system.characteristics.str.lift" value="{{characteristics.str.lift}}" data-dtype="String" />
|
||||||
<label class="item-field-label-short"> </label>
|
<label class="item-field-label-short"> </label>
|
||||||
<label class="item-field-label-medium">STR END</label>
|
<label class="item-field-label-medium">STR END</label>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.str.strend" value="{{characteristics.str.strend}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.str.strend" disabled value="{{characteristics.str.strend}}" data-dtype="Number" />
|
||||||
</li>
|
|
||||||
<li class="flexrow item">
|
|
||||||
<label class="item-field-label-long">Presence attack</label>
|
|
||||||
<a class="roll-direct" data-roll-source="Presence attack" data-roll-formula="{{system.biodata.presenceattack.rollFormula}}"><i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}</a>
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -141,18 +139,18 @@
|
|||||||
<ul class="stat-list alternate-list">
|
<ul class="stat-list alternate-list">
|
||||||
<li class="item flexrow list-item items-title-bg">
|
<li class="item flexrow list-item items-title-bg">
|
||||||
<span class="item-field-label-long-img">
|
<span class="item-field-label-long-img">
|
||||||
<label class="">{{upperFirst key}} Standard Maneuver</label>
|
<label class="">{{upperFirst key}} Maneuver</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-very-short">
|
||||||
<label class="short-label">PHA</label>
|
<label class="short-label">PHA</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-very-short">
|
||||||
<label class="short-label">OCV</label>
|
<label class="short-label">OCV</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-very-short">
|
||||||
<label class="short-label">DCV</label>
|
<label class="short-label">DCV</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-medium">
|
<span class="item-field-text-long">
|
||||||
<label class="short-label">Effects</label>
|
<label class="short-label">Effects</label>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
@ -160,14 +158,23 @@
|
|||||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
|
<li class="item flexrow list-item list-item-shadow" data-item-id="{{maneuver._id}}">
|
||||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||||
src="{{maneuver.img}}" /></a>
|
src="{{maneuver.img}}" /></a>
|
||||||
<span class="item-field-label-long">{{maneuver.name}}</span>
|
<span class="item-field-label-long">{{maneuver.name}}
|
||||||
|
<a class="roll-item"><i class="fas fa-dice"></i></a>
|
||||||
|
</span>
|
||||||
|
|
||||||
<span class="item-field-label-short">{{maneuver.system.pha}}</span>
|
<span class="item-field-label-very-short">{{maneuver.system.pha}}</span>
|
||||||
<span class="item-field-label-short">{{maneuver.system.ocv}}</span>
|
<span class="item-field-label-very-short">{{maneuver.system.ocv}}</span>
|
||||||
<span class="item-field-label-short">{{maneuver.system.dcv}}</span>
|
<span class="item-field-label-very-short">{{maneuver.system.dcv}}</span>
|
||||||
|
|
||||||
<span class="item-field-label-medium">{{maneuver.system.effects}}</span>
|
<span class="item-field-text-long">{{maneuver.system.effects}}
|
||||||
|
{{#if maneuver.system.haseffectroll}}
|
||||||
|
<a class="roll-direct" data-roll-source="Maneuver {{maneuver.name}}" data-roll-formula="{{maneuver.system.effectrollformula}}">
|
||||||
|
<i class="fas fa-dice"></i>{{maneuver.system.effectrollformula}}
|
||||||
|
</a>
|
||||||
|
{{/if}}
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span class=""> </span>
|
||||||
<div class="item-controls item-controls-fixed">
|
<div class="item-controls item-controls-fixed">
|
||||||
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
|
||||||
</div>
|
</div>
|
||||||
@ -180,8 +187,21 @@
|
|||||||
<div>
|
<div>
|
||||||
<ul class="item-list alternate-list">
|
<ul class="item-list alternate-list">
|
||||||
<li class="flexrow item">
|
<li class="flexrow item">
|
||||||
<label class="item-field-label-medium">SPD</label>
|
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}" data-dtype="Number" />
|
<label class="item-packed">Initiative</label>
|
||||||
|
<input type="text" class="margin-left-4item-packed item-field-label-very-short update-field" data-field-name="system.characteristics.dex.initiative" value="{{characteristics.dex.initiative}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
<label class="items-title-text item-packed margin-left-8">SPD</label>
|
||||||
|
<input type="text" class="item-field-label-very-short margin-left-4 update-field item-packed" data-field-name="system.characteristics.spd.value" value="{{characteristics.spd.value}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
<button class="chat-card-small-button item-field-label-short margin-left-8 hold-action item-packed">{{#if isHold}}Unhold{{else}}Hold{{/if}}</button>
|
||||||
|
<button class="chat-card-small-button item-field-label-short margin-left-4 abort-action item-packed">{{#if isAbort}}Unabort{{else}}Abort{{/if}}</button>
|
||||||
|
|
||||||
|
<label class="items-title-text margin-left-8">Presence attack</label>
|
||||||
|
<a class="roll-direct" data-roll-source="Presence attack" data-roll-formula="{{system.biodata.presenceattack.rollFormula}}">
|
||||||
|
<i class="fas fa-dice"></i>{{system.biodata.presenceattack.displayFormula}}
|
||||||
|
</a>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@ -220,10 +240,10 @@
|
|||||||
<label class="">Defenses</label>
|
<label class="">Defenses</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Val</label>
|
<label class="short-label">Normal</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">Res</label>
|
<label class="short-label">Resistant</label>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{{#each characteristics as |char key|}}
|
{{#each characteristics as |char key|}}
|
||||||
@ -286,7 +306,9 @@
|
|||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||||
<span class="item-field-label-long">Perception Roll</span>
|
<span class="item-field-label-long">
|
||||||
|
<a class="roll-perception"><i class="fas fa-dice"></i>Perception Roll</a>
|
||||||
|
</span>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.int.perceptionroll" value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.int.perceptionroll" value="{{characteristics.int.perceptionroll}}" data-dtype="Number" />
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -300,7 +322,7 @@
|
|||||||
<label class="">Movement</label>
|
<label class="">Movement</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">C</label>
|
<label class="short-label">Combat</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="short-label">NC</label>
|
<label class="short-label">NC</label>
|
||||||
@ -311,7 +333,7 @@
|
|||||||
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
<li class="item flexrow list-item list-item-shadow" data-charac-key="{{key}}">
|
||||||
<span class="item-field-label-long">{{char.label}}</span>
|
<span class="item-field-label-long">{{char.label}}</span>
|
||||||
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.value" value="{{char.value}}" data-dtype="Number" />
|
||||||
<input type="text" class="item-field-label-short" value="{{mul char.value 2}}" disabled data-dtype="Number" />
|
<input type="text" class="item-field-label-short update-field" data-field-name="system.characteristics.{{key}}.ncvalue" value="{{char.ncvalue}}" data-dtype="Number" />
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -514,11 +536,11 @@
|
|||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="item-field-label-short">Cost</label>
|
<label class="item-field-label-short">Cost</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-medium">
|
<span class="item-field-label-long3">
|
||||||
<label class="item-field-label-medium">Name</label>
|
<label class="item-field-label-long3">Name</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-long4">
|
<span class="item-field-label-long2">
|
||||||
<label class="item-field-label-long4">Display</label>
|
<label class="item-field-label-long2">Display</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-medium">
|
<span class="item-field-label-medium">
|
||||||
<label class="item-field-label-medium">Effect</label>
|
<label class="item-field-label-medium">Effect</label>
|
||||||
@ -535,8 +557,8 @@
|
|||||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
|
||||||
src="{{power.img}}" /></a>
|
src="{{power.img}}" /></a>
|
||||||
<span class="item-field-label-short">{{power.system.cost}}</span>
|
<span class="item-field-label-short">{{power.system.cost}}</span>
|
||||||
<span class="item-field-label-medium">{{power.name}}</span>
|
<span class="item-field-label-long3">{{power.name}}</span>
|
||||||
<span class="item-field-label-long4">{{power.system.displayname}}</span>
|
<span class="item-field-label-long2">{{power.system.displayname}}</span>
|
||||||
<span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i class="fas fa-dice"></i>{{power.system.damage}}</a></span>
|
<span class="item-field-label-medium"><a class="roll-damage" data-type="power"><i class="fas fa-dice"></i>{{power.system.damage}}</a></span>
|
||||||
{{#if power.system.hasroll}}
|
{{#if power.system.hasroll}}
|
||||||
<span class="item-field-label-short"><a class="roll-item" data-type="power"><i class="fas fa-dice"></i>{{power.system.roll}}-</a></span>
|
<span class="item-field-label-short"><a class="roll-item" data-type="power"><i class="fas fa-dice"></i>{{power.system.roll}}-</a></span>
|
||||||
@ -591,6 +613,7 @@
|
|||||||
<h3>Encumbrance</h3>
|
<h3>Encumbrance</h3>
|
||||||
<span class="small-label">Current : {{encCurrent}}</span>
|
<span class="small-label">Current : {{encCurrent}}</span>
|
||||||
<span class="small-label">Capacity : {{encCapacity}}</span>
|
<span class="small-label">Capacity : {{encCapacity}}</span>
|
||||||
|
<span class="small-label">Total value : {{totalValue}}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Weapons" items=weapons}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-actor-equipment-section.hbs title="Weapons" items=weapons}}
|
||||||
@ -651,31 +674,31 @@
|
|||||||
{{!-- Notes Tab --}}
|
{{!-- Notes Tab --}}
|
||||||
<div class="tab notes" data-group="primary" data-tab="notes">
|
<div class="tab notes" data-group="primary" data-tab="notes">
|
||||||
<h3>Notes 1 : </h3>
|
<h3>Notes 1 : </h3>
|
||||||
<div class="form-group editor">
|
<div class="medium-editor ">
|
||||||
{{editor notes1 target="system.biodata.notes1" button=true owner=owner
|
{{editor notes1 target="system.biodata.notes1" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<h3>Notes 2 : </h3>
|
<h3>Notes 2 : </h3>
|
||||||
<div class="form-group editor">
|
<div class="small-editor">
|
||||||
{{editor notes2 target="system.biodata.notes2" button=true owner=owner
|
{{editor notes2 target="system.biodata.notes2" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<h3>Notes 3 : </h3>
|
<h3>Notes 3 : </h3>
|
||||||
<div class="form-group editor">
|
<div class="small-editor">
|
||||||
{{editor notes3 target="system.biodata.notes3" button=true owner=owner
|
{{editor notes3 target="system.biodata.notes3" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<h3>Notes 4 : </h3>
|
<h3>Notes 4 : </h3>
|
||||||
<div class="form-group editor">
|
<div class="small-editor">
|
||||||
{{editor notes4 target="system.biodata.notes4" button=true owner=owner
|
{{editor notes4 target="system.biodata.notes4" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<h3>Notes 5 : </h3>
|
<h3>Notes 5 : </h3>
|
||||||
<div class="form-group editor">
|
<div class="small-editor">
|
||||||
{{editor notes5 target="system.biodata.notes5" button=true owner=owner
|
{{editor notes5 target="system.biodata.notes5" button=true owner=owner
|
||||||
editable=editable}}
|
editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -32,9 +32,12 @@
|
|||||||
</a>
|
</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{log combat.flags}}
|
||||||
|
|
||||||
{{#if combatCount}}
|
{{#if combatCount}}
|
||||||
{{#if combat.round}}
|
{{#if combat.round}}
|
||||||
<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>
|
<!--<h3 class="encounter-title noborder">Turn {{combat.turnNumber}} Segment {{combat.segmentNumber}}</h3>-->
|
||||||
|
<h3 class="encounter-title noborder">Turn {{combat.flags.world.turnData.turnNumber}} Segment {{combat.flags.world.turnData.segmentNumber}}</h3>
|
||||||
{{else}}
|
{{else}}
|
||||||
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
|
<h3 class="encounter-title noborder">{{localize 'COMBAT.NotStarted'}}</h3>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
@ -60,11 +63,11 @@
|
|||||||
|
|
||||||
<ol id="combat-tracker" class="directory-list">
|
<ol id="combat-tracker" class="directory-list">
|
||||||
{{#each turns}}
|
{{#each turns}}
|
||||||
{{#if (ne this.initiative "-1")}}
|
{{#if (checkInit this.initiative)}}
|
||||||
<li class="combatant actor directory-item flexrow {{this.css}}" data-combatant-id="{{this.id}}">
|
<li class="combatant actor directory-item flexrow {{this.css}}" data-combatant-id="{{this.id}}">
|
||||||
<img class="token-image" data-src="{{this.img}}" alt="{{this.name}}"/>
|
<img class="token-image" data-src="{{this.img}}" alt="{{this.name}}"/>
|
||||||
<div class="token-name flexcol">
|
<div class="token-name flexcol">
|
||||||
<h4>{{this.name}} {{log this}} {{#if this.holdAction}}(H){{/if}}</h4>
|
<h4>{{this.name}} </h4>
|
||||||
<div class="combatant-controls flexrow">
|
<div class="combatant-controls flexrow">
|
||||||
{{#if ../user.isGM}}
|
{{#if ../user.isGM}}
|
||||||
<a class="combatant-control {{#if this.hidden}}active{{/if}}" data-tooltip="COMBAT.ToggleVis" data-control="toggleHidden">
|
<a class="combatant-control {{#if this.hidden}}active{{/if}}" data-tooltip="COMBAT.ToggleVis" data-control="toggleHidden">
|
||||||
|
@ -9,10 +9,10 @@
|
|||||||
<div class="flexcol">
|
<div class="flexcol">
|
||||||
|
|
||||||
{{#if charac}}
|
{{#if charac}}
|
||||||
<div class="flexrow">
|
<div class="flexrow">
|
||||||
<span class="item-field-label-long margin-item-list">Characteristic : </span>
|
<span class="item-field-label-long margin-item-list">{{#if isPerception}}Perception{{else}}Characteristic{{/if}} : </span>
|
||||||
<span class="item-field-label-medium margin-item-list">{{charac.roll}}-</span>
|
<span class="item-field-label-medium margin-item-list">{{charac.roll}}-</span>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if item}}
|
{{#if item}}
|
||||||
|
@ -18,10 +18,9 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>Name : {{title}}</li>
|
||||||
<li>Damage formula : {{diceFormula}}</li>
|
<li>Damage formula : {{diceFormula}}</li>
|
||||||
|
<li><strong>TOTAL : {{result}}</strong></li>
|
||||||
<li><strong>Result : {{result}}</strong></li>
|
|
||||||
|
|
||||||
<li><strong>BODY : {{bodyValue}}</strong></li>
|
<li><strong>BODY : {{bodyValue}}</strong></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<li><strong>Result : {{result}}</strong>
|
<li><strong>TOTAL : {{result}}</strong>
|
||||||
{{#if (exists margin)}}
|
{{#if (exists margin)}}
|
||||||
({{#if isSuccess}}Success!!{{else}}Failure!{{/if}})
|
({{#if isSuccess}}Success!!{{else}}Failure!{{/if}})
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
3
templates/chat/chat-hr-roll.hbs
Normal file
3
templates/chat/chat-hr-roll.hbs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<div>
|
||||||
|
BODY : {{bodyValue}}
|
||||||
|
</div>
|
@ -19,8 +19,9 @@
|
|||||||
<div>
|
<div>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Lift dice formula : {{diceFormula}}</li>
|
<li>Lift dice formula : {{diceFormula}}</li>
|
||||||
|
<li>BODY : {{bodyValue}}</li>
|
||||||
|
|
||||||
<li><strong>Result : {{result}}</strong></li>
|
<li><strong>TOTAL : {{result}}</strong></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
<div class="chat-message-header">
|
|
||||||
{{#if actorImg}}
|
|
||||||
<img class="actor-icon" src="{{actorImg}}" alt="{{alias}}" />
|
|
||||||
{{/if}}
|
|
||||||
<h4 class=chat-actor-name>{{alias}}</h4>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
{{#if img}}
|
|
||||||
<div>
|
|
||||||
<img class="chat-icon" src="{{img}}" alt="{{name}}" />
|
|
||||||
</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<div class="flexcol">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
|
|
||||||
{{#if isRangedAttack}}
|
|
||||||
<div>{{defender.name}} is under Ranged attack. He must roll a Target Roll to defend himself.</div>
|
|
||||||
{{else}}
|
|
||||||
<div>{{defender.name}} is under Melee attack. He must roll a Defense Roll to defend himself.</div>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
{{#if isRangedAttack}}
|
|
||||||
<li>
|
|
||||||
<button class="chat-card-button roll-defense-ranged" data-roll-id="{{@root.rollId}}">Roll Target !</button>
|
|
||||||
</li>
|
|
||||||
{{else}}
|
|
||||||
<li>
|
|
||||||
{{#each defenderWeapons as |weapon idx|}}
|
|
||||||
<button class="chat-card-button roll-defense-melee" data-defense-weapon-id="{{weapon._id}}"
|
|
||||||
data-roll-id="{{@root.rollId}}">{{weapon.name}}</button>
|
|
||||||
{{/each}}
|
|
||||||
</li>
|
|
||||||
{{/if}}
|
|
||||||
</ul>
|
|
||||||
<!-- <button class="chat-card-button reroll-level-remaining" data-roll-id="{{rollId}}">Reroll</button> -->
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
@ -1,9 +1,9 @@
|
|||||||
<form class="{{cssClass}}" autocomplete="off">
|
<form class="{{cssClass}}" autocomplete="off">
|
||||||
<header class="sheet-header">
|
<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">
|
<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>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-item-nav.hbs}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-item-nav.hbs}}
|
||||||
@ -16,33 +16,54 @@
|
|||||||
<div class="tab details" data-group="primary" data-tab="details">
|
<div class="tab details" data-group="primary" data-tab="details">
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-power-equipment-cost.hbs}}
|
|
||||||
|
|
||||||
<li class="flexrow"><label class="item-field-label-long">Subtype</label>
|
|
||||||
<select class="item-field-label-long" type="text" name="system.subtype" value="{{system.subtype}}" data-dtype="String">
|
|
||||||
{{#select system.subtype}}
|
|
||||||
{{#each config.equipmentSubType as |name key|}}
|
|
||||||
<option value="{{key}}">{{name}}</option>
|
|
||||||
{{/each}}
|
|
||||||
{{/select}}
|
|
||||||
</select>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
<li class="flexrow"><label class="item-field-label-long">Equipped ?</label>
|
||||||
<label class="item-field-label-medium"><input type="checkbox" name="system.equipped" {{checked system.equipped}}/></label>
|
<label class="item-field-label-medium"><input type="checkbox" name="system.equipped" {{checked
|
||||||
|
system.equipped}} /></label>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="flexrow"><label class="item-field-label-long">Quantity</label>
|
||||||
|
<input type="text" class="item-field-label-short" name="system.quantity" value="{{system.quantity}}"
|
||||||
|
data-dtype="Number" />
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="flexrow">
|
||||||
|
<label class="item-field-label-long">Value</label>
|
||||||
|
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.value"
|
||||||
|
value="{{system.value}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
<label class="item-field-label-long">Total Value</label>
|
||||||
|
<label class="item-field-label-long">{{mul system.value system.quantity}}</label>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="flexrow"><label class="item-field-label-long">Weight</label>
|
<li class="flexrow"><label class="item-field-label-long">Weight</label>
|
||||||
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.weight" value="{{system.weight}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.weight"
|
||||||
|
value="{{system.weight}}" data-dtype="Number" />
|
||||||
|
|
||||||
|
<label class="item-field-label-long">Total Weight</label>
|
||||||
|
<label class="item-field-label-long">{{mul system.weight system.quantity}}</label>
|
||||||
</li>
|
</li>
|
||||||
<li class="flexrow"><label class="item-field-label-long">Value</label>
|
|
||||||
<input type="text" class="item-field-label-medium input-numeric-short padd-right" name="system.value" value="{{system.value}}" data-dtype="Number"/>
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-power-equipment-cost.hbs quantityDone=1}}
|
||||||
|
|
||||||
|
<li class="flexrow"><label class="item-field-label-long">Subtype</label>
|
||||||
|
<select class="item-field-label-long" type="text" name="system.subtype" value="{{system.subtype}}"
|
||||||
|
data-dtype="String">
|
||||||
|
{{#select system.subtype}}
|
||||||
|
{{#each config.equipmentSubType as |name key|}}
|
||||||
|
<option value="{{key}}">{{name}}</option>
|
||||||
|
{{/each}}
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-item-hasroll.hbs}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{{> systems/fvtt-hero-system-6/templates/partials/partial-item-cost.hbs}}
|
{{> systems/fvtt-hero-system-6/templates/partials/partial-item-cost.hbs}}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
</form>
|
</form>
|
@ -38,11 +38,11 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="flexrow"><label class="item-field-label-medium">OCV</label>
|
<li class="flexrow"><label class="item-field-label-medium">OCV</label>
|
||||||
<input type="text" class="item-field-label-medium" name="system.ocv" value="{{system.ocv}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-medium" name="system.ocv" value="{{system.ocv}}" data-dtype="String"/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="flexrow"><label class="item-field-label-medium">DCV</label>
|
<li class="flexrow"><label class="item-field-label-medium">DCV</label>
|
||||||
<input type="text" class="item-field-label-medium" name="system.dcv" value="{{system.dcv}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-medium" name="system.dcv" value="{{system.dcv}}" data-dtype="String"/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="flexrow"><label class="item-field-label-medium">Effects</label>
|
<li class="flexrow"><label class="item-field-label-medium">Effects</label>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li class="flexrow"><label class="item-field-label-long">Type</label>
|
<li class="flexrow"><label class="item-field-label-long">Type</label>
|
||||||
<select class="item-field-label-medium" type="text" name="system.skilltype" value="{{system.skilltype}}" data-dtype="String">
|
<select class="item-field-label-medium" type="text" name="system.skilltype" value="{{system.skilltype}}" data-dtype="String">
|
||||||
{{#select system.skilltype}}
|
{{#select (lower system.skilltype)}}
|
||||||
{{#each config.skillType as |char key|}}
|
{{#each config.skillType as |char key|}}
|
||||||
<option value="{{key}}">{{char}}</option>
|
<option value="{{key}}">{{char}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -28,14 +28,14 @@
|
|||||||
{{#if (isSkillCustom system.skilltype)}}
|
{{#if (isSkillCustom system.skilltype)}}
|
||||||
<li class="flexrow"><label class="item-field-label-long">Base characteristic</label>
|
<li class="flexrow"><label class="item-field-label-long">Base characteristic</label>
|
||||||
<select class="item-field-label-medium" type="text" name="system.characteristic" value="{{system.characteristic}}" data-dtype="String">
|
<select class="item-field-label-medium" type="text" name="system.characteristic" value="{{system.characteristic}}" data-dtype="String">
|
||||||
{{#select system.characteristic}}
|
{{#select (lower system.characteristic)}}
|
||||||
{{#each config.rollCharac as |char key|}}
|
{{#each config.rollCharac as |char key|}}
|
||||||
<option value="{{key}}">{{char}}</option>
|
<option value="{{key}}">{{char}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
{{/select}}
|
{{/select}}
|
||||||
</select>
|
</select>
|
||||||
</li>
|
</li>
|
||||||
{{#if (eq system.characteristic "manual")}}
|
{{#if (eq (lower system.characteristic) "manual")}}
|
||||||
<li class="flexrow"><label class="item-field-label-long">Base value</label>
|
<li class="flexrow"><label class="item-field-label-long">Base value</label>
|
||||||
<input type="text" class="item-field-label-medium" name="system.base" value="{{system.base}}" data-dtype="Number" {{#if (ne system.characteristic "manual")}}disabled{{/if}} />
|
<input type="text" class="item-field-label-medium" name="system.base" value="{{system.base}}" data-dtype="Number" {{#if (ne system.characteristic "manual")}}disabled{{/if}} />
|
||||||
</li>
|
</li>
|
||||||
|
@ -3,10 +3,13 @@
|
|||||||
<span class="item-name-img">
|
<span class="item-name-img">
|
||||||
<label class=""> </label>
|
<label class=""> </label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-long-img">
|
<span class="item-field-label-short">
|
||||||
<label class="">{{title}}</label>
|
<label class="item-field-label-short">Qty</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-long4">
|
<span class="item-field-label-long3">
|
||||||
|
<label class="item-field-label-long3">{{title}}</label>
|
||||||
|
</span>
|
||||||
|
<span class="item-field-label-long">
|
||||||
<label class="item-field-label-long4">Display</label>
|
<label class="item-field-label-long4">Display</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
@ -15,9 +18,16 @@
|
|||||||
<span class="item-field-label-short">
|
<span class="item-field-label-short">
|
||||||
<label class="item-field-label-short">Roll</label>
|
<label class="item-field-label-short">Roll</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="item-field-label-medium">
|
<span class="item-field-label-short">
|
||||||
<label class="item-field-label-medium">END</label>
|
<label class="item-field-label-short">END</label>
|
||||||
</span>
|
</span>
|
||||||
|
<span class="item-field-label-short">
|
||||||
|
<label class="item-field-label-short">Value</label>
|
||||||
|
</span>
|
||||||
|
<span class="item-field-label-short">
|
||||||
|
<label class="item-field-label-short">Weight</label>
|
||||||
|
</span>
|
||||||
|
<div class="item-filler"> </div>
|
||||||
<div class="item-controls item-controls-fixed">
|
<div class="item-controls item-controls-fixed">
|
||||||
<a class="item-control item-add" data-type="equipment" title="Create Item"><i class="fas fa-plus"></i></a>
|
<a class="item-control item-add" data-type="equipment" title="Create Item"><i class="fas fa-plus"></i></a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
<li class="item flexrow list-item list-item-shadow" data-item-id="{{equip._id}}">
|
<li class="item flexrow list-item list-item-shadow" data-item-id="{{equip._id}}">
|
||||||
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{equip.img}}" /></a>
|
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img" src="{{equip.img}}" /></a>
|
||||||
<span class="item-name-label">{{equip.name}}</span>
|
|
||||||
|
|
||||||
<span class="item-field-label-long4"><label>{{equip.system.displayname}}
|
<span class="item-field-label-short"><label>{{equip.system.quantity}}</label> </span>
|
||||||
|
|
||||||
|
<span class="item-field-label-long3">{{equip.name}}</span>
|
||||||
|
|
||||||
|
<span class="item-field-label-long"><label>{{equip.system.displayname}}
|
||||||
</label>
|
</label>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
@ -16,9 +19,11 @@
|
|||||||
<span class="item-field-label-short"> </span>
|
<span class="item-field-label-short"> </span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<span class="item-field-label-medium"><label>{{equip.system.endurance}}
|
<span class="item-field-label-short"><label>{{equip.system.endurance}}</label> </span>
|
||||||
</label>
|
|
||||||
</span>
|
<span class="item-field-label-short"><label>{{mul equip.system.quantity equip.system.value}}</label> </span>
|
||||||
|
|
||||||
|
<span class="item-field-label-short"><label>{{mul equip.system.quantity equip.system.weight}}</label> </span>
|
||||||
|
|
||||||
<div class="item-filler"> </div>
|
<div class="item-filler"> </div>
|
||||||
<div class="item-controls item-controls-fixed">
|
<div class="item-controls item-controls-fixed">
|
||||||
|
@ -1,26 +1,51 @@
|
|||||||
|
|
||||||
<li class="item stat flexrow list-item list-item-shadow" data-attr-key="{{key}}">
|
<li class="item stat flexrow list-item list-item-shadow" data-attr-key="{{key}}">
|
||||||
|
|
||||||
<input type="text" class="item-field-label-medium" name="system.characteristics.{{key}}.value" value="{{charac.value}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-medium" name="system.characteristics.{{key}}.value"
|
||||||
|
value="{{charac.value}}" data-dtype="Number" />
|
||||||
|
|
||||||
<span class="item-field-label-medium" name="{{key}}">
|
<span class="item-field-label-medium" name="{{key}}">
|
||||||
<h4 class="item-field-label-medium margin-item-list">{{charac.label}}</a></h4>
|
<h4 class="item-field-label-medium margin-item-list">{{charac.label}}</a></h4>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<h4 class="item-field-label-short margin-item-list">{{charac.base}}</h4>
|
<h4 class="item-field-label-short margin-item-list">{{charac.base}}</h4>
|
||||||
|
|
||||||
{{#if charac.hasroll}}
|
{{#if charac.hasroll}}
|
||||||
<h4 class="item-field-label-short margin-item-list"><a class="roll-charac" data-charac-key="{{key}}"><i class="fas fa-dice"></i>{{charac.roll}}-</a></h4>
|
<h4 class="item-field-label-short margin-item-list"><a class="roll-charac" data-charac-key="{{key}}"><i
|
||||||
|
class="fas fa-dice"></i>{{charac.roll}}-</a></h4>
|
||||||
{{else}}
|
{{else}}
|
||||||
<h4 class="item-field-label-short margin-item-list"> </h4>
|
<h4 class="item-field-label-short margin-item-list"> </h4>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<input type="text" class="item-field-label-long2" name="system.characteristics.{{key}}.notes" value="{{charac.notes}}" data-dtype="String"/>
|
<input type="text" class="item-field-label-long2" name="system.characteristics.{{key}}.notes" value="{{charac.notes}}"
|
||||||
|
data-dtype="String" />
|
||||||
|
|
||||||
{{#if charac.lift}}
|
{{#if charac.lift}}
|
||||||
|
<h4 class="item-field-label-short margin-item-list"> </h4>
|
||||||
|
<h4 class="item-field-label-short margin-item-list">{{charac.lift}}</h4>
|
||||||
|
<h4 class="item-field-label-medium margin-item-list"><a class="roll-lift-dice" data-charac-key="{{key}}"><i
|
||||||
|
class="fas fa-dice"></i>{{charac.liftDice}}</a></h4>
|
||||||
|
|
||||||
|
<select class="actor-computer-str-end" name="system.characteristics.str.strendmode"
|
||||||
|
value="{{charac.strendmode}}">
|
||||||
|
{{#select charac.strendmode}}
|
||||||
|
<option value="str20">STR/20 (half normal)</option>
|
||||||
|
<option value="str10">STR/10 (normal, half heroic)</option>
|
||||||
|
<option value="str5">STR/5 (heroic)</option>
|
||||||
|
<option value="0">0</option>
|
||||||
|
{{/select}}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if charac.phasesString}}
|
||||||
<h4 class="item-field-label-short margin-item-list"> </h4>
|
<h4 class="item-field-label-short margin-item-list"> </h4>
|
||||||
<h4 class="item-field-label-short margin-item-list">{{charac.lift}}</h4>
|
<h4 class="item-field-label-long2 margin-item-list">Phases : {{charac.phasesString}}</h4>
|
||||||
<h4 class="item-field-label-short margin-item-list"><a class="roll-lift-dice" data-charac-key="{{key}}"><i class="fas fa-dice"></i>{{charac.liftDice}}</a></h4>
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if charac.presenceattack}}
|
||||||
|
<h4 class="item-field-label-short margin-item-list"> </h4>
|
||||||
|
<h4 class="item-field-label-long margin-item-list">Presence attack</h4>
|
||||||
|
<a class="roll-direct" data-roll-source="Presence attack" data-roll-formula="{{charac.presenceattack.rollFormula}}"><i class="fas fa-dice"></i>{{charac.presenceattack.displayFormula}}</a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
</li>
|
</li>
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label class="generic-label">Notes</label>
|
<label class="generic-label">Notes</label>
|
||||||
<div class="medium-editor item-text-long-line">
|
<div class="small-editor item-text-long-line">
|
||||||
{{editor notes target="system.notes" button=true owner=owner editable=editable}}
|
{{editor notes target="system.notes" button=true owner=owner editable=editable}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<li class="flexrow"><label class="item-field-label-long">Type</label>
|
<li class="flexrow"><label class="item-field-label-long">Type</label>
|
||||||
<select class="item-field-label-long" type="text" name="system.petype" value="{{system.petype}}" data-dtype="String">
|
<select class="item-field-label-long" type="text" name="system.petype" value="{{system.petype}}" data-dtype="String">
|
||||||
{{#select system.petype}}
|
{{#select (lower system.petype)}}
|
||||||
{{#each config.powerEquipmentType as |name key|}}
|
{{#each config.powerEquipmentType as |name key|}}
|
||||||
<option value="{{key}}">{{name}}</option>
|
<option value="{{key}}">{{name}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<li class="flexrow"><label class="item-field-label-long">Type Modifier</label>
|
<li class="flexrow"><label class="item-field-label-long">Type Modifier</label>
|
||||||
<select class="item-field-label-long" type="text" name="system.typemodifier" value="{{system.typemodifier}}" data-dtype="String">
|
<select class="item-field-label-long" type="text" name="system.typemodifier" value="{{system.typemodifier}}" data-dtype="String">
|
||||||
{{#select system.typemodifier}}
|
{{#select (lower system.typemodifier)}}
|
||||||
{{#each config.powerTypeModifiers as |name key|}}
|
{{#each config.powerTypeModifiers as |name key|}}
|
||||||
<option value="{{key}}">{{name}}</option>
|
<option value="{{key}}">{{name}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
@ -31,6 +31,19 @@
|
|||||||
<li class="flexrow"><label class="item-field-label-long">Endurance</label>
|
<li class="flexrow"><label class="item-field-label-long">Endurance</label>
|
||||||
<input type="text" class="item-field-label-short" name="system.endurance" value="{{system.endurance}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-short" name="system.endurance" value="{{system.endurance}}" data-dtype="Number"/>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li class="flexrow"><label class="item-field-label-long">Has Charges ?</label>
|
||||||
|
<label class="item-field-label-medium"><input type="checkbox" name="system.hascharges" {{checked system.hascharges}}/></label>
|
||||||
|
</li>
|
||||||
|
{{#if system.hascharges}}
|
||||||
|
<li class="flexrow"><label class="item-field-label-long">Number of Charges</label>
|
||||||
|
<input type="text" class="item-field-label-short" name="system.nbcharges" value="{{system.nbcharges}}" data-dtype="Number"/>
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if quantityDone}}
|
||||||
|
{{else}}
|
||||||
<li class="flexrow"><label class="item-field-label-long">Quantity</label>
|
<li class="flexrow"><label class="item-field-label-long">Quantity</label>
|
||||||
<input type="text" class="item-field-label-short" name="system.quantity" value="{{system.quantity}}" data-dtype="Number"/>
|
<input type="text" class="item-field-label-short" name="system.quantity" value="{{system.quantity}}" data-dtype="Number"/>
|
||||||
</li>
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
Reference in New Issue
Block a user