Step 4 - Hindrance on health/delirium

This commit is contained in:
sladecraven 2022-02-10 15:53:42 +01:00
parent f590e1fe6a
commit 0a5e52ec4e
12 changed files with 181 additions and 100 deletions

View File

@ -5,6 +5,7 @@
import { PegasusUtility } from "./pegasus-utility.js"; import { PegasusUtility } from "./pegasus-utility.js";
import { PegasusItemSheet } from "./pegasus-item-sheet.js"; import { PegasusItemSheet } from "./pegasus-item-sheet.js";
import { PegasusRollDialog } from "./pegasus-roll-dialog.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
export class PegasusActorSheet extends ActorSheet { export class PegasusActorSheet extends ActorSheet {
@ -68,6 +69,17 @@ export class PegasusActorSheet extends ActorSheet {
return formData; return formData;
} }
/* -------------------------------------------- */
async openGenericRoll() {
let rollData = PegasusUtility.getBasicRollData()
rollData.alias = "Dice Pool Roll",
rollData.mode = "generic"
rollData.title = `Dice Pool Roll`;
let rollDialog = await PegasusRollDialog.create( this.actor, rollData);
rollDialog.render( true );
}
/* -------------------------------------------- */ /* -------------------------------------------- */
/** @override */ /** @override */
activateListeners(html) { activateListeners(html) {
@ -76,6 +88,10 @@ export class PegasusActorSheet extends ActorSheet {
// Everything below here is only needed if the sheet is editable // Everything below here is only needed if the sheet is editable
if (!this.options.editable) return; if (!this.options.editable) return;
html.bind("keydown", function(e) { // Ignore Enter in actores sheet
if (e.keyCode === 13) return false;
});
// Update Inventory Item // Update Inventory Item
html.find('.item-edit').click(ev => { html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item"); const li = $(ev.currentTarget).parents(".item");
@ -120,6 +136,9 @@ export class PegasusActorSheet extends ActorSheet {
html.find('.unarmed-attack').click((event) => { html.find('.unarmed-attack').click((event) => {
this.actor.rollUnarmedAttack(); this.actor.rollUnarmedAttack();
}); });
html.find('.generic-pool-roll').click((event) => {
this.openGenericRoll()
} );
html.find('.attack-melee').click((event) => { html.find('.attack-melee').click((event) => {
this.actor.rollPool( 'com'); this.actor.rollPool( 'com');
}); });
@ -227,6 +246,7 @@ export class PegasusActorSheet extends ActorSheet {
async _onDropItem(event, dragData) { async _onDropItem(event, dragData) {
let item = await PegasusUtility.searchItem( dragData) let item = await PegasusUtility.searchItem( dragData)
this.actor.preprocessItem( event, item, true ) this.actor.preprocessItem( event, item, true )
super._onDropItem(event, dragData)
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -66,10 +66,6 @@ export class PegasusActor extends Actor {
for (let key in this.data.data.statistics) { for (let key in this.data.data.statistics) {
let attr = this.data.data.statistics[key]; let attr = this.data.data.statistics[key];
} }
/*if ( h != this.data.data.secondary.health.max) {
this.data.data.secondary.health.max = h;
updates.push( {'data.secondary.health.max': h} );
}*/
if (updates.length > 0) { if (updates.length > 0) {
this.update(updates); this.update(updates);
} }
@ -262,11 +258,11 @@ export class PegasusActor extends Actor {
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) {
await this.createEmbeddedDocuments('Item', [item.data] ) await this.createEmbeddedDocuments('Item', [item.data] )
}
} else { } else {
if ( onDrop) { if ( !onDrop) {
await super._onDropItem(event, dragData)
} else {
await this.createEmbeddedDocuments('Item', [item.data] ) await this.createEmbeddedDocuments('Item', [item.data] )
} }
} }
@ -428,6 +424,16 @@ export class PegasusActor extends Actor {
//console.log("UPD", updates, this.data.data.biodata) //console.log("UPD", updates, this.data.data.biodata)
await this.update(updates) await this.update(updates)
} }
// Update current hindrance level
let hindrance = this.data.data.combat.hindrancedice
if ( this.data.data.secondary.health.value < 0) {
hindrance += Math.abs(this.data.data.secondary.health.value)
}
if ( this.data.data.secondary.delirium.value < 0) {
hindrance += Math.abs(this.data.data.secondary.delirium.value)
}
this.data.data.combat.hindrancedice = hindrance
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -470,17 +476,63 @@ export class PegasusActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
applyAbility(ability, updates = [], directUpdate = false) { async applyAbility(ability, updates = [], directUpdate = false) {
// manage stat bonus
if (ability.data.affectedstat != "notapplicable") { if (ability.data.affectedstat != "notapplicable") {
let stat = duplicate(this.data.data.statistics[ability.data.affectedstat]) let stat = duplicate(this.data.data.statistics[ability.data.affectedstat])
stat.value += parseInt(ability.data.statlevelincrease) stat.mod += Number(ability.data.statmodifier)
stat.mod += parseInt(ability.data.statmodifier)
updates[`data.statistics.${ability.data.affectedstat}`] = stat updates[`data.statistics.${ability.data.affectedstat}`] = stat
}
// manage status bonus
if (ability.data.statusaffected != "notapplicable") {
if ( ability.data.statusaffected == 'nrg' ) {
let nrg = duplicate( this.data.data.nrg)
nrg.mod += Number(ability.data.statusmodifier)
updates[`data.nrg`] = nrg
}
if ( ability.data.statusaffected == 'health' ) {
let health = duplicate( this.data.data.secondary.health)
health.bonus += Number(ability.data.statusmodifier)
updates[`data.secondary.health`] = health
}
if ( ability.data.statusaffected == 'delirium' ) {
let delirium = duplicate( this.data.data.secondary.delirium)
delirium.bonus += Number(ability.data.statusmodifier)
updates[`data.secondary.delirium`] = delirium
}
}
if ( directUpdate ) { if ( directUpdate ) {
this.update(updates) await this.update(updates)
}
let newItems = []
if (ability.data.effectsgained) {
for (let effect of ability.data.effectsgained) {
newItems.push(effect);
} }
} }
if (ability.data.powersgained) {
for (let power of ability.data.powersgained) {
newItems.push(power);
} }
}
if (ability.data.specialisations) {
for (let spec of ability.data.specialisations) {
newItems.push(spec);
}
}
if (ability.data.attackgained) {
for (let weapon of ability.data.attackgained) {
newItems.push(weapon);
}
}
if (ability.data.armorgained) {
for (let armor of ability.data.armorgained) {
newItems.push(armor);
}
}
await this.createEmbeddedDocuments('Item', newItems)
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async applyRace(race) { async applyRace(race) {
let updates = { 'data.biodata.racename': race.name } let updates = { 'data.biodata.racename': race.name }
@ -492,26 +544,11 @@ export class PegasusActor extends Actor {
newItems.push(ability) newItems.push(ability)
this.applyAbility(ability, updates) this.applyAbility(ability, updates)
} }
if (race.data.powersgained) { if (race.data.perksgained) {
for (let power of race.data.powersgained) { for (let power of race.data.perks) {
newItems.push(power); newItems.push(power);
} }
} }
if (race.data.specialisations) {
for (let spec of race.data.specialisations) {
newItems.push(spec);
}
}
if (race.data.attackgained) {
for (let weapon of race.data.attackgained) {
newItems.push(weapon);
}
}
if (race.data.armorgained) {
for (let armor of race.data.armorgained) {
newItems.push(armor);
}
}
await this.update(updates) await this.update(updates)
await this.createEmbeddedDocuments('Item', newItems) await this.createEmbeddedDocuments('Item', newItems)
@ -551,6 +588,9 @@ export class PegasusActor extends Actor {
if (this.data.data.combat.stunlevel > 0) { if (this.data.data.combat.stunlevel > 0) {
effectsList.push( { label: "Stun Hindrance", type: "hindrance", applied: false, value: this.data.data.combat.stunlevel } ) effectsList.push( { label: "Stun Hindrance", type: "hindrance", applied: false, value: this.data.data.combat.stunlevel } )
} }
if (this.data.data.combat.hindrancedice > 0) {
effectsList.push( { label: "Health/Delirium Hindrance", type: "hindrance", applied: false, value: this.data.data.combat.hindrancedice } )
}
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)
@ -576,6 +616,7 @@ export class PegasusActor extends Actor {
} }
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
addArmorsShields( rollData, statKey = "none", useShield = false) { addArmorsShields( rollData, statKey = "none", useShield = false) {
if (statKey == 'phy') { if (statKey == 'phy') {

View File

@ -68,11 +68,14 @@ export class PegasusCommands {
return this.process(command, params, content, msg); return this.process(command, params, content, msg);
} }
/* -------------------------------------------- */
process(command, params, content, msg) { process(command, params, content, msg) {
return this._processCommand(this.commandsTable, command, params, content, msg); return this._processCommand(this.commandsTable, command, params, content, msg);
} }
/* -------------------------------------------- */
_processCommand(commandsTable, name, params, content = '', msg = {}, path = "") { _processCommand(commandsTable, name, params, content = '', msg = {}, path = "") {
console.log("===> Processing command")
let command = commandsTable[name]; let command = commandsTable[name];
path = path + name + " "; path = path + name + " ";
if (command && command.subTable) { if (command && command.subTable) {

View File

@ -288,6 +288,16 @@ export class PegasusItemSheet extends ItemSheet {
await this.object.update( { 'data.powersgained': powArray} ); await this.object.update( { 'data.powersgained': powArray} );
} }
} }
/* -------------------------------------------- */
async addAbilityEffect( event, item, dataItem) {
let newItem = duplicate(item.data);
newItem._id = randomID( dataItem.id.length );
if ( event.toElement.className == 'drop-ability-effect') {
let powArray = duplicate(this.object.data.data.effectsgained);
powArray.push( newItem );
await this.object.update( { 'data.effectsgained': powArray} );
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async addAbilitySpec( event, item, dataItem) { async addAbilitySpec( event, item, dataItem) {
@ -399,6 +409,9 @@ export class PegasusItemSheet extends ItemSheet {
if (data) { if (data) {
let dataItem = JSON.parse( data ); let dataItem = JSON.parse( data );
let item = await PegasusUtility.searchItem( dataItem); let item = await PegasusUtility.searchItem( dataItem);
if ( item.data.type == 'effect') {
return this.addAbilityEffect( event, item, dataItem);
}
if ( item.data.type == 'power') { if ( item.data.type == 'power') {
return this.addAbilityPower( event, item, dataItem); return this.addAbilityPower( event, item, dataItem);
} }

View File

@ -7,5 +7,6 @@
{"_id":"d92lH69S6ugOjEQy","name":"Fur","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":1,"weight":2,"cost":20,"idr":"2","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"d92lH69S6ugOjEQy","name":"Fur","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":1,"weight":2,"cost":20,"idr":"2","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"h9swQ88G0dFG4wYu","name":"Tactical Suit","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":9,"weight":15,"cost":3000,"idr":"5","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"h9swQ88G0dFG4wYu","name":"Tactical Suit","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":9,"weight":15,"cost":3000,"idr":"5","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"m8nK6govnj9WMGSs","name":"Vac Suit","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":4,"weight":25,"cost":10000,"idr":"4","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"m8nK6govnj9WMGSs","name":"Vac Suit","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":4,"weight":25,"cost":10000,"idr":"4","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"nEu11KzIsSfxzGia","name":"Metal Body","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":2,"weight":0,"cost":0,"idr":"0","equipped":false,"locationprotected":"All","description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{"core":{"sourceId":"Item.nEu11KzIsSfxzGia"}}}
{"_id":"wrJGYuvfKlrL6fv7","name":"Bronze Armour","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":4,"weight":20,"cost":1000,"idr":"5","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"wrJGYuvfKlrL6fv7","name":"Bronze Armour","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":4,"weight":20,"cost":1000,"idr":"5","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"y0GPi66JRLx4qlUr","name":"Flak Vest","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":4,"weight":20,"cost":500,"idr":"4","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"y0GPi66JRLx4qlUr","name":"Flak Vest","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":4,"weight":20,"cost":500,"idr":"4","equipped":false,"locationprotected":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}

View File

@ -1,5 +1,5 @@
{"_id":"0DEuUiseNrqMtkpH","name":"Cybernetic Senses","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"per","statmodifier":1,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","affectedcircumstances":"","affectedspecialisations":"","nrgcost":1,"opponenthindrance":0,"attackgained":[],"armorgained":[],"description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"0DEuUiseNrqMtkpH","name":"Cybernetic Senses","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"per","statmodifier":1,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","affectedcircumstances":"","affectedspecialisations":"","nrgcost":1,"opponenthindrance":0,"attackgained":[],"armorgained":[],"description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"0bW374Onk2LEUKNO","name":"Metal Body","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"notapplicable","statmodifier":0,"statlevelincrease":0,"bonusdice":0,"otherdice":2,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"0bW374Onk2LEUKNO","name":"Metal Body","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"notapplicable","statmodifier":0,"statlevelincrease":0,"bonusdice":0,"otherdice":2,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","affectedcircumstances":"","affectedspecialisations":"","nrgcost":0,"opponenthindrance":0,"attackgained":[],"armorgained":[{"_id":"y3aravy7qqveefeg","name":"Metal Body","type":"armor","img":"systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp","data":{"statistic":"phy","resistance":2,"weight":0,"cost":0,"idr":"0","equipped":false,"locationprotected":"All","description":""},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{"core":{"sourceId":"Item.nEu11KzIsSfxzGia"}}}],"description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"1y6qo5dvemTXe6JF","name":"Perception [PER] +2 Modifier","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"per","statmodifier":2,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","description":"<p>Change the Stat Modifier to reflect the Statistic Modifier (+/- 1 etc).</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"1y6qo5dvemTXe6JF","name":"Perception [PER] +2 Modifier","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"per","statmodifier":2,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","description":"<p>Change the Stat Modifier to reflect the Statistic Modifier (+/- 1 etc).</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"2XbpJr3oIIdXBQDX","name":"Red Eyes","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"notapplicable","statmodifier":0,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"2XbpJr3oIIdXBQDX","name":"Red Eyes","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"notapplicable","statmodifier":0,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","description":"<p><span style=\"color: #191813; font-size: 12.8px; letter-spacing: 1px; text-align: justify;\">See Pegasus Engine CORE RPG</span></p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}
{"_id":"3cq8bAvKZVewpPi0","name":"Strength [STR] +3 Modifier","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"str","statmodifier":3,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","description":"<p>Change the Stat Modifier to reflect the Statistic Modifier (+/- 1 etc).</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}} {"_id":"3cq8bAvKZVewpPi0","name":"Strength [STR] +3 Modifier","type":"ability","img":"systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp","data":{"affectedstat":"str","statmodifier":3,"statlevelincrease":0,"bonusdice":0,"otherdice":0,"statusaffected":"notapplicable","statusmodifier":0,"powersgained":[],"specialisations":[],"aoe":"","description":"<p>Change the Stat Modifier to reflect the Statistic Modifier (+/- 1 etc).</p>"},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"iNL4aGohJ8v6YrUk":3},"flags":{}}

View File

@ -1163,6 +1163,7 @@ ul, li {
.ul-level1 { .ul-level1 {
padding-left: 2rem; padding-left: 2rem;
} }
.drop-ability-effect,
.drop-effect-specaffected, .drop-effect-specaffected,
.drop-effect-spec, .drop-effect-spec,
.drop-ability-weapon, .drop-ability-weapon,

View File

@ -180,9 +180,9 @@
"styles": [ "styles": [
"styles/simple.css" "styles/simple.css"
], ],
"templateVersion": 64, "templateVersion": 66,
"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.3.0", "version": "0.4.0",
"background" : "./images/ui/pegasus_welcome_page.webp" "background" : "./images/ui/pegasus_welcome_page.webp"
} }

View File

@ -229,15 +229,14 @@
"description": "" "description": ""
}, },
"ability": { "ability": {
"affectedstat": "", "affectedstat": "str",
"statmodifier": 0, "statmodifier": 1,
"statlevelincrease": 0, "statlevelincrease": 0,
"bonusdice": 0,
"otherdice": 0,
"statusaffected": "", "statusaffected": "",
"statusmodifier": 0, "statusmodifier": 0,
"powersgained": [], "powersgained": [],
"specialisations": [], "specialisations": [],
"effectsgained": [],
"aoe": "", "aoe": "",
"affectedcircumstances": "", "affectedcircumstances": "",
"affectedspecialisations": "", "affectedspecialisations": "",

View File

@ -5,16 +5,18 @@
<div class="header-fields"> <div class="header-fields">
<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">
<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>
</div> </div>
</div>
</header> </header>
{{!-- 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="statistics">Statistics</a>
<a class="item" data-tab="specs">Specialisations</a> <a class="item" data-tab="specs">Specialisations</a>
<a class="item" data-tab="powers">Powers</a> <a class="item" data-tab="powers">Powers/Abilities</a>
<a class="item" data-tab="combat">Combat</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>
@ -49,6 +51,9 @@
</li> </li>
{{/each}} {{/each}}
</ul> </ul>
<div class="flexrow">
<span class="generic-label packed-left"><a class="generic-pool-roll"><button class="chat-card-button">Pool Roll</button></a></span>
</div>
</div> </div>
<div class=""> <div class="">
@ -126,24 +131,6 @@
</div> </div>
</div> </div>
<div>
<span class="generic-label">
<h3>Abilities</h3>
</span>
<ul class="stat-list alternate-list">
{{#each abilities as |ability key|}}
<li class="item stat flexrow list-item" data-item-id="{{ability._id}}">
<img class="sheet-competence-img" src="{{ability.img}}" />
<span class="stat-label">{{ability.name}}</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> </div>
@ -173,21 +160,23 @@
<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;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">&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"/>
</li> </li>
<li class="item flexrow list-item" data-attr-key="{{key}}">
{{#each data.secondary as |stat2 key|}} {{#each data.secondary as |stat2 key|}}
{{#if stat2.iscombat}} {{#if stat2.iscombat}}
<li class="item flexrow list-item" data-attr-key="{{key}}"> <span class="stat-label" name="{{key}}">
<span class="stat-label flexrow" name="{{key}}"> <h4>{{stat2.label}} : </h4>
<h4>{{stat2.label}}</h4>
</span> </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">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"/> <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"/>
</li>
{{/if}} {{/if}}
{{/each}} {{/each}}
</li>
<li class="item flexrow list-item" data-key="momentum"> <li class="item flexrow list-item" data-key="momentum">
<span class="stat-label flexrow" name="momentum"><h4>{{data.momentum.label}}</h4></span> <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">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"/> <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"/>
<span class="stat-label flexrow" name="momentum"><h4>Current Hindrance level:</h4></span>
<input type="text" class="padd-right update-field input-numeric-short" data-field-name="data.combat.hindrancedice" value="{{data.combat.hindrancedice}}" data-dtype="Number"/>
</li> </li>
</ul> </ul>
@ -290,6 +279,7 @@
</li> </li>
</ul> </ul>
<hr>
<span class="generic-label"> <span class="generic-label">
<h3>Powers</h3> <h3>Powers</h3>
</span> </span>
@ -316,6 +306,23 @@
{{/each}} {{/each}}
</ul> </ul>
<hr>
<span class="generic-label">
<h3>Abilities</h3>
</span>
<ul class="stat-list alternate-list">
{{#each abilities as |ability key|}}
<li class="item stat flexrow list-item" data-item-id="{{ability._id}}">
<img class="sheet-competence-img" src="{{ability.img}}" />
<span class="stat-label">{{ability.name}}</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>
@ -460,16 +467,18 @@
</li> </li>
<li class="flexrow item list_item" data-item-id="{{race._id}}"> <li class="flexrow item list_item" data-item-id="{{race._id}}">
<label class="generic-label">Race</label> <label class="generic-label">Race</label>
<input type="text" class="" name="data.biodata.racename" value="{{data.biodata.racename}}" data-dtype="String" /> <input type="text" class="" name="data.biodata.racename" value="{{race.name}}" disabled data-dtype="String" />
<div class="item-controls"> <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-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> </li>
<li class="flexrow item list_item" data-item-id="{{role._id}}"> <li class="flexrow item list_item" data-item-id="{{role._id}}">
<label class="generic-label">Role</label> <label class="generic-label">Role</label>
<input type="text" class="" name="data.biodata.rolename" value="{{data.biodata.rolename}}" data-dtype="String" /> <input type="text" class="" name="data.biodata.rolename" value="{{role.name}}" disabled data-dtype="String" />
<div class="item-controls"> <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-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> </li>
</ul> </ul>

View File

@ -13,39 +13,14 @@
<li class="flexrow"><label class="generic-label">Affected stat</label> <li class="flexrow"><label class="generic-label">Affected stat</label>
<select class="competence-base flexrow" type="text" name="data.affectedstat" value="{{data.affectedstat}}" data-dtype="String"> <select class="competence-base flexrow" type="text" name="data.affectedstat" value="{{data.affectedstat}}" data-dtype="String">
{{#select data.affectedstat}} {{#select data.affectedstat}}
{{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html notapplicable=true mr=true}} {{> systems/fvtt-pegasus-rpg/templates/partial-options-statistics.html notapplicable=true mr=false}}
{{/select}} {{/select}}
</select> </select>
</li> </li>
<li class="flexrow"><label class="generic-label">Stat modifier</label> <li class="flexrow"><label class="generic-label">Stat modifier</label>
<input type="text" class="" name="data.statmodifier" value="{{data.statmodifier}}" data-dtype="Number"/> <input type="text" class="padd-right" name="data.statmodifier" value="{{data.statmodifier}}" data-dtype="Number"/>
</li>
<li class="flexrow"><label class="generic-label">Stat level increase</label>
<select class="competence-base flexrow" type="text" name="data.statlevelincrease" value="{{data.statlevelincrease}}" data-dtype="Number">
{{#select data.statlevelincrease}}
<option value="0">0 DT</option>
<option value="+1">+1 DT</option>
<option value="+2">+2 DT</option>
<option value="+3">+3 DT</option>
<option value="+4">+4 DT</option>
<option value="+5">+5 DT</option>
{{/select}}
</select>
</li>
<li class="flexrow"><label class="generic-label">Bonus dice</label>
<select class="competence-base flexrow" type="text" name="data.bonusdice" value="{{data.bonusdice}}" data-dtype="Number">
{{#select data.bonusdice}}
{{{optionsDiceList}}}
{{/select}}
</select>
</li>
<li class="flexrow"><label class="generic-label">Other dice</label>
<select class="competence-base flexrow" type="text" name="data.otherdice" value="{{data.otherdice}}" data-dtype="Number">
{{#select data.otherdice}}
{{{optionsDiceList}}}
{{/select}}
</select>
</li> </li>
<li class="flexrow"><label class="generic-label">Affected status</label> <li class="flexrow"><label class="generic-label">Affected status</label>
<select class="competence-base flexrow" type="text" name="data.statusaffected" value="{{data.statusaffected}}" data-dtype="String"> <select class="competence-base flexrow" type="text" name="data.statusaffected" value="{{data.statusaffected}}" data-dtype="String">
{{#select data.statusaffected}} {{#select data.statusaffected}}
@ -56,6 +31,24 @@
<li class="flexrow"><label class="generic-label">Status modifier</label> <li class="flexrow"><label class="generic-label">Status modifier</label>
<input type="text" class="padd-right" name="data.statusmodifier" value="{{data.statusmodifier}}" data-dtype="Number"/> <input type="text" class="padd-right" name="data.statusmodifier" value="{{data.statusmodifier}}" data-dtype="Number"/>
</li> </li>
<li class="flexrow"><label class="generic-label">Effects Gained</label>
</li>
<li>
<ul class="ul-level1">
<li class="flexrow"><div class="drop-ability-effect"><label>Drop Effects here !</label></div>
</li>
{{#each data.effectsgained as |effect idx|}}
<li class="flexrow">
<label name="data.effectsgained[{{idx}}].name"><a class="view-subitem" data-type="effectsgained" data-index="{{idx}}">{{effect.name}}</a></label>
<div class="item-controls padd-left">
<a class="item-control delete-subitem padd-left" data-type="effectsgained" data-index="{{idx}}" title="Delete Effect"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</li>
<li class="flexrow"><label class="generic-label">Power Gained</label> <li class="flexrow"><label class="generic-label">Power Gained</label>
</li> </li>
<li> <li>

View File

@ -12,6 +12,12 @@
<section class="sheet-body"> <section class="sheet-body">
<div class="tab" data-group="primary"> <div class="tab" data-group="primary">
<label class="generic-label">Description</label>
<div class="small-editor item-text-long-line">
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
<ul> <ul>
<li class="flexrow"><label class="generic-label">Type</label> <li class="flexrow"><label class="generic-label">Type</label>
<select class="competence-base flexrow" type="text" name="data.type" value="{{data.type}}" data-dtype="String"> <select class="competence-base flexrow" type="text" name="data.type" value="{{data.type}}" data-dtype="String">
@ -61,7 +67,7 @@
{{#if (eq data.genre "positive")}} {{#if (eq data.genre "positive")}}
<li class="flexrow"><label class="generic-label">Choose one :</label></li>
<li class="flexrow"><label class="generic-label">Stat Dice ?</label> <li class="flexrow"><label class="generic-label">Stat Dice ?</label>
<label class="attribute-value checkbox"><input type="checkbox" name="data.statdice" {{checked data.statdice}}/></label> <label class="attribute-value checkbox"><input type="checkbox" name="data.statdice" {{checked data.statdice}}/></label>
</li> </li>
@ -126,11 +132,6 @@
{{/if}} {{/if}}
</ul> </ul>
<label class="generic-label">Description</label>
<div class="small-editor item-text-long-line">
{{editor content=data.description target="data.description" button=true owner=owner editable=editable}}
</div>
</div> </div>
</section> </section>