This commit is contained in:
sladecraven 2022-03-06 20:07:41 +01:00
parent e321ba6ec2
commit 0ce493bc92
25 changed files with 735 additions and 327 deletions

BIN
images/icons/AGI.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
images/icons/COM.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
images/icons/DEF.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
images/icons/FOC.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
images/icons/MND.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
images/icons/MR.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
images/icons/Momentum.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
images/icons/PER.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
images/icons/PHY.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
images/icons/SOC.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
images/icons/STL.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
images/icons/STR.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -16,7 +16,7 @@ export class PegasusActorSheet extends ActorSheet {
return mergeObject(super.defaultOptions, { return mergeObject(super.defaultOptions, {
classes: ["fvtt-pegasus-rpg", "sheet", "actor"], classes: ["fvtt-pegasus-rpg", "sheet", "actor"],
template: "systems/fvtt-pegasus-rpg/templates/actor-sheet.html", template: "systems/fvtt-pegasus-rpg/templates/actor-sheet.html",
width: 640, width: 920,
height: 720, height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }], tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }], dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
@ -58,6 +58,10 @@ export class PegasusActorSheet extends ActorSheet {
role: duplicate(this.actor.getRole()), role: duplicate(this.actor.getRole()),
effects: duplicate(this.actor.getEffects()), effects: duplicate(this.actor.getEffects()),
moneys: duplicate(this.actor.getMoneys()), moneys: duplicate(this.actor.getMoneys()),
encCapacity: this.actor.getEncumbranceCapacity(),
containersTree: this.actor.containersTree,
encCurrent: this.actor.encCurrent,
encHindrance: this.actor.encHindrance,
options: this.options, options: this.options,
owner: this.document.isOwner, owner: this.document.isOwner,
editScore: this.options.editScore, editScore: this.options.editScore,
@ -180,6 +184,13 @@ export class PegasusActorSheet extends ActorSheet {
this.actor.incDecQuantity( li.data("item-id"), +1 ); this.actor.incDecQuantity( li.data("item-id"), +1 );
} ); } );
html.find('.momentum-minus').click(event => {
this.actor.modifyMomentum( -1 )
} )
html.find('.momentum-plus').click(event => {
this.actor.modifyMomentum( 1 )
} )
html.find('.unarmed-attack').click((event) => { html.find('.unarmed-attack').click((event) => {
this.actor.rollUnarmedAttack(); this.actor.rollUnarmedAttack();
}); });
@ -298,7 +309,11 @@ export class PegasusActorSheet extends ActorSheet {
/* -------------------------------------------- */ /* -------------------------------------------- */
async _onDropItem(event, dragData) { async _onDropItem(event, dragData) {
console.log(">>>>>> DROPPED!!!!")
let item = await PegasusUtility.searchItem( dragData) let item = await PegasusUtility.searchItem( dragData)
if (item == undefined) {
item = this.actor.items.get( dragData.data._id )
}
this.actor.preprocessItem( event, item, true ) this.actor.preprocessItem( event, item, true )
super._onDropItem(event, dragData) super._onDropItem(event, dragData)
} }

View File

@ -61,6 +61,8 @@ export class PegasusActor extends Actor {
if (this.type == 'character') { if (this.type == 'character') {
this.computeNRGHealth(); this.computeNRGHealth();
this.data.data.encCapacity = this.getEncumbranceCapacity()
this.buildContainerTree()
} }
super.prepareDerivedData(); super.prepareDerivedData();
@ -71,6 +73,12 @@ export class PegasusActor extends Actor {
super._preUpdate(changed, options, user); super._preUpdate(changed, options, user);
} }
/* -------------------------------------------- */
getEncumbranceCapacity() {
return this.data.data.statistics.str.value * 25
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getActivePerks() { getActivePerks() {
let perks = this.data.items.filter(item => item.type == 'perk' && item.data.data.active); let perks = this.data.items.filter(item => item.type == 'perk' && item.data.data.active);
@ -287,6 +295,63 @@ export class PegasusActor extends Actor {
return duplicate(this.data.items.filter(item => item.type == "equipment") || []) return duplicate(this.data.items.filter(item => item.type == "equipment") || [])
} }
/* ------------------------------------------- */
async buildContainerTree() {
let equipments = duplicate(this.data.items.filter(item => item.type == "equipment") || [] )
for (let equip1 of equipments) {
if ( equip1.data.iscontainer) {
equip1.data.contents = []
equip1.data.contentsEnc = 0
for (let equip2 of equipments) {
if ( equip1._id != equip2._id && equip2.data.containerid == equip1._id ) {
equip1.data.contents.push(equip2)
equip1.data.contentsEnc += equip2.data.weight
}
}
}
}
let enc = 0
for( let item of equipments) {
if (item.data.equipped) {
if ( item.data.iscontainer) {
enc += item.data.contentsEnc
} else {
enc += item.data.weight
}
}
}
this.encCurrent = enc
this.containersTree = equipments.filter( item => item.data.containerid == "") // Returns the root of equipements without container
// Manages slow effect
let overCapacity = Math.floor(this.encCurrent / this.getEncumbranceCapacity() )
this.encHindrance = Math.floor(this.encCurrent / this.getEncumbranceCapacity() )
//console.log("Capacity", overCapacity, this.encCurrent / this.getEncumbranceCapacity() )
let effect = this.data.items.find(item => item.type == "effect" && item.data.data.slow)
if (overCapacity >= 4 ) {
if ( !effect) {
effect = await PegasusUtility.getEffectFromCompendium("Slowed")
effect.data.slow = true
this.createEmbeddedDocuments('Item', [effect])
}
} else {
if (effect) {
this.deleteEmbeddedDocuments('Item', [effect.id])
}
}
}
/* -------------------------------------------- */
modifyMomentum( incDec) {
let momentum = duplicate(this.data.data.momentum)
momentum.value += incDec
if ( momentum.value >= 0 && momentum.value <= momentum.max ){
this.update( { 'data.momentum': momentum})
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
getActiveEffects(matching = it => true) { getActiveEffects(matching = it => true) {
let array = Array.from(this.getEmbeddedCollection("ActiveEffect").values()); let array = Array.from(this.getEmbeddedCollection("ActiveEffect").values());
@ -306,20 +371,50 @@ export class PegasusActor extends Actor {
return this.data.data.attributes[attrKey]; return this.data.data.attributes[attrKey];
} }
/* -------------------------------------------- */
async addObjectToContainer( itemId, containerId ) {
let container = this.data.items.find( item => item.id == containerId && item.data.data.iscontainer)
let object = this.data.items.find( item => item.id == itemId )
console.log("Found", container, object)
if ( container ) {
if ( object.data.data.iscontainer) {
ui.notifications.warn("Only 1 level of container allowed")
return
}
let alreadyInside = this.data.items.filter( item => item.data.data.containerid && item.data.data.containerid == containerId);
if ( alreadyInside.length >= container.data.data.containercapacity ) {
ui.notifications.warn("Container is already full !")
return
} else {
await this.updateEmbeddedDocuments( "Item", [{ _id: object.id, 'data.containerid':containerId }] )
}
} else if ( object && object.data.data.containerid) { // remove from container
console.log("Removeing: ", object)
await this.updateEmbeddedDocuments( "Item", [{ _id: object.id, 'data.containerid':"" }]);
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async preprocessItem(event, item, onDrop = false) { async preprocessItem(event, item, onDrop = false) {
console.log("Pre-process !!!", item)
if (item.data.type == 'race') { if (item.data.type == 'race') {
this.applyRace(item.data) this.applyRace(item.data)
} else if (item.data.type == 'ability') { } else if (item.data.type == 'ability') {
this.applyAbility(item.data, [], true) this.applyAbility(item.data, [], true)
if (!onDrop) { if (!onDrop) {
await this.createEmbeddedDocuments('Item', [item.data]) await this.createEmbeddedDocuments('Item', [item.data])
return
} }
} else { } else {
if (!onDrop) { if (!onDrop) {
await this.createEmbeddedDocuments('Item', [item.data]) await this.createEmbeddedDocuments('Item', [item.data])
return
} }
} }
let dropID = $(event.target).parents(".item").attr("data-item-id") // Only relevant if container drop
let objectID = item.id || item._id
this.addObjectToContainer( objectID, dropID )
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -343,7 +438,7 @@ export class PegasusActor extends Actor {
getSubActors() { getSubActors() {
let subActors = []; let subActors = [];
for (let id of this.data.data.subactors) { for (let id of this.data.data.subactors) {
subActors.push(duplicate(game.actors.get(id))); subActors.push( duplicate(game.actors.get(id)) )
} }
return subActors; return subActors;
} }
@ -879,6 +974,10 @@ export class PegasusActor extends Actor {
if (this.data.data.combat.hindrancedice > 0) { if (this.data.data.combat.hindrancedice > 0) {
effectsList.push({ label: "Health/Delirium Hindrance", type: "hindrance", applied: false, value: this.data.data.combat.hindrancedice }) effectsList.push({ label: "Health/Delirium Hindrance", type: "hindrance", applied: false, value: this.data.data.combat.hindrancedice })
} }
let overCapacity = Math.floor(this.encCurrent / this.getEncumbranceCapacity() )
if (overCapacity > 0 ) {
effectsList.push({ label: "Encumbrance Hindrance", type: "hindrance", applied: false, value: overCapacity })
}
let effects = this.data.items.filter(item => item.type == 'effect') let effects = this.data.items.filter(item => item.type == 'effect')
for (let effect of effects) { for (let effect of effects) {
effect = duplicate(effect) effect = duplicate(effect)
@ -962,6 +1061,7 @@ export class PegasusActor extends Actor {
rollData.statMod = rollData.stat.mod rollData.statMod = rollData.stat.mod
rollData.specList = this.getRelevantSpec(statKey) rollData.specList = this.getRelevantSpec(statKey)
rollData.selectedSpec = "0" rollData.selectedSpec = "0"
rollData.img = `systems/fvtt-pegasus-rpg/images/icons/${rollData.stat.abbrev}.webp`
} }
this.addEffects(rollData) this.addEffects(rollData)
@ -1044,6 +1144,7 @@ export class PegasusActor extends Actor {
rollData.specList = [spec] rollData.specList = [spec]
rollData.selectedSpec = spec._id rollData.selectedSpec = spec._id
rollData.specName = spec.name rollData.specName = spec.name
rollData.img = spec.img
rollData.specDicesLevel = spec.data.level rollData.specDicesLevel = spec.data.level
this.startRoll(rollData) this.startRoll(rollData)
} else { } else {
@ -1083,6 +1184,7 @@ export class PegasusActor extends Actor {
rollData.armor = armor rollData.armor = armor
rollData.title = `Armor : ${armor.name}` rollData.title = `Armor : ${armor.name}`
rollData.isResistance = true; rollData.isResistance = true;
rollData.img = armor.img
rollData.otherDicesLevel = armor.data.resistance rollData.otherDicesLevel = armor.data.resistance
this.startRoll(rollData); this.startRoll(rollData);
@ -1102,6 +1204,8 @@ export class PegasusActor extends Actor {
rollData.mode = "power" rollData.mode = "power"
rollData.power = power rollData.power = power
rollData.title = `Power : ${power.name}` rollData.title = `Power : ${power.name}`
rollData.img = power.img
this.startRoll(rollData); this.startRoll(rollData);
} else { } else {
ui.notifications.warn("Power not found !", powerId); ui.notifications.warn("Power not found !", powerId);

View File

@ -48,7 +48,7 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */ /* -------------------------------------------- */
game.socket.on("system.fvtt-pegasus-rpg", data => { game.socket.on("system.fvtt-pegasus-rpg", data => {
PegasusUtility.onSocketMesssage(data); PegasusUtility.onSocketMesssage(data)
}); });
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -38,6 +38,9 @@ export class PegasusUtility {
Handlebars.registerHelper('upper', function (text) { Handlebars.registerHelper('upper', function (text) {
return text.toUpperCase(); return text.toUpperCase();
}); });
Handlebars.registerHelper('lower', function (text) {
return text.toLowerCase()
});
Handlebars.registerHelper('upperFirst', function (text) { Handlebars.registerHelper('upperFirst', function (text) {
if (typeof text !== 'string') return text if (typeof text !== 'string') return text
return text.charAt(0).toUpperCase() + text.slice(1) return text.charAt(0).toUpperCase() + text.slice(1)
@ -65,6 +68,18 @@ export class PegasusUtility {
this.specs = specs.map(i => i.toObject()); this.specs = specs.map(i => i.toObject());
} }
/* -------------------------------------------- */
static async addItemDropToActor(actor, item) {
actor.preprocessItem("none", item, false)
let chatData = {
user: game.user.id,
rollMode: game.settings.get("core", "rollMode"),
whisper: [game.user.id].concat(ChatMessage.getWhisperRecipients('GM')),
content: `<div>The item ${item.name} has been dropped on the actor ${actor.name}</div`
}
ChatMessage.create(chatData);
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async dropItemOnToken(canvas, data) { static async dropItemOnToken(canvas, data) {
if (data.type != "Item") { if (data.type != "Item") {
@ -79,8 +94,11 @@ export class PegasusUtility {
if (x >= token.x && x <= (token.x + token.width) if (x >= token.x && x <= (token.x + token.width)
&& y >= token.y && y <= (token.y + token.height)) { && y >= token.y && y <= (token.y + token.height)) {
let item = await this.searchItem(data) let item = await this.searchItem(data)
token.actor.preprocessItem("none", item, false) if (game.user.isGM || token.actor.isOwner) {
console.log("Dropped !!!", item, token) this.addItemDropToActor(token.actor, item)
} else {
game.socket.emit("system.fvtt-pegasus-rpg", { name: "msg_gm_item_drop", data: { actorId: token.actor.id, itemId: item.id, isPack: item.pack } })
}
return return
} }
} }
@ -188,7 +206,9 @@ export class PegasusUtility {
'systems/fvtt-pegasus-rpg/templates/partial-options-level.html', 'systems/fvtt-pegasus-rpg/templates/partial-options-level.html',
'systems/fvtt-pegasus-rpg/templates/partial-options-range.html', 'systems/fvtt-pegasus-rpg/templates/partial-options-range.html',
'systems/fvtt-pegasus-rpg/templates/partial-options-equipment-types.html', 'systems/fvtt-pegasus-rpg/templates/partial-options-equipment-types.html',
'systems/fvtt-pegasus-rpg/templates/partial-equipment-effects.html' 'systems/fvtt-pegasus-rpg/templates/partial-equipment-effects.html',
'systems/fvtt-pegasus-rpg/templates/partial-actor-stat-block.html',
'systems/fvtt-pegasus-rpg/templates/partial-actor-status.html'
] ]
return loadTemplates(templatePaths); return loadTemplates(templatePaths);
} }
@ -196,7 +216,7 @@ export class PegasusUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static async getEffectFromCompendium(effectName) { static async getEffectFromCompendium(effectName) {
effectName = effectName.toLowerCase() effectName = effectName.toLowerCase()
let effect = game.items.find(item => item.data.type == 'effect' && item.name.toLowerCase() == effectName) let effect = game.items.contents.find(item => item.type == 'effect' && item.name.toLowerCase() == effectName)
if (!effect) { if (!effect) {
let effects = await this.loadCompendium('fvtt-pegasus.effect', item => item.name.toLowerCase() == effectName) let effects = await this.loadCompendium('fvtt-pegasus.effect', item => item.name.toLowerCase() == effectName)
let objs = effects.map(i => i.toObject()) let objs = effects.map(i => i.toObject())
@ -325,17 +345,6 @@ export class PegasusUtility {
} }
} }
/* -------------------------------------------- */
static clearDefenseState(defenderId) {
this.defenderStore[defenderId] = undefined;
}
/* -------------------------------------------- */
static storeDefenseState(rollData) {
game.socket.emit("system.fvtt-weapons-of-the-gods", {
name: "msg_update_defense_state", data: { defenderId: rollData.defenderId, rollId: rollData.rollId }
});
this.updateDefenseState(rollData.defenderId, rollData.rollId);
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static updateRollData(rollData) { static updateRollData(rollData) {
@ -358,13 +367,23 @@ export class PegasusUtility {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static onSocketMesssage(msg) { static async onSocketMesssage(msg) {
//console.log("SOCKET MESSAGE", msg.name, game.user.character.id, msg.data.defenderId); console.log("SOCKET MESSAGE", msg.name)
if (msg.name == "msg_update_defense_state") { if (msg.name == "msg_update_defense_state") {
this.updateDefenseState(msg.data.defenderId, msg.data.rollId); this.updateDefenseState(msg.data.defenderId, msg.data.rollId)
} }
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_item_drop" && game.user.isGM) {
let actor = game.actors.get( msg.data.actorId )
let item
if (msg.data.isPack) {
item = await fromUuid("Compendium." + msg.data.isPack + "." + msg.data.itemId)
} else {
item = game.items.get(msg.data.itemId)
}
this.addItemDropToActor( actor, item )
} }
} }
@ -503,9 +522,6 @@ export class PegasusUtility {
content: await renderTemplate(`systems/fvtt-pegasus-rpg/templates/chat-generic-result.html`, rollData) content: await renderTemplate(`systems/fvtt-pegasus-rpg/templates/chat-generic-result.html`, rollData)
}); });
if (rollData.defender) {
this.storeDefenseState(rollData);
}
// Init stuf // Init stuf
if (rollData.isInit) { if (rollData.isInit) {
let combat = game.combats.get(rollData.combatId) let combat = game.combats.get(rollData.combatId)
@ -543,11 +559,11 @@ export class PegasusUtility {
index = i; index = i;
} }
} }
let bestScore = (bestRoll * 10) + index; let bestScore = (bestRoll * 10) + index
rollData.bestScore = bestScore; rollData.bestScore = bestScore
rollData.finalScore = bestScore + rollData.negativeModifier + rollData.positiveModifier; rollData.finalScore = bestScore + rollData.negativeModifier + rollData.positiveModifier
this.saveRollData(rollData); this.saveRollData(rollData)
this.createChatWithRollMode(rollData.alias, { this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-weapons-of-the-gods/templates/chat-generic-result.html`, rollData) content: await renderTemplate(`systems/fvtt-weapons-of-the-gods/templates/chat-generic-result.html`, rollData)
@ -598,18 +614,19 @@ export class PegasusUtility {
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 = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
console.log("blindMessageToGM", chatGM); console.log("blindMessageToGM", chatGM);
game.socket.emit("system.fvtt-weapons-of-the-gods", { msg: "msg_gm_chat_message", data: chatGM }); game.socket.emit("system.fvtt-pegasus-rgp", { msg: "msg_gm_chat_message", data: chatGM });
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
static async searchItem(dataItem) { static async searchItem(dataItem) {
let item; let item
if (dataItem.pack) { if (dataItem.pack) {
item = await fromUuid("Compendium." + dataItem.pack + "." + dataItem.id); item = await fromUuid("Compendium." + dataItem.pack + "." + dataItem.id)
} else { } else {
item = game.items.get(dataItem.id) item = game.items.get(dataItem.id)
} }
return item; return item
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -1,5 +1,5 @@
/* ==================== (A) Fonts ==================== */ /* ==================== (A) Fonts ==================== */
:root { :root {
/* =================== 1. ACTOR SHEET FONT STYLES =========== */ /* =================== 1. ACTOR SHEET FONT STYLES =========== */
--window-header-title-font-size: 1.3rem; --window-header-title-font-size: 1.3rem;
@ -217,8 +217,9 @@ table {border: 1px solid #7a7971;}
-webkit-box-flex: 0; -webkit-box-flex: 0;
-ms-flex: 0 0 128px; -ms-flex: 0 0 128px;
flex: 0 0 128px; flex: 0 0 128px;
height: 128px;
width: 128px; width: 128px;
height: auto;
max-height:260px;
margin-right: 10px; margin-right: 10px;
object-fit: cover; object-fit: cover;
object-position: 50% 0; object-position: 50% 0;
@ -384,9 +385,26 @@ table {border: 1px solid #7a7971;}
.window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] { .window-app.sheet .window-content .sheet-header input[type="text"], .window-app.sheet .window-content .sheet-header input[type="number"], .window-app.sheet .window-content .sheet-header input[type="password"], .window-app.sheet .window-content .sheet-header input[type="date"], .window-app.sheet .window-content .sheet-header input[type="time"] {
color: rgba(36, 37, 37, 0.75); color: rgba(36, 37, 37, 0.75);
background: rgba(255, 255, 255, 0.05); background: rgba(245, 245, 241, 0.95);
border: 0 none; border: 1 none;
margin-bottom: 0.25rem; margin-bottom: 0.25rem;
margin-left: 2px;
}
.window-app.sheet .window-content .sheet-body input[type="text"], .window-app.sheet .window-content .sheet-body input[type="number"], .window-app.sheet .window-content .sheet-body input[type="password"], .window-app.sheet .window-content .sheet-body input[type="date"], .window-app.sheet .window-content .sheet-body input[type="time"] {
color: rgba(36, 37, 37, 0.75);
background: rgba(245, 245, 241, 0.95);
border: 1 none;
margin-bottom: 0.25rem;
margin-left: 2px;
}
.window-app.sheet .window-content .sheet-body select, .window-app.sheet .window-content .sheet-header select {
color: rgba(36, 37, 37, 0.75);
background: rgba(245, 245, 241, 0.95);
border: 1 none;
margin-bottom: 0.25rem;
margin-left: 2px;
} }
.window-app .window-content, .window-app.sheet .window-content .sheet-body{ .window-app .window-content, .window-app.sheet .window-content .sheet-body{
@ -522,6 +540,12 @@ ul, li {
padding: 0.125rem; padding: 0.125rem;
flex: 1 1 5rem; flex: 1 1 5rem;
} }
.list-item-shadow {
background:rgba(87, 60, 32, 0.35);
}
.list-item-shadow2 {
background:rgba(87, 60, 32, 0.25);
}
.item-display-show { .item-display-show {
display: block; display: block;
} }
@ -531,11 +555,9 @@ ul, li {
.conteneur-type { .conteneur-type {
background: rgb(200, 10, 100, 0.25); background: rgb(200, 10, 100, 0.25);
} }
.item-quantite { .item-quantite {
margin-left: 0.5rem; margin-left: 0.5rem;
} }
.list-item-margin1 { .list-item-margin1 {
margin-left: 1rem; margin-left: 1rem;
} }
@ -585,6 +607,7 @@ ul, li {
} }
.roll-dialog-label { .roll-dialog-label {
margin: 4px 0; margin: 4px 0;
min-width: 96px;
} }
.short-label { .short-label {
@ -884,6 +907,7 @@ ul, li {
background: rgba(220,220,210,0.75); background: rgba(220,220,210,0.75);
border: 2px solid #545469; border: 2px solid #545469;
} }
.chat-message .chat-icon { .chat-message .chat-icon {
border: 0; border: 0;
padding: 2px 6px 2px 2px; padding: 2px 6px 2px 2px;
@ -892,6 +916,23 @@ ul, li {
height: 64px; height: 64px;
} }
.stat-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width:32px;
max-height:32px;
width: auto;
height: auto;
}
.combat-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width:24px;
max-height:24px;
width: auto;
height: auto;
}
#sidebar-tabs { #sidebar-tabs {
flex: 0 0 32px; flex: 0 0 32px;
box-sizing: border-box; box-sizing: border-box;
@ -916,23 +957,6 @@ ul, li {
} }
/*#sidebar #sidebar-tabs i.fa-comments:before, #sidebar #sidebar-tabs i.fa-fist-raised:before, #sidebar #sidebar-tabs i.fa-users:before, #sidebar #sidebar-tabs i.fa-map:before, #sidebar #sidebar-tabs i.fa-suitcase:before, #sidebar #sidebar-tabs i.fa-book-open:before, #sidebar #sidebar-tabs i.fa-th-list:before, #sidebar #sidebar-tabs i.fa-music:before, #sidebar #sidebar-tabs i.fa-atlas:before, #sidebar #sidebar-tabs i.fa-cogs:before {content: "";}
#sidebar #sidebar-tabs i.fa-comments {background: url("img/ui/icon_sidebar_chat.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-fist-raised {background: url("img/ui/icon_sidebar_fight.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-users {background: url("img/ui/icon_sidebar_actor.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-map {background: url("img/ui/icon_sidebar_scene.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-suitcase {background: url("img/ui/icon_sidebar_item.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-book-open {background: url("img/ui/icon_sidebar_journal.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-th-list {background: url("img/ui/icon_sidebar_rolltable.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-music {background: url("img/ui/icon_sidebar_music.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-atlas {background: url("img/ui/icon_sidebar_compendium.svg") no-repeat;}
#sidebar #sidebar-tabs i.fa-cogs {background: url("img/ui/icon_sidebar_settings.svg") no-repeat;}
#combat #combat-controls {
box-shadow: inset 0 0 2rem rgba(0,0,0,0.5);
}
*/
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/* Control, Tool, hotbar & navigation */ /* Control, Tool, hotbar & navigation */
@ -1216,3 +1240,113 @@ ul, li {
height: 54px; height: 54px;
position:relative; position:relative;
} }
/* =================== 1. ACTOR SHEET FONT STYLES =========== *//*
Agility AGI: #02a41d Also Used for Ranged Damage
Mind MND: #a100fe
Social SOC: #fd7100
Strength STR: #5f3d00 Also Used For Melee Damage
Physique PHY: #990304 Also used For Damage Resistance
Combat COM: 0136ff Also Used for Melee Attack
Defence DEF: #88826a Also used in the Defence on Combat Tab
Stealth STL: #505050
Perception PER: #f9c801 Also Used for Ranged Damage
Focus FOC: #ff0084
*/
.color-class-agi,
.color-class-range {
background-color: #02a41d;
background: #02a41d;
}
.color-class-mnd {
background-color: #a100fe;
}
.color-class-soc {
background-color: #fd7100;
}
.color-class-str,
.color-class-meleedmg {
background-color: #5f3d00;
}
.color-class-phy,
.color-class-dmgres {
background-color: #990304;
}
.color-class-com,
.color-class-melee {
background-color: #0136ff;
}
.color-class-def,
.color-class-defence {
background-color: #88826a;
}
.color-class-stl {
background-color: #505050;
}
.color-class-per,
.color-class-ranged {
background-color: #f9c801;
}
.color-class-foc {
background-color: #ff0084;
}
.color-class-common {
background: rgba(185, 183, 40, 0.45);
}
.status-small-label {
font-size: 0.65rem;
}
.combat-button {
min-height: 26px;
max-height: 26px;
margin-top: 4px;
}
.no-grow {
flex-grow: 1;
max-width: 24px;
}
.status-col-name {
max-width: 48px;
}
.status-block {
max-width: 128px;
}
.momentum-block {
max-width: 128px;
justify-content: flex-start;
}
.stat-item {
flex-grow: 1;
justify-content: flex-start;
margin: 2px;
}
.stat-block {
min-width: 160px;
}
.stat-margin {
margin-left: 4px;
margin-top: 6px;
}
.combat-margin {
margin-left: 4px;
margin-top: 3px;
}
.stat-text-white {
color: white;
}
.item-stat-roll {
max-height: 42px;
}
.item-stat-roll select, .item-stat-roll input {
margin-top: 4px;
margin-right: 2px;
}
.table-momentum {
background: none;
border: 0;
}
.img-no-border {
max-width: 48px;
max-height: 48px;
border: 0;
}

60
styles/unused.html Normal file
View File

@ -0,0 +1,60 @@
{{!-- 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">&nbsp;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">&nbsp;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>

View File

@ -180,9 +180,9 @@
"styles": [ "styles": [
"styles/simple.css" "styles/simple.css"
], ],
"templateVersion": 81, "templateVersion": 86,
"title": "Pegasus RPG", "title": "Pegasus RPG",
"url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg", "url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg",
"version": "0.4.21", "version": "0.5.1",
"background" : "./images/ui/pegasus_welcome_page.webp" "background" : "./images/ui/pegasus_welcome_page.webp"
} }

View File

@ -41,13 +41,15 @@
"abbrev": "AGI", "abbrev": "AGI",
"level": 1, "level": 1,
"value": 1, "value": 1,
"mod": 0 "mod": 0,
"col": 1
}, },
"mnd":{ "mnd":{
"label": "Mind", "label": "Mind",
"abbrev": "MND", "abbrev": "MND",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 1,
"mod": 0 "mod": 0
}, },
"soc":{ "soc":{
@ -55,6 +57,7 @@
"abbrev": "SOC", "abbrev": "SOC",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 1,
"mod": 0 "mod": 0
}, },
"str":{ "str":{
@ -62,6 +65,7 @@
"abbrev": "STR", "abbrev": "STR",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 1,
"mod": 0 "mod": 0
}, },
"phy":{ "phy":{
@ -69,6 +73,7 @@
"abbrev": "PHY", "abbrev": "PHY",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 1,
"mod": 0 "mod": 0
}, },
"com":{ "com":{
@ -76,6 +81,7 @@
"abbrev": "COM", "abbrev": "COM",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 2,
"mod": 0 "mod": 0
}, },
"def":{ "def":{
@ -83,6 +89,7 @@
"abbrev": "DEF", "abbrev": "DEF",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 2,
"mod": 0 "mod": 0
}, },
"stl":{ "stl":{
@ -90,6 +97,7 @@
"abbrev": "STL", "abbrev": "STL",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 2,
"mod": 0 "mod": 0
}, },
"per":{ "per":{
@ -97,6 +105,7 @@
"abbrev": "PER", "abbrev": "PER",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 2,
"mod": 0 "mod": 0
}, },
"foc":{ "foc":{
@ -104,6 +113,7 @@
"abbrev": "FOC", "abbrev": "FOC",
"level": 1, "level": 1,
"value": 1, "value": 1,
"col": 2,
"mod": 0 "mod": 0
} }
}, },
@ -148,7 +158,7 @@
"max": 0 "max": 0
}, },
"stealthhealth": { "stealthhealth": {
"label": "Stealth Health", "label": "STL Health",
"type": "value", "type": "value",
"value": 0, "value": 0,
"ismax": true, "ismax": true,
@ -156,7 +166,7 @@
"max": 0 "max": 0
}, },
"socialhealth": { "socialhealth": {
"label": "Social Health", "label": "SOC Health",
"type": "value", "type": "value",
"value": 0, "value": 0,
"ismax": true, "ismax": true,
@ -371,6 +381,9 @@
"otherdice": false, "otherdice": false,
"effects": [], "effects": [],
"activated": false, "activated": false,
"iscontainer": false,
"containercapacity": 0,
"containerid": "",
"description":"" "description":""
}, },
"money" : { "money" : {

View File

@ -6,11 +6,66 @@
<div class="flexrow"> <div class="flexrow">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" /> <img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
<div class="flexcol"> <div class="flexcol">
<h1 class="charname"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexcol"> <h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexrow">
<div class="flexrow">
<div class="stat-item">
<ul>
{{#each data.statistics as |stat key|}}
{{#if (eq stat.col 1)}}
{{> systems/fvtt-pegasus-rpg/templates/partial-actor-stat-block.html stat=stat key=key}}
{{/if}}
{{/each}}
</ul>
</div>
</div> <div class="stat-item">
<ul>
{{#each data.statistics as |stat key|}}
{{#if (eq stat.col 2)}}
{{> systems/fvtt-pegasus-rpg/templates/partial-actor-stat-block.html stat=stat key=key}}
{{/if}}
{{/each}}
</ul>
</div>
<div class="stat-item status-block">
{{> systems/fvtt-pegasus-rpg/templates/partial-actor-status.html}}
</div>
<div class="stat-item momentum-block">
<div class="flexcol">
<label class="status-small-label"><strong>Momentum</strong></label>
<table class="table-momentum">
<tr>
<td>
<img class="img-no-border" src="systems/fvtt-pegasus-rpg/images/icons/Momentum.webp">
</td>
<td>
<a class="momentum-plus plus-minus-button">+</a>
<br>
<a class="momentum-minus plus-minus-button">-</a>
</td>
<tr>
<td colspan="2">
<label class="status-small-label">Cur&nbsp;&nbsp;&nbsp;Max</label><br>
<input type="text" class="padd-right status-small-label no-grow" name="data.momentum.value" value="{{data.momentum.value}}" data-dtype="Number"/>
<input type="text" class="padd-right status-small-label no-grow" name="data.momentum.max" value="{{data.momentum.max}}" data-dtype="Number"/>
</td>
</tr>
<tr>
<td>
<label class="status-small-label">Active NRG</label>
<input type="text" class="padd-right status-small-label no-grow" name="data.nrg.activated" value="{{data.nrg.activated}}" data-dtype="Number"/>
</td>
</tr>
</tr>
</table>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -19,10 +74,9 @@
{{!-- Sheet Tab Navigation --}} {{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary"> <nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="statistics">Statistics</a> <a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="specs">Specialisations</a> <a class="item" data-tab="specs">Specialisations</a>
<a class="item" data-tab="powers">Powers/Abilities</a> <a class="item" data-tab="powers">Powers/Abilities</a>
<a class="item" data-tab="combat">Combat</a>
<a class="item" data-tab="equipment">Equipment</a> <a class="item" data-tab="equipment">Equipment</a>
<a class="item" data-tab="biodata">Biography</a> <a class="item" data-tab="biodata">Biography</a>
</nav> </nav>
@ -30,220 +84,83 @@
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
{{!-- Carac Tab --}}
<div class="tab items" data-group="primary" data-tab="statistics">
<span><a class="lock-unlock-sheet"><img class="small-button-container"
src="systems/fvtt-weapons-of-the-gods/images/icons/{{#if editScore}}unlocked.svg{{else}}locked.svg{{/if}}"
alt="Unlocked/Locked">{{#if editScore}}Unlocked{{else}}Locked{{/if}}</a>
</span>
<div class="grid grid-2col">
<div class="">
<ul>
{{#each data.statistics as |stat key|}}
<li class="item flexrow list-item" data-attr-key="{{key}}">
<span class="stat-label flexrow" name="{{key}}">
<h4><a class="roll-stat" data-stat-key="{{key}}">{{stat.label}} [{{stat.abbrev}}]</a></h4></span>
<select class=" carac-base flexrow" type="text" name="data.statistics.{{key}}.value"
value="{{stat.value}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}>
{{#select stat.value}}
{{{@root.optionsDiceList}}}
{{/select}}
</select>
<input type="text" class="input-numeric-short padd-right" name="data.statistics.{{key}}.mod"
value="{{stat.mod}}" data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}} />
</li>
{{/each}}
</ul>
<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"><span>&nbsp;</span><span>Current</span><span>Bonus</span><span>Max</span></li>
<li class="item flexrow list-item"></li>
<li class="item flexrow list-item"></li>
{{#each data.secondary as |stat2 key|}}
<li class="item flexrow list-item" data-attr-key="{{key}}">
<span class="stat-label flexrow" name="{{key}}">
<h4>{{stat2.label}}<br>
{{#if (eq key "health")}}
(KOV -{{stat2.max}})
{{/if}}
{{#if (eq key "delirium")}}
(MV -{{stat2.max}})
{{/if}}
</h4>
</span>
<input type="text" class="padd-right" name="data.secondary.{{key}}.value" value="{{stat2.value}}" data-dtype="Number"/>
<input type="text" class="padd-right" name="data.secondary.{{key}}.bonus" value="{{stat2.bonus}}" data-dtype="Number"/>
<input type="text" class="padd-right" name="data.secondary.{{key}}.max" value="{{stat2.max}}" data-dtype="Number"/>
</li>
{{/each}}
</ul>
<ul>
<li class="item flexrow list-item" data-key="nrg">
<span class="stat-label flexrow" name="nrg"> <h4>{{data.nrg.label}}</h4> </span>
<span class="small-label padd-right packed-left">Act</span>
<input type="text" class="padd-right" name="data.nrg.activated" value="{{data.nrg.activated}}" data-dtype="Number"/>
<span class="small-label padd-right packed-left">&nbsp;Cur</span><input type="text" class="padd-right" name="data.nrg.value" value="{{data.nrg.value}}" data-dtype="Number"/>
<span class="small-label padd-right packed-left">&nbsp;Mod</span><input type="text" class="padd-right" name="data.nrg.mod" value="{{data.nrg.mod}}" data-dtype="Number"/>
<span class="small-label padd-right packed-left">&nbsp;Max</span><input type="text" class="padd-right" name="data.nrg.max" value="{{data.nrg.max}}" data-dtype="Number"/>
<span class="small-label padd-right packed-left"> / {{data.nrg.absolutemax}}</span>
</li>
</ul>
<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>
{{!-- Other Tab --}}
<div class="tab items" data-group="primary" data-tab="specs">
<div>
<span class="generic-label">
<h3>Specialisations</h3>
</span>
<ul class="stat-list alternate-list">
{{#each specs as |spec key|}}
<li class="item stat flexrow list-item" data-item-id="{{spec._id}}">
<img class="sheet-competence-img" src="{{spec.img}}" />
<span class="stat-label"><a class="roll-spec">{{spec.name}}</a></span>
<span class="stat-label">{{upper spec.data.statistic}}</span>
<span class="stat-label">{{spec.data.dice}}</span>
{{#if spec.data.ispowergroup}}
{{#if spec.data.powersactivated}}
<span class="stat-label"><a class="spec-group-deactivate">Deactivate</a></span>
{{else}}
<span class="stat-label"><a class="spec-group-activate">Activate</a></span>
{{/if}}
{{else}}
<span class="stat-label">&nbsp;</span>
{{/if}}
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Combat Tab --}} {{!-- Combat Tab --}}
<div class="tab fight" data-group="primary" data-tab="combat"> <div class="tab fight" data-group="primary" data-tab="combat">
<div class="flexcol"> <div class="flexcol">
<ul> <div class="flexrow">
<li class="item flexrow list-item" data-key="mr"> <div>
<span class="stat-label flexrow" name="mr"> <ul class="stat-item">
<a class="roll-mr" data-stat-key="{{mr}}"><h4>{{data.mr.label}}</h4></a> <li class="item flexrow list-item color-class-melee"><a class="combat-button attack-melee flexrow">
</span> <span class="combat-icon flexrow">
<select class="carac-base flexrow" type="text" name="data.mr.value" value="{{data.mr.value}}" <img class="combat-icon" src="systems/fvtt-pegasus-rpg/images/icons/COM.webp">
data-dtype="Number" > </span>
{{#select data.mr.value}} <span class="generic-label combat-margin stat-text-white">Melee Attack</span>
{{{@root.optionsDiceList}}} </a>
{{/select}} </li>
</select> <li class="item flexrow list-item color-class-meleedmg"><a class="combat-button damage-melee flexrow">
<input type="text" class="padd-right input-numeric-short" name="data.mr.mod" value="{{data.mr.mod}}" data-dtype="Number"/> <span class="combat-icon flexrow">
</li> <img class="combat-icon" src="systems/fvtt-pegasus-rpg/images/icons/STR.webp">
</span>
<li class="item flexrow list-item" data-key="nrg"> <span class="generic-label combat-margin stat-text-white">Melee/Thrown Damage</span>
<span class="stat-label flexrow" name="nrg"><h4>{{data.nrg.label}}</h4> </span> </a>
<span class="small-label padd-right packed-left">Act</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.nrg.activated" value="{{data.nrg.activated}}" data-dtype="Number"/> </li>
<span class="small-label padd-right packed-left">&nbsp;Cur</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.nrg.value" value="{{data.nrg.value}}" data-dtype="Number"/> </ul>
<span class="small-label padd-right packed-left">&nbsp;Mod</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.nrg.mod" value="{{data.nrg.mod}}" data-dtype="Number"/>
<span class="small-label padd-right packed-left">&nbsp;Max</span><input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.nrg.max" value="{{data.nrg.max}}" data-dtype="Number"/>
<span class="small-label padd-right packed-left"> / {{data.nrg.absolutemax}}</span>
</li>
<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">&nbsp;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">&nbsp;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>
</ul>
<span class="generic-label">
<h3>Combat Dice Pools</h3>
</span>
<ul class="stat-list alternate-list">
<li class="item stat flexrow list-item">
<span class="generic-label"><a class="attack-melee"><button class="chat-card-button">Melee Attack</button></a></span>
<span class="generic-label"><a class="attack-ranged"><button class="chat-card-button">Ranged Attack</button></a></span>
<span class="generic-label"><a class="damage-ranged"><button class="chat-card-button">Ranged Damage</button></a></span>
</li>
<li class="item stat flexrow list-item">
<span class="generic-label"><a class="damage-melee"><button class="chat-card-button">Melee/Thrown Damage</button></a></span>
<span class="generic-label"><a class="defense-roll"><button class="chat-card-button">Defence</button></a></span>
<span class="generic-label"><a class="damage-resistance"><button class="chat-card-button">Damage Resistance</button></a></span>
</li>
<li class="item stat flexrow list-item">
<span class="generic-label"></span>
<span class="generic-label"><a class="generic-pool-roll"><button class="chat-card-button">Dice Pool</button></a></span>
<span class="generic-label"></span>
</li>
</ul>
<span class="generic-label">
<h3>Stun</h3>
</span>
<ul class="stat-list alternate-list">
<li class="item stat flexrow list-item">
<span class="generic-label">Stun Level</span>
<input type="text" class="" name="data.combat.stunlevel" value="{{data.combat.stunlevel}}" data-dtype="Number" />
<span class="generic-label">Stun Threshold</span>
<input type="text" class="" name="data.combat.stunthreshold" value="{{data.combat.stunthreshold}}" data-dtype="Number" />
</li>
</ul>
<span class="generic-label">
<h3>Effects</h3>
</span>
<ul class="stat-list alternate-list">
{{#each effects as |effect key|}}
<li class="item stat flexrow list-item" data-arme-id="{{effect.id}}" data-item-id="{{effect._id}}">
<img class="sheet-competence-img" src="{{effect.img}}" />
<span class="generic-label">{{effect.name}}</span>
<span class="generic-label">{{upperFirst effect.data.type}}</span>
<span class="generic-label">{{upperFirst effect.data.genre}}</span>
<span class="generic-label">Lvl:{{effect.data.effectlevel}}</span>
<span class="generic-label">{{upper effect.data.stataffected}}</span>
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div> </div>
</li>
{{/each}} <div class="stat-item">
</ul> <ul class="stat-list alternate-list">
<li class="item flexrow list-item color-class-ranged"><a class="combat-button attack-ranged flexrow">
<span class="combat-icon flexrow">
<img class="combat-icon" src="systems/fvtt-pegasus-rpg/images/icons/PER.webp">
</span>
<span class="generic-label combat-margin stat-text-white">Ranged Attack</span>
</a>
</li>
<li class="item flexrow list-item color-class-range"><a class="combat-button damage-ranged flexrow">
<span class="combat-icon flexrow">
<img class="combat-icon" src="systems/fvtt-pegasus-rpg/images/icons/AGI.webp">
</span>
<span class="generic-label combat-margin stat-text-white">Ranged Damage</span>
</a>
</li>
</ul>
</div>
<div class="stat-item">
<ul class="stat-list alternate-list">
<li class="item flexrow list-item color-class-defence"><a class="combat-button defense-roll flexrow">
<span class="combat-icon flexrow">
<img class="combat-icon" src="systems/fvtt-pegasus-rpg/images/icons/DEF.webp">
</span>
<span class="generic-label combat-margin stat-text-white">Defence</span>
</a>
</li>
<li class="item flexrow list-item color-class-dmgres"><a class="combat-button damage-resistance flexrow">
<span class="combat-icon flexrow">
<img class="combat-icon" src="systems/fvtt-pegasus-rpg/images/icons/PHY.webp">
</span>
<span class="generic-label combat-margin stat-text-white">Damage Resistance</span>
</a>
</li>
</ul>
</div>
<div class="stat-item">
<span class="generic-label">
<h3>Stun</h3>
</span>
<ul class="stat-list alternate-list">
<li class="item stat flexrow list-item">
<span class="generic-label">Stun Level</span>
<input type="text" class="" name="data.combat.stunlevel" value="{{data.combat.stunlevel}}" data-dtype="Number" />
<span class="generic-label">Stun Threshold</span>
<input type="text" class="" name="data.combat.stunthreshold" value="{{data.combat.stunthreshold}}" data-dtype="Number" />
</li>
</ul>
</div>
</div>
<div> <div>
<span class="generic-label"> <span class="generic-label">
@ -251,7 +168,7 @@
</span> </span>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
{{#each perks as |perk key|}} {{#each perks as |perk key|}}
<li class="item stat flexrow list-item" data-item-id="{{perk._id}}"> <li class="item stat flexrow list-item list-item-shadow" data-item-id="{{perk._id}}">
<img class="sheet-competence-img" src="{{perk.img}}" /> <img class="sheet-competence-img" src="{{perk.img}}" />
<span class="stat-label">{{perk.name}}</span> <span class="stat-label">{{perk.name}}</span>
<span class="stat-label">Lvl:{{perk.data.level}}</span> <span class="stat-label">Lvl:{{perk.data.level}}</span>
@ -306,10 +223,67 @@
{{/each}} {{/each}}
</ul> </ul>
</div> </div>
<div>
<h3>Effects</h3>
</div>
<ul class="stat-list alternate-list">
{{#each effects as |effect key|}}
<li class="item stat flexrow list-item list-item-shadow" data-arme-id="{{effect.id}}" data-item-id="{{effect._id}}">
<img class="sheet-competence-img" src="{{effect.img}}" />
<span class="generic-label">{{effect.name}}</span>
<span class="generic-label">{{upperFirst effect.data.type}}</span>
<span class="generic-label">{{upperFirst effect.data.genre}}</span>
<span class="generic-label">Lvl:{{effect.data.effectlevel}}</span>
<span class="generic-label">{{upper effect.data.stataffected}}</span>
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div> </div>
</div> </div>
{{!-- Other Tab --}}
<div class="tab items" data-group="primary" data-tab="specs">
<div>
<span class="generic-label">
<h3>Specialisations</h3>
</span>
<ul class="stat-list alternate-list">
{{#each specs as |spec key|}}
<li class="item stat flexrow list-item list-item-shadow" data-item-id="{{spec._id}}">
<img class="sheet-competence-img" src="{{spec.img}}" />
<span class="stat-label"><a class="roll-spec">{{spec.name}}</a></span>
<span class="stat-label">{{upper spec.data.statistic}}</span>
<span class="stat-label">{{spec.data.dice}}</span>
{{#if spec.data.ispowergroup}}
{{#if spec.data.powersactivated}}
<span class="stat-label"><a class="spec-group-deactivate">Deactivate</a></span>
{{else}}
<span class="stat-label"><a class="spec-group-activate">Activate</a></span>
{{/if}}
{{else}}
<span class="stat-label">&nbsp;</span>
{{/if}}
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{!-- Powers Tab --}} {{!-- Powers Tab --}}
<div class="tab fight" data-group="primary" data-tab="powers"> <div class="tab fight" data-group="primary" data-tab="powers">
@ -326,13 +300,12 @@
</li> </li>
</ul> </ul>
<hr>
<span class="generic-label"> <span class="generic-label">
<h3>Powers</h3> <h3>Powers</h3>
</span> </span>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
{{#each powers as |power key|}} {{#each powers as |power key|}}
<li class="item stat flexrow list-item" data-item-id="{{power._id}}"> <li class="item stat flexrow list-item list-item-shadow" data-item-id="{{power._id}}">
<img class="sheet-competence-img" src="{{power.img}}" /> <img class="sheet-competence-img" src="{{power.img}}" />
<span class="stat-label"> <span class="stat-label">
{{#if power.data.rollneeded}} {{#if power.data.rollneeded}}
@ -369,13 +342,12 @@
{{/each}} {{/each}}
</ul> </ul>
<hr>
<span class="generic-label"> <span class="generic-label">
<h3>Abilities</h3> <h3>Abilities</h3>
</span> </span>
<ul class="stat-list alternate-list"> <ul class="stat-list alternate-list">
{{#each abilities as |ability key|}} {{#each abilities as |ability key|}}
<li class="item stat flexrow list-item" data-item-id="{{ability._id}}"> <li class="item stat flexrow list-item list-item-shadow" data-item-id="{{ability._id}}">
<img class="sheet-competence-img" src="{{ability.img}}" /> <img class="sheet-competence-img" src="{{ability.img}}" />
<span class="stat-label">{{ability.name}}</span> <span class="stat-label">{{ability.name}}</span>
<div class="item-controls"> <div class="item-controls">
@ -391,13 +363,20 @@
{{!-- Equipement Tab --}} {{!-- Equipement Tab --}}
<div class="tab equipment" data-group="primary" data-tab="equipment"> <div class="tab equipment" data-group="primary" data-tab="equipment">
<div class="flexrow">
<h3>Encumbrance</h3>
<span class="small-label">Current : {{encCurrent}}</span>
<span class="small-label">Capacity : {{encCapacity}}</span>
<span class="small-label">Hindrance : {{encHindrance}}</span>
</div>
<div> <div>
<h4>Money</h4> <h3>Money</h3>
</div> </div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
{{#each moneys as |money key|}} {{#each moneys as |money key|}}
<li class="item flexrow list-item" data-item-id="{{money._id}}"> <li class="item flexrow list-item list-item-shadow" data-item-id="{{money._id}}">
<img class="sheet-competence-img" src="{{money.img}}" /> <img class="sheet-competence-img" src="{{money.img}}" />
<span class="equipement-label">{{money.name}}</span> <span class="equipement-label">{{money.name}}</span>
<span class="generic-label"> <span class="generic-label">
@ -412,46 +391,12 @@
{{/each}} {{/each}}
</ul> </ul>
<hr>
<div> <div>
<h4>Equipment</h4> <h3>Weapons</h3>
</div>
<ul class="item-list alternate-list">
{{#each equipments as |equip key|}}
<li class="item flexrow list-item" data-item-id="{{equip._id}}">
<img class="sheet-competence-img" src="{{equip.img}}" />
<span class="equipement-label">{{equip.name}}</span>
<span class="equipement-label">{{upperFirst equip.data.type}}</span>
<span class="generic-label">Qty {{equip.data.quantity}}</span>
{{#if (count equip.data.effects)}}
{{#if equip.data.activated}}
<span class="stat-label"><a class="equip-deactivate">Deactivate</a></span>
{{else}}
<span class="stat-label"><a class="equip-activate">Activate</a></span>
{{/if}}
{{else}}
<span class="stat-label">&nbsp;</span>
{{/if}}
<span class="generic-label">Qty {{equip.data.quantity}}</span>
<div class="item-controls">
<a class="item-control item-equip" title="Worn">{{#if equip.data.equipped}}<i
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
<hr>
<div>
<h4>Weapons</h4>
</div> </div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
{{#each weapons as |weapon key|}} {{#each weapons as |weapon key|}}
<li class="item flexrow list-item" data-item-id="{{weapon._id}}"> <li class="item flexrow list-item list-item-shadow" data-item-id="{{weapon._id}}">
<img class="sheet-competence-img" src="{{weapon.img}}" /> <img class="sheet-competence-img" src="{{weapon.img}}" />
<span class="equipement-label">{{weapon.name}}</span> <span class="equipement-label">{{weapon.name}}</span>
@ -475,13 +420,12 @@
{{/each}} {{/each}}
</ul> </ul>
<hr>
<div> <div>
<h4>Armors & Shields</h4> <h3>Armors & Shields</h3>
</div> </div>
<ul class="item-list alternate-list"> <ul class="item-list alternate-list">
{{#each armors as |armor key|}} {{#each armors as |armor key|}}
<li class="item flexrow list-item" data-item-id="{{armor._id}}"> <li class="item flexrow list-item list-item-shadow" data-item-id="{{armor._id}}">
<img class="sheet-competence-img" src="{{armor.img}}" /> <img class="sheet-competence-img" src="{{armor.img}}" />
<span class="equipement-label">{{armor.name}}</span> <span class="equipement-label">{{armor.name}}</span>
@ -528,6 +472,65 @@
{{/each}} {{/each}}
</ul> </ul>
<div>
<h3>Equipment</h3>
</div>
<ul class="item-list alternate-list">
{{#each containersTree as |equip key|}}
<li class="item flexrow list-item list-item-shadow" data-item-id="{{equip._id}}">
<img class="sheet-competence-img" src="{{equip.img}}" />
<span class="equipement-label">{{equip.name}}</span>
<span class="equipement-label">{{upperFirst equip.data.type}}</span>
<span class="generic-label">Qty {{equip.data.quantity}}</span>
{{#if (count equip.data.effects)}}
{{#if equip.data.activated}}
<span class="stat-label"><a class="equip-deactivate">Deactivate</a></span>
{{else}}
<span class="stat-label"><a class="equip-activate">Activate</a></span>
{{/if}}
{{else}}
<span class="stat-label">&nbsp;</span>
{{/if}}
{{#if equip.data.iscontainer}}
<span class="equipement-label">Enc:{{equip.data.contentsEnc}}</span>
{{/if}}
<div class="item-controls">
<a class="item-control item-equip" title="Worn">{{#if equip.data.equipped}}<i
class="fas fa-circle"></i>{{else}}<i class="fas fa-genderless"></i>{{/if}}</a>
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
</li>
<ul class="item-list alternate-list list-item-shadow2 list-item-margin1">
{{#each equip.data.contents as |subgear key|}}
<li class="item flexrow list-item" data-item-id="{{subgear._id}}">
<img class="sheet-competence-img" src="{{subgear.img}}"/>
<span class="conseq-label">{{subgear.name}}</span>
<span class="equipement-label">{{upperFirst subgear.data.type}}</span>
<span class="generic-label">Qty {{subgear.data.quantity}}</span>
{{#if (count subgear.data.effects)}}
{{#if subgear.data.activated}}
<span class="stat-label"><a class="equip-deactivate">Deactivate</a></span>
{{else}}
<span class="stat-label"><a class="equip-activate">Activate</a></span>
{{/if}}
{{else}}
<span class="stat-label">&nbsp;</span>
{{/if}}
<div class="item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
{{/each}}
</ul>
{{/each}}
</ul>
<hr>
</div> </div>
{{!-- Biography Tab --}} {{!-- Biography Tab --}}

View File

@ -54,6 +54,14 @@
<li class="flexrow"><label class="generic-label">Weight</label> <li class="flexrow"><label class="generic-label">Weight</label>
<input type="text" class="input-numeric-short padd-right" name="data.weight" value="{{data.weight}}" data-dtype="Number"/> <input type="text" class="input-numeric-short padd-right" name="data.weight" value="{{data.weight}}" data-dtype="Number"/>
</li> </li>
<li class="flexrow"><label class="generic-label">Is a container ?</label>
<label class="attribute-value checkbox"><input type="checkbox" name="data.iscontainer" {{checked data.iscontainer}}/></label>
</li>
{{#if data.iscontainer}}
<li class="flexrow"><label class="generic-label">Container capacity</label>
<input type="text" class="input-numeric-short padd-right" name="data.containercapacity" value="{{data.containercapacity}}" data-dtype="Number"/>
</li>
{{/if}}
<li class="flexrow"><label class="generic-label">Cost</label> <li class="flexrow"><label class="generic-label">Cost</label>
<input type="text" class="input-numeric-short padd-right" name="data.cost" value="{{data.cost}}" data-dtype="Number"/> <input type="text" class="input-numeric-short padd-right" name="data.cost" value="{{data.cost}}" data-dtype="Number"/>
</li> </li>

View File

@ -0,0 +1,16 @@
<li class="item flexrow list-item color-class-{{lower stat.abbrev}} item-stat-roll" data-attr-key="{{key}}">
<span class="stat-icon">
<img class="stat-icon" src="systems/fvtt-pegasus-rpg/images/icons/{{stat.abbrev}}.webp">
</span>
<span class="stat-label stat-margin" name="{{key}}">
<h4 class="stat-text-white"><a class="roll-stat" data-stat-key="{{key}}">{{stat.abbrev}}</a></h4>
</span>
<select class="status-small-label color-class-common" type="text" name="data.statistics.{{key}}.value" value="{{stat.value}}"
data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}}>
{{#select stat.value}}
{{{@root.optionsDiceList}}}
{{/select}}
</select>
<input type="text" class="input-numeric-short padd-right status-small-label color-class-common" name="data.statistics.{{key}}.mod" value="{{stat.mod}}"
data-dtype="Number" {{#unless @root.editScore}}disabled{{/unless}} />
</li>

View File

@ -0,0 +1,37 @@
<ul class="status-block">
<li class="item flexrow list-item">
<span class="status-small-label status-col-name"><strong>Status</strong></span>
<span class="status-small-label no-grow">Cur</span>
<span class="status-small-label no-grow">Max</span>
<span class="status-small-label no-grow">Mod</span>
</li>
{{#each data.secondary as |stat2 key|}}
<li class="item flexrow list-item" data-attr-key="{{key}}">
<span class="stat-label flexrow status-col-name" name="{{key}}">
<label class="status-small-label"><strong>{{stat2.label}}</strong><br>
{{#if (eq key "health")}}
(KOV -{{stat2.max}})
{{/if}}
{{#if (eq key "delirium")}}
(MV -{{stat2.max}})
{{/if}}
</label>
</span>
<input type="text" class="padd-right status-small-label no-grow" name="data.secondary.{{key}}.value" value="{{stat2.value}}" data-dtype="Number"/>
<input type="text" class="padd-right status-small-label no-grow" name="data.secondary.{{key}}.max" value="{{stat2.max}}" data-dtype="Number"/>
<input type="text" class="padd-right status-small-label no-grow" name="data.secondary.{{key}}.bonus" value="{{stat2.bonus}}" data-dtype="Number"/>
</li>
{{/each}}
<li class="item flexrow list-item" data-key="nrg">
<span class="stat-label flexrow status-col-name" name="nrg">
<label class="status-small-label"><strong>{{data.nrg.label}}</strong></label>
</span>
<input type="text" class="padd-right status-small-label no-grow" name="data.nrg.value" value="{{data.nrg.value}}" data-dtype="Number"/>
<input type="text" class="padd-right status-small-label no-grow" name="data.nrg.max" value="{{data.nrg.max}}" data-dtype="Number"/>
<input type="text" class="padd-right status-small-label no-grow" name="data.nrg.mod" value="{{data.nrg.mod}}" data-dtype="Number"/>
</li>
</ul>
<!-- <span class="small-label padd-right packed-left">Act</span>
<input type="text" class="padd-right" name="data.nrg.activated" value="{{data.nrg.activated}}" data-dtype="Number"/>
-->

View File

@ -23,8 +23,8 @@
{{#if specList}} {{#if specList}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label" >Spec Name : </span> <span class="roll-dialog-label" >Spec : </span>
<select class="competence-base" id="specList" type="text" name="selectedSpec" value="{{selectedSpec}}" data-dtype="String"> <select class="roll-dialog-label" id="specList" type="text" name="selectedSpec" value="{{selectedSpec}}" data-dtype="String">
{{#select selectedSpec}} {{#select selectedSpec}}
<option value="0">None</option> <option value="0">None</option>
{{#each specList as |spec idx|}} {{#each specList as |spec idx|}}
@ -35,6 +35,7 @@
<span class="small-label">&nbsp;</span> <span class="small-label">&nbsp;</span>
</div> </div>
{{/if}} {{/if}}
<div class="flexrow"> <div class="flexrow">
<span class="roll-dialog-label" >Spec Dice : </span> <span class="roll-dialog-label" >Spec Dice : </span>
<select class="roll-dialog-label" id="specDicesLevel" type="text" name="specDicesLevel" value="{{specDicesLevel}}" data-dtype="Number" <select class="roll-dialog-label" id="specDicesLevel" type="text" name="specDicesLevel" value="{{specDicesLevel}}" data-dtype="Number"