diff --git a/modules/imperium5-actor-sheet.js b/modules/imperium5-actor-sheet.js
index e3f8c6c..c1faf56 100644
--- a/modules/imperium5-actor-sheet.js
+++ b/modules/imperium5-actor-sheet.js
@@ -7,14 +7,14 @@ import { Imperium5Utility } from "./imperium5-utility.js";
import { Imperium5RollDialog } from "./imperium5-roll-dialog.js";
/* -------------------------------------------- */
-export class PegasusActorSheet extends ActorSheet {
+export class Imperium5ActorSheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
- classes: ["fvtt-pegasus-rpg", "sheet", "actor"],
- template: "systems/fvtt-pegasus-rpg/templates/actor-sheet.html",
+ classes: ["fvtt-imperium5", "sheet", "actor"],
+ template: "systems/fvtt-imperium5/templates/actor-sheet.html",
width: 920,
height: 720,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "combat" }],
@@ -25,9 +25,9 @@ export class PegasusActorSheet extends ActorSheet {
/* -------------------------------------------- */
async getData() {
- const objectData = PegasusUtility.data(this.object);
+ const objectData = Imperium5Utility.data(this.object);
- let actorData = duplicate(PegasusUtility.templateData(this.object));
+ let actorData = duplicate(Imperium5Utility.templateData(this.object));
let formData = {
title: this.title,
@@ -38,28 +38,11 @@ export class PegasusActorSheet extends ActorSheet {
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
data: actorData,
+ archetype: this.actor.getArchetype(),
+ specialites: this.actor.getSpecialites(),
+ familiarites: this.actor.getFamiliarites(),
effects: this.object.effects.map(e => foundry.utils.deepClone(e.data)),
limited: this.object.limited,
- specs: this.actor.getSpecs( ),
- optionsDiceList: PegasusUtility.getOptionsDiceList(),
- optionsLevel: PegasusUtility.getOptionsLevel(),
- weapons: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getWeapons()) ),
- armors: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getArmors())),
- shields: this.actor.checkAndPrepareEquipments( duplicate(this.actor.getShields()) ),
- equipments: this.actor.checkAndPrepareEquipments(duplicate(this.actor.getEquipmentsOnly()) ),
- perks: duplicate(this.actor.getPerks()),
- abilities: duplicate(this.actor.getAbilities()),
- activePerks: duplicate(this.actor.getActivePerks()),
- powers: duplicate(this.actor.getPowers()),
- subActors: duplicate(this.actor.getSubActors()),
- race: duplicate(this.actor.getRace()),
- role: duplicate(this.actor.getRole()),
- effects: duplicate(this.actor.getEffects()),
- moneys: duplicate(this.actor.getMoneys()),
- encCapacity: this.actor.getEncumbranceCapacity(),
- containersTree: this.actor.containersTree,
- encCurrent: this.actor.encCurrent,
- encHindrance: this.actor.encHindrance,
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
@@ -73,13 +56,13 @@ export class PegasusActorSheet extends ActorSheet {
/* -------------------------------------------- */
async openGenericRoll() {
- let rollData = PegasusUtility.getBasicRollData()
+ let rollData = Imperium5Utility.getBasicRollData()
rollData.alias = "Dice Pool Roll",
rollData.mode = "generic"
rollData.title = `Dice Pool Roll`
rollData.img = "icons/dice/d12black.svg"
- let rollDialog = await PegasusRollDialog.create( this.actor, rollData);
+ let rollDialog = await Imperium5RollDialog.create( this.actor, rollData);
rollDialog.render( true );
}
@@ -87,7 +70,7 @@ export class PegasusActorSheet extends ActorSheet {
async rollIDR( itemId, diceValue) {
let item = this.actor.data.items.get( itemId) ?? {name: "Unknown"}
let myRoll = new Roll(diceValue+"x").roll({ async: false })
- await PegasusUtility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
+ await Imperium5Utility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
let chatData = {
user: game.user.id,
rollMode: game.settings.get("core", "rollMode"),
@@ -119,7 +102,7 @@ export class PegasusActorSheet extends ActorSheet {
// Delete Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
- PegasusUtility.confirmDelete(this, li);
+ Imperium5Utility.confirmDelete(this, li);
});
html.find('.spec-group-activate').click(ev => {
@@ -337,11 +320,11 @@ export class PegasusActorSheet extends ActorSheet {
/* -------------------------------------------- */
async _onDropItem(event, dragData) {
console.log(">>>>>> DROPPED!!!!")
- let item = await PegasusUtility.searchItem( dragData)
+ let item = await Imperium5Utility.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)
}
diff --git a/modules/imperium5-actor.js b/modules/imperium5-actor.js
index 1a20422..14515d8 100644
--- a/modules/imperium5-actor.js
+++ b/modules/imperium5-actor.js
@@ -2,16 +2,12 @@
import { Imperium5Utility } from "./imperium5-utility.js";
import { Imperium5RollDialog } from "./imperium5-roll-dialog.js";
-/* -------------------------------------------- */
-const coverBonusTable = { "nocover": 0, "lightcover": 2, "heavycover": 4, "entrenchedcover": 6 };
-const statThreatLevel = [ "agi", "str", "phy", "com", "def", "per" ]
-/* -------------------------------------------- */
/* -------------------------------------------- */
/**
* Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system.
* @extends {Actor}
*/
-export class PegasusActor extends Actor {
+export class Imperium5Actor extends Actor {
/* -------------------------------------------- */
/**
@@ -38,10 +34,7 @@ export class PegasusActor extends Actor {
}
if (data.type == 'character') {
- const skills = await PegasusUtility.loadCompendium("fvtt-weapons-of-the-gods.skills");
- data.items = skills.map(i => i.toObject());
- }
- if (data.type == 'npc') {
+
}
return super.create(data, options);
@@ -60,11 +53,10 @@ export class PegasusActor extends Actor {
prepareDerivedData() {
if (this.type == 'character') {
- this.computeNRGHealth();
- this.data.data.encCapacity = this.getEncumbranceCapacity()
- this.buildContainerTree()
+ //this.data.data.encCapacity = this.getEncumbranceCapacity()
+ //this.buildContainerTree()
}
-
+ console.log("Acteur : ", this)
super.prepareDerivedData();
}
@@ -73,208 +65,30 @@ export class PegasusActor extends Actor {
super._preUpdate(changed, options, user);
}
-
+
/* -------------------------------------------- */
- getEncumbranceCapacity() {
- return this.data.data.statistics.str.value * 25
+ getArchetype() {
+ let item = duplicate( this.data.items.find( it => it.type == "archetype") || [])
+ return item
+ }
+ getSpecialites() {
+ let item = duplicate(this.data.items.filter( it => it.type == "specialite") || [] )
+ return item
+ }
+ getFamiliarites() {
+ let item = duplicate(this.data.items.filter( it => it.type == "familiarite") || [] )
+ return item
}
- /* -------------------------------------------- */
- getActivePerks() {
- let perks = this.data.items.filter(item => item.type == 'perk' && item.data.data.active);
- return perks;
- }
- /* -------------------------------------------- */
- getAbilities() {
- let ab = this.data.items.filter(item => item.type == 'ability');
- return ab;
- }
- /* -------------------------------------------- */
- getPerks() {
- let comp = this.data.items.filter(item => item.type == 'perk');
- return comp;
- }
- /* -------------------------------------------- */
- getEffects() {
- let comp = this.data.items.filter(item => item.type == 'effect');
- return comp;
- }
- /* -------------------------------------------- */
- getPowers() {
- let comp = this.data.items.filter(item => item.type == 'power');
- return comp;
- }
- /* -------------------------------------------- */
- getMoneys() {
- let comp = this.data.items.filter(item => item.type == 'money');
- return comp;
- }
- /* -------------------------------------------- */
- getArmors() {
- let comp = duplicate(this.data.items.filter(item => item.type == 'armor') || []);
- return comp;
- }
- /* -------------------------------------------- */
- getShields() {
- let comp = this.data.items.filter(item => item.type == 'shield')
- return comp;
- }
- getRace() {
- let race = this.data.items.filter(item => item.type == 'race')
- return race[0] ?? [];
- }
- getRole() {
- let role = this.data.items.filter(item => item.type == 'role')
- return role[0] ?? [];
- }
- /* -------------------------------------------- */
- checkAndPrepareEquipment(item) {
- if ( item.data.resistance ) {
- item.data.resistanceDice = PegasusUtility.getDiceFromLevel(item.data.resistance)
- }
- if ( item.data.idr ) {
- item.data.idrDice = PegasusUtility.getDiceFromLevel(item.data.idr)
- }
- if ( item.data.damage) {
- item.data.damageDice = PegasusUtility.getDiceFromLevel(item.data.damage)
- }
- if( item.data.level) {
- item.data.levelDice = PegasusUtility.getDiceFromLevel(item.data.level)
- }
- }
-
- /* -------------------------------------------- */
- checkAndPrepareEquipments(listItem) {
- for (let item of listItem) {
- this.checkAndPrepareEquipment(item)
- }
- return listItem
- }
-
- /* -------------------------------------------- */
- getWeapons() {
- let comp = duplicate(this.data.items.filter(item => item.type == 'weapon') || []);
- return comp;
- }
/* -------------------------------------------- */
getItemById(id) {
- let item = this.data.items.find(item => item.id == id);
+ let item = this.data.items.find(item => item.id == id)
if (item) {
item = duplicate(item)
- if (item.type == 'specialisation') {
- item.data.dice = PegasusUtility.getDiceFromLevel(item.data.level);
- }
}
return item;
}
- /* -------------------------------------------- */
- getSpecs() {
- let comp = duplicate(this.data.items.filter(item => item.type == 'specialisation') || []);
- for (let c of comp) {
- c.data.dice = PegasusUtility.getDiceFromLevel(c.data.level);
- }
- return comp;
- }
-
- /* -------------------------------------------- */
- async manageWorstFear(flag) {
- if (flag) {
- let effect = await PegasusUtility.getEffectFromCompendium("Worst Fear")
- effect.data.worstfear = true
- this.createEmbeddedDocuments('Item', [effect])
- } else {
- let effect = this.data.items.find(item => item.type == "effect" && item.data.data.worstfear)
- if (effect) {
- this.deleteEmbeddedDocuments('Item', [effect.id])
- }
- }
- }
- /* -------------------------------------------- */
- async manageDesires(flag) {
- if (flag) {
- let effect = await PegasusUtility.getEffectFromCompendium("Desires")
- effect.data.desires = true
- this.createEmbeddedDocuments('Item', [effect])
- } else {
- let effect = this.data.items.find(item => item.type == "effect" && item.data.data.desires)
- if (effect) {
- this.deleteEmbeddedDocuments('Item', [effect.id])
- }
- }
- }
-
- /* -------------------------------------------- */
- getRelevantSpec(statKey) {
- let comp = duplicate(this.data.items.filter(item => item.type == 'specialisation' && item.data.data.statistic == statKey) || []);
- for (let c of comp) {
- c.data.dice = PegasusUtility.getDiceFromLevel(c.data.level);
- }
- return comp;
- }
-
- /* -------------------------------------------- */
- async activatePerk(perkId) {
- let item = this.data.items.find(item => item.id == perkId);
- if (item && item.data.data) {
- let update = { _id: item.id, "data.active": !item.data.data.active };
- await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
- }
- }
-
- /* -------------------------------------------- */
- async activatePower(itemId) {
- let item = this.data.items.find(item => item.id == itemId)
- if (item && item.data.data) {
-
- let nrg = duplicate(this.data.data.nrg)
- if (!item.data.data.activated) { // Current value
-
- if (item.data.data.costspent > nrg.value || item.data.data.costspent > nrg.max) {
- return ui.notifications.warn("Not enough NRG to activate the Power " + item.name)
- }
- nrg.activated += item.data.data.costspent
- nrg.value -= item.data.data.costspent
- nrg.max -= item.data.data.costspent
- await this.update({ 'data.nrg': nrg })
-
- let effects = []
- for (let effect of item.data.data.effectsgained) {
- effect.data.powerId = itemId // Link to the perk, in order to dynamically remove them
- effects.push(effect)
- }
- if (effects.length) {
- await this.createEmbeddedDocuments('Item', effects)
- }
- } else {
- nrg.activated -= item.data.data.costspent
- nrg.max += item.data.data.costspent
- await this.update({ 'data.nrg': nrg })
-
- let toRem = []
- for (let item of this.data.items) {
- if (item.type == 'effect' && item.data.data.powerId == itemId) {
- toRem.push(item.id)
- }
- }
- if (toRem.length) {
- await this.deleteEmbeddedDocuments('Item', toRem)
- }
- }
- let update = { _id: item.id, "data.activated": !item.data.data.activated }
- await this.updateEmbeddedDocuments('Item', [update]) // Updates one EmbeddedEntity
- }
- }
-
- /* -------------------------------------------- */
- async equipItem(itemId) {
- let item = this.data.items.find(item => item.id == itemId);
- if (item && item.data.data) {
- let update = { _id: item.id, "data.equipped": !item.data.data.equipped };
- await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
- }
- }
-
/* -------------------------------------------- */
compareName(a, b) {
if (a.name < b.name) {
@@ -286,141 +100,6 @@ export class PegasusActor extends Actor {
return 0;
}
- /* ------------------------------------------- */
- getEquipments() {
- return this.data.items.filter(item => item.type == 'shield' || item.type == 'armor' || item.type == "weapon" || item.type == "equipment");
- }
- /* ------------------------------------------- */
- getEquipmentsOnly() {
- return duplicate(this.data.items.filter(item => item.type == "equipment") || [])
- }
-
- /* ------------------------------------------- */
- computeThreatLevel() {
- let tl = 0
- for(let key of statThreatLevel) { // Init with concerned stats
- tl += PegasusUtility.getDiceValue( this.data.data.statistics[key].value )
- }
- let powers = duplicate( this.getPowers() || [])
- if ( powers.length > 0 ) { // Then add some mental ones of powers
- tl += PegasusUtility.getDiceValue( this.data.data.statistics.foc.value )
- tl += PegasusUtility.getDiceValue( this.data.data.statistics.mnd.value )
- }
- tl += PegasusUtility.getDiceValue( this.data.data.mr.value )
- let specThreat = this.data.items.filter( it => it.type == "specialisation" && it.data.data.isthreatlevel) || []
- for (let spec of specThreat) {
- tl += PegasusUtility.getDiceValue( spec.data.data.level )
- }
- tl += this.data.data.nrg.absolutemax + this.data.data.secondary.health.max + this.data.data.secondary.delirium.max
- tl += this.getPerks().length * 5
-
- let weapons = this.getWeapons()
- for(let weapon of weapons) {
- tl += PegasusUtility.getDiceValue(weapon.data.damage)
- }
- let armors = this.getArmors()
- for(let armor of armors) {
- tl += PegasusUtility.getDiceValue(armor.data.resistance)
- }
- let shields = this.getShields()
- for(let shield of shields) {
- tl += PegasusUtility.getDiceValue(shield.data.level)
- }
- let abilities = duplicate(this.getAbilities())
- for (let ability of abilities) {
- tl += ability.data.threatlevel
- }
- let equipments = this.getEquipmentsOnly()
- for (let equip of equipments) {
- tl += equip.data.threatlevel
- }
- if ( tl != this.data.data.biodata.threatlevel) {
- this.update( {'data.biodata.threatlevel': tl} )
- }
- }
-
- /* ------------------------------------------- */
- 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)
- let q = equip2.data.quantity ?? 1
- equip1.data.contentsEnc += q *equip2.data.weight
- }
- }
- }
- }
-
- // Compute whole enc
- let enc = 0
- for (let item of equipments) {
- item.data.idrDice = PegasusUtility.getDiceFromLevel( Number(item.data.idr))
- if (item.data.equipped) {
- if (item.data.iscontainer) {
- enc += item.data.contentsEnc
- } else if (item.data.containerid == "") {
- let q = item.data.quantity ?? 1
- enc += q * item.data.weight
- }
- }
- }
- for (let item of this.data.items) { // Process items/shields/armors
- if ((item.type == "weapon" || item.type == "shield" || item.type == "armor") && item.data.data.equipped) {
- let q = item.data.data.quantity ?? 1
- enc += q * item.data.data.weight
- }
- }
-
- // Store local values
- 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 ) {
- this.update({ 'data.momentum': momentum })
- let chatData = {
- user: game.user.id,
- rollMode: game.settings.get("core", "rollMode"),
- whisper: [game.user.id].concat(ChatMessage.getWhisperRecipients('GM'))
- }
- if (incDec > 0) {
- chatData.content = `
${this.name} has gained a Momentum
${this.name} has used a Momentum true) {
let array = Array.from(this.getEmbeddedCollection("ActiveEffect").values());
@@ -435,65 +114,6 @@ export class PegasusActor extends Actor {
return this.getActiveEffects().find(it => it.id == id);
}
- /* -------------------------------------------- */
- getAttribute(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) {
- console.log("Pre-process !!!", item)
- if (item.data.type == 'race') {
- this.applyRace(item.data)
- } else if (item.data.type == 'ability') {
- this.applyAbility(item.data, [], true)
- if (!onDrop) {
- await this.createEmbeddedDocuments('Item', [item.data])
- return
- }
- } else {
- if (!onDrop) {
- 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)
- }
-
- /* -------------------------------------------- */
- async equipGear(equipmentId) {
- let item = this.data.items.find(item => item.id == equipmentId);
- if (item && item.data.data) {
- let update = { _id: item.id, "data.equipped": !item.data.data.equipped };
- await this.updateEmbeddedDocuments('Item', [update]); // Updates one EmbeddedEntity
- }
- }
/* -------------------------------------------- */
getInitiativeScore(combatId, combatantId) {
if (this.type == 'character') {
@@ -530,261 +150,12 @@ export class PegasusActor extends Actor {
/* -------------------------------------------- */
syncRoll(rollData) {
- let linkedRollId = PegasusUtility.getDefenseState(this.id);
+ let linkedRollId = Imperium5Utility.getDefenseState(this.id);
if (linkedRollId) {
rollData.linkedRollId = linkedRollId;
}
this.lastRollId = rollData.rollId;
- PegasusUtility.saveRollData(rollData);
- }
-
- /* -------------------------------------------- */
- getStat(statKey) {
- let stat
- if (statKey == 'mr') {
- stat = duplicate(this.data.data.mr);
- } else {
- stat = duplicate(this.data.data.statistics[statKey]);
- }
- stat.dice = PegasusUtility.getDiceFromLevel(stat.value);
- return stat;
- }
-
- /* -------------------------------------------- */
- getOneSpec(specId) {
- let spec = this.data.items.find(item => item.type == 'specialisation' && item.id == specId)
- if (spec) {
- spec = duplicate(spec);
- spec.data.dice = PegasusUtility.getDiceFromLevel(spec.data.level);
- }
- return spec;
- }
-
- /* -------------------------------------------- */
- specPowerActivate(specId) {
- let spec = this.getOneSpec(specId)
- if (spec) {
- let powers = []
- for (let power of spec.data.powers) {
- power.data.specId = specId
- powers.push(power)
- }
- if (powers.length > 0) {
- this.createEmbeddedDocuments('Item', powers)
- }
- this.updateEmbeddedDocuments('Item', [{ _id: specId, 'data.powersactivated': true }])
- }
- }
-
- /* -------------------------------------------- */
- specPowerDeactivate(specId) {
- let toRem = []
- for (let power of this.data.items) {
- if (power.type == "power" && power.data.data.specId && power.data.data.specId == specId) {
- toRem.push(power.id)
- }
- }
- if (toRem.length > 0) {
- this.deleteEmbeddedDocuments('Item', toRem)
- }
- this.updateEmbeddedDocuments('Item', [{ _id: specId, 'data.powersactivated': false }])
- }
-
- /* -------------------------------------------- */
- equipActivate(itemId) {
- let item = this.items.get(itemId)
- if (item) {
- let effects = []
- for (let effect of item.data.data.effects) {
- effect.data.itemId = itemId // Keep link
- effects.push(effect)
- }
- if (effects.length > 0) {
- this.createEmbeddedDocuments('Item', effects)
- }
- this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'data.activated': true }])
- }
- }
-
- /* -------------------------------------------- */
- equipDeactivate(itemId) {
- let toRem = []
- for (let item of this.data.items) {
- if (item.data.data.itemId && item.data.data.itemId == itemId) {
- toRem.push(item.id)
- }
- }
- if (toRem.length > 0) {
- this.deleteEmbeddedDocuments('Item', toRem)
- }
- this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'data.activated': false }])
- }
-
- /* -------------------------------------------- */
- async perkEffectUsed(itemId) {
- let effect = this.items.get(itemId)
- if (effect) {
- PegasusUtility.createChatWithRollMode(effect.name, {
- content: await renderTemplate(`systems/fvtt-pegasus-rpg/templates/chat-effect-used.html`, effect.data)
- });
-
- this.deleteEmbeddedDocuments('Item', [effect.id])
- }
- }
-
- /* -------------------------------------------- */
- disableWeaverPerk(perk) {
- if (perk.data.data.isweaver) {
- for (let spec of this.data.items) {
- if (spec.type == 'specialisation' && spec.data.data.ispowergroup) {
- this.specPowerDeactivate(spec.id)
- }
- }
- }
- }
-
- /* -------------------------------------------- */
- enableWeaverPerk(perk) {
- if (perk.data.data.isweaver) {
- for (let spec of this.data.items) {
- if (spec.type == 'specialisation' && spec.data.data.ispowergroup) {
- this.specPowerActivate(spec.id)
- }
- }
- }
- }
-
- /* -------------------------------------------- */
- async cleanPerkEffects(itemId) {
- let effects = []
- for (let item of this.data.items) {
- if (item.type == "effect" && item.data.data.perkId == itemId) {
- effects.push(item.id)
- }
- }
- if (effects.length > 0) {
- console.log("DELET!!!!", effects, this)
- await this.deleteEmbeddedDocuments('Item', effects)
- }
- }
-
- /* -------------------------------------------- */
- async updatePerkUsed(itemId, index, checked) {
- let item = this.items.get(itemId)
- if (item && index) {
- let key = "data.used" + index
- await this.updateEmbeddedDocuments('Item', [{ _id: itemId, [`${key}`]: checked }])
- item = this.items.get(itemId) // Refresh
- if (item.data.data.nbuse == "next1action" && item.data.data.used1) {
- this.cleanPerkEffects(itemId)
- }
- if (item.data.data.nbuse == "next2action" && item.data.data.used1 && item.data.data.used2) {
- this.cleanPerkEffects(itemId)
- }
- if (item.data.data.nbuse == "next3action" && item.data.data.used1 && item.data.data.used2 && item.data.data.used3) {
- this.cleanPerkEffects(itemId)
- }
- }
- }
-
- /* -------------------------------------------- */
- async updatePowerSpentCost(itemId, value) {
- let item = this.items.get(itemId)
- if (item && value) {
- value = Number(value) || 0
- await this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'data.costspent': value }])
- }
- }
-
- /* -------------------------------------------- */
- async updatePerkStatus(itemId, status) {
- let item = this.items.get(itemId)
- if (item) {
-
- if (item.data.data.status == status) return;// Ensure we are really changing the status
-
- let updateOK = true
- if (status == "ready") {
- await this.cleanPerkEffects(itemId)
- await this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'data.used1': false, 'data.used2': false, 'data.used3': false }])
- if (item.data.data.features.nrgcost.flag) {
- let nrg = duplicate(this.data.data.nrg)
- nrg.activated -= item.data.data.features.nrgcost.value
- nrg.max += item.data.data.features.nrgcost.value
- await this.update({ 'data.nrg': nrg })
- }
- if (item.data.data.features.bonushealth.flag) {
- let health = duplicate(this.data.data.secondary.health)
- health.value -= Number(item.data.data.features.bonushealth.value) || 0
- health.max -= Number(item.data.data.features.bonushealth.value) || 0
- await this.update({ 'data.secondary.health': health })
- }
- if (item.data.data.features.bonusdelirium.flag) {
- let delirium = duplicate(this.data.data.secondary.delirium)
- delirium.value -= Number(item.data.data.features.bonusdelirium.value) || 0
- delirium.max -= Number(item.data.data.features.bonusdelirium.value) || 0
- await this.update({ 'data.secondary.delirium': delirium })
- }
- if (item.data.data.features.bonusnrg.flag) {
- let nrg = duplicate(this.data.data.nrg)
- nrg.value -= Number(item.data.data.features.bonusnrg.value) || 0
- nrg.max -= Number(item.data.data.features.bonusnrg.value) || 0
- await this.update({ 'data.nrg': nrg })
- }
- this.disableWeaverPerk(item)
- PegasusUtility.createChatWithRollMode(item.name, {
- content: await renderTemplate(`systems/fvtt-pegasus-rpg/templates/chat-perk-ready.html`, { name: this.name, perk: item })
- });
-
- }
- if (status == "activated") {
- // Add effects linked to the perk
- let effects = []
- for (let effect of item.data.data.effectsgained) {
- effect.data.perkId = itemId // Link to the perk, in order to dynamically remove them
- effect.data.isUsed = false // Flag to indicate removal when used in a roll window
- effects.push(effect)
- }
- if (effects.length) {
- await this.createEmbeddedDocuments('Item', effects)
- }
- // Manage additional flags
- if (item.data.data.features.nrgcost.flag) {
- if ((this.data.data.nrg.value >= item.data.data.features.nrgcost.value) && (this.data.data.nrg.max >= item.data.data.features.nrgcost.value)) {
- let nrg = duplicate(this.data.data.nrg)
- nrg.activated += item.data.data.features.nrgcost.value
- nrg.value -= item.data.data.features.nrgcost.value
- nrg.max -= item.data.data.features.nrgcost.value
- await this.update({ 'data.nrg': nrg })
- } else {
- updateOK = false
- ui.notifications.warn("Not enough NRG to activate the Perk " + item.name)
- }
- }
- if (item.data.data.features.bonushealth.flag) {
- let health = duplicate(this.data.data.secondary.health)
- health.value += Number(item.data.data.features.bonushealth.value) || 0
- health.max += Number(item.data.data.features.bonushealth.value) || 0
- await this.update({ 'data.secondary.health': health })
- }
- if (item.data.data.features.bonusdelirium.flag) {
- let delirium = duplicate(this.data.data.secondary.delirium)
- delirium.value += Number(item.data.data.features.bonusdelirium.value) || 0
- delirium.max += Number(item.data.data.features.bonusdelirium.value) || 0
- await this.update({ 'data.secondary.delirium': delirium })
- }
- if (item.data.data.features.bonusnrg.flag) {
- let nrg = duplicate(this.data.data.nrg)
- nrg.value += Number(item.data.data.features.bonusnrg.value) || 0
- nrg.max += Number(item.data.data.features.bonusnrg.value) || 0
- await this.update({ 'data.nrg': nrg })
- }
- this.enableWeaverPerk(item)
- }
- if (updateOK) {
- await this.updateEmbeddedDocuments('Item', [{ _id: item.id, 'data.status': status }])
- }
- }
+ Imperium5Utility.saveRollData(rollData);
}
/* -------------------------------------------- */
@@ -801,125 +172,6 @@ export class PegasusActor extends Actor {
}
}
- /* -------------------------------------------- */
- async computeNRGHealth() {
- if (this.isToken) return
-
- if (this.isOwner || game.user.isGM) {
- let updates = {}
- let phyDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.phy.value) + this.data.data.secondary.health.bonus + this.data.data.statistics.phy.mod;
- if (phyDiceValue != this.data.data.secondary.health.max) {
- updates['data.secondary.health.max'] = phyDiceValue
- }
- if (this.computeValue) {
- updates['data.secondary.health.value'] = phyDiceValue
- }
- let mndDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.mnd.value) + this.data.data.secondary.delirium.bonus + this.data.data.statistics.mnd.mod;
- if (mndDiceValue != this.data.data.secondary.delirium.max) {
- updates['data.secondary.delirium.max'] = mndDiceValue
- }
- if (this.computeValue) {
- updates['data.secondary.delirium.value'] = mndDiceValue
- }
- let stlDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.stl.value) + this.data.data.secondary.stealthhealth.bonus + this.data.data.statistics.stl.mod;
- if (stlDiceValue != this.data.data.secondary.stealthhealth.max) {
- updates['data.secondary.stealthhealth.max'] = stlDiceValue
- }
- if (this.computeValue) {
- updates['data.secondary.stealthhealth.value'] = stlDiceValue
- }
-
- let socDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.soc.value) + this.data.data.secondary.socialhealth.bonus + this.data.data.statistics.soc.mod;
- if (socDiceValue != this.data.data.secondary.socialhealth.max) {
- updates['data.secondary.socialhealth.max'] = socDiceValue
- }
- if (this.computeValue) {
- updates['data.secondary.socialhealth.value'] = socDiceValue
- }
-
- let nrgValue = PegasusUtility.getDiceValue(this.data.data.statistics.foc.value) + this.data.data.nrg.mod + this.data.data.statistics.foc.mod
- if (nrgValue != this.data.data.nrg.absolutemax) {
- updates['data.nrg.absolutemax'] = nrgValue
- }
- if (this.computeValue) {
- updates['data.nrg.max'] = nrgValue
- updates['data.nrg.value'] = nrgValue
- }
-
- nrgValue = PegasusUtility.getDiceValue(this.data.data.statistics.mnd.value) + this.data.data.statistics.mnd.mod;
- if (nrgValue != this.data.data.combat.stunthreshold) {
- updates['data.combat.stunthreshold'] = nrgValue
- }
-
- let momentum = this.data.data.statistics.foc.value + this.data.data.statistics.foc.mod
- if (momentum != this.data.data.momentum.max) {
- updates['data.momentum.value'] = 0
- updates['data.momentum.max'] = momentum
- }
-
- let mrLevel = (this.data.data.statistics.agi.value + this.data.data.statistics.str.value) - this.data.data.statistics.phy.value
- mrLevel = (mrLevel < 1) ? 1 : mrLevel;
- if (mrLevel != this.data.data.mr.value) {
- updates['data.mr.value'] = mrLevel
- }
-
- let race = this.getRace()
- if (race && race.name && (race.name != this.data.data.biodata.racename)) {
- updates['data.biodata.racename'] = race.name
- }
- let role = this.getRole()
- if (role && role.name && (role.name != this.data.data.biodata.rolename)) {
- updates['data.biodata.rolename'] = role.name
- }
- //console.log("UPD", updates, this.data.data.biodata)
- await this.update(updates)
-
- this.computeThreatLevel()
- }
-
- if (this.isOwner || game.user.isGM) {
- // 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
- }
- }
-
- /* -------------------------------------------- */
- async modStat(key, inc = 1) {
- let stat = duplicate(this.data.data.statistics[key])
- stat.mod += parseInt(inc)
- await this.update({ [`data.statistics.${key}`]: stat })
- }
-
- /* -------------------------------------------- */
- async valueStat(key, inc = 1) {
- key = key.toLowerCase()
- let stat = duplicate(this.data.data.statistics[key])
- stat.value += parseInt(inc)
- await this.update({ [`data.statistics.${key}`]: stat })
- }
-
- /* -------------------------------------------- */
- async addIncSpec(spec, inc = 1) {
- console.log("Using spec : ", spec, inc)
- let specExist = this.data.items.find(item => item.type == 'specialisation' && item.name.toLowerCase() == spec.name.toLowerCase())
- if (specExist) {
- specExist = duplicate(specExist)
- specExist.data.level += inc;
- let update = { _id: specExist._id, "data.level": specExist.data.level };
- await this.updateEmbeddedDocuments('Item', [update]);
- } else {
- spec.data.level += inc;
- await this.createEmbeddedDocuments('Item', [spec]);
- }
- }
-
/* -------------------------------------------- */
async incDecQuantity(objetId, incDec = 0) {
let objetQ = this.data.items.get(objetId)
@@ -930,145 +182,6 @@ export class PegasusActor extends Actor {
}
}
}
- /* -------------------------------------------- */
- async incDecAmmo(objetId, incDec = 0) {
- let objetQ = this.data.items.get(objetId)
- if (objetQ) {
- let newQ = objetQ.data.data.ammocurrent + incDec;
- if ( newQ >= 0 && newQ <= objetQ.data.data.ammomax) {
- const updated = await this.updateEmbeddedDocuments('Item', [{ _id: objetQ.id, 'data.ammocurrent': newQ }]); // pdates one EmbeddedEntity
- }
- }
- }
-
- /* -------------------------------------------- */
- async applyAbility(ability, updates = [], directUpdate = false) {
- // manage stat bonus
- if (ability.data.affectedstat != "notapplicable") {
- let stat = duplicate(this.data.data.statistics[ability.data.affectedstat])
- stat.mod += Number(ability.data.statmodifier)
- 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) {
- 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) {
- let updates = { 'data.biodata.racename': race.name }
- let newItems = []
- await this.deleteAllItemsByType('race')
- newItems.push(race);
-
- for (let ability of race.data.abilities) {
- newItems.push(ability)
- this.applyAbility(ability, updates)
- }
- if (race.data.perksgained) {
- for (let power of race.data.perks) {
- newItems.push(power);
- }
- }
-
- await this.update(updates)
- await this.createEmbeddedDocuments('Item', newItems)
- console.log("Updates", updates, newItems)
- console.log("Updated actor", this)
- }
-
- /* -------------------------------------------- */
- getIncreaseStatValue(updates, statKey) {
- let stat = duplicate(this.data.data.statistics[statKey])
- stat.value += 1;
- updates[`data.statistics.${statKey}`] = stat
- }
-
- /* -------------------------------------------- */
- async applyRole(role) {
- console.log("ROLE", role)
-
- let updates = { 'data.biodata.rolename': role.name }
- let newItems = []
- await this.deleteAllItemsByType('role')
- newItems.push(role);
-
- this.getIncreaseStatValue(updates, role.data.statincrease1)
- this.getIncreaseStatValue(updates, role.data.statincrease2)
-
- //newItems = newItems.concat(duplicate(role.data.specialisationsplus1))
- newItems = newItems.concat(duplicate(role.data.specialperk))
-
- await this.update(updates)
- await this.createEmbeddedDocuments('Item', newItems)
- }
-
-
- /* -------------------------------------------- */
- addHindrancesList(effectsList) {
- if (this.data.data.combat.stunlevel > 0) {
- 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 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')
- for (let effect of effects) {
- effect = duplicate(effect)
- if (effect.data.hindrance) {
- effectsList.push({ label: effect.name, type: "effect", applied: false, effect: effect, value: effect.data.effectlevel })
- }
- }
- }
/* -------------------------------------------- */
/* ROLL SECTION
@@ -1090,214 +203,24 @@ export class PegasusActor extends Actor {
}
}
- /* -------------------------------------------- */
- addArmorsShields(rollData, statKey = "none", useShield = false) {
- if (statKey == 'phy') {
- let armors = this.getArmors()
- for (let armor of armors) {
- rollData.armorsList.push({ label: `Armor ${armor.name}`, type: "other", applied: false, value: armor.data.resistance })
- }
- }
- if (useShield) {
- let shields = this.data.items.filter(item => item.type == "shield" && item.data.data.equipped)
- for (let sh of shields) {
- rollData.armorsList.push({ label: `Shield ${sh.name}`, type: "other", applied: false, value: sh.data.data.level })
- }
- }
- }
- addWeapons(rollData, statKey) {
- let weapons = this.getWeapons()
- for (let weapon of weapons) {
- if (weapon.data.equipped && weapon.data.statistic == statKey) {
- rollData.weaponsList.push({ label: `Attack ${weapon.name}`, type: "attack", applied: false, weapon: weapon, value: 0 })
- }
- if (weapon.data.equipped && weapon.data.enhanced && weapon.data.enhancedstat == statKey) {
- rollData.weaponsList.push({ label: `Enhanced Attack ${weapon.name}`, type: "enhanced", applied: false, weapon: weapon, value: weapon.data.enhancedlevel })
- }
- if (weapon.data.equipped && weapon.data.damagestatistic == statKey) {
- rollData.weaponsList.push({ label: `Damage ${weapon.name}`, type: "damage", applied: false, weapon: weapon, value: weapon.data.damage })
- }
- }
- }
- addEquipments(rollData, statKey) {
- let equipments = this.getEquipmentsOnly()
- for (let equip of equipments) {
- if (equip.data.equipped && equip.data.stataffected == statKey) {
- rollData.equipmentsList.push({ label: `Item ${equip.name}`, type: "item", applied: false, equip: equip, value: equip.data.level })
- }
- }
- }
-
/* -------------------------------------------- */
getCommonRollData(statKey = undefined, useShield = false) {
- let rollData = PegasusUtility.getBasicRollData()
+ let rollData = Imperium5Utility.getBasicRollData()
rollData.alias = this.name
rollData.actorImg = this.img
rollData.actorId = this.id
rollData.img = this.img
- rollData.activePerks = duplicate(this.getActivePerks())
-
- if (statKey) {
- rollData.statKey = statKey
- rollData.stat = this.getStat(statKey)
- rollData.statDicesLevel = rollData.stat.value
- rollData.statMod = rollData.stat.mod
- rollData.specList = this.getRelevantSpec(statKey)
- rollData.selectedSpec = "0"
- if (statKey.toLowerCase() == "mr") {
- rollData.img = "systems/fvtt-pegasus-rpg/images/icons/MR.webp"
- } else {
- rollData.img = `systems/fvtt-pegasus-rpg/images/icons/${rollData.stat.abbrev}.webp`
- }
- }
-
- this.addEffects(rollData)
- this.addArmorsShields(rollData, statKey, useShield)
- this.addWeapons(rollData, statKey, useShield)
- this.addEquipments(rollData, statKey)
return rollData
}
/* -------------------------------------------- */
async startRoll(rollData) {
- this.syncRoll(rollData);
- //console.log("ROLL DATA", rollData)
- let rollDialog = await PegasusRollDialog.create(this, rollData);
- console.log(rollDialog);
- rollDialog.render(true);
-
+ this.syncRoll(rollData)
+ let rollDialog = await Imperium5RollDialog.create(this, rollData)
+ console.log(rollDialog)
+ rollDialog.render(true)
}
- /* -------------------------------------------- */
- powerDmgRoll(itemId) {
- let power = this.data.items.get(itemId)
- if (power) {
- power = duplicate(power)
- this.rollPool(power.data.dmgstatistic)
- }
- }
- /* -------------------------------------------- */
- rollPool(statKey, useShield = false) {
- let stat = this.getStat(statKey)
- if (stat) {
- let rollData = this.getCommonRollData(statKey, useShield)
- rollData.mode = "stat"
- rollData.title = `Roll : ${stat.label} `
- rollData.img = "icons/dice/d12black.svg"
-
- this.startRoll(rollData)
- } else {
- ui.notifications.warn("Statistic not found !");
- }
- }
-
- /* -------------------------------------------- */
- rollUnarmedAttack() {
- let stat = this.getStat('com')
- if (stat) {
- let rollData = this.getCommonRollData(statKey)
- rollData.mode = "stat"
- rollData.title = `Unarmed Attack`;
- rollData.damages = this.getStat('str');
-
- this.startRoll(rollData);
- } else {
- ui.notifications.warn("Statistic not found !");
- }
- }
-
- /*-------------------------------------------- */
- rollStat(statKey) {
- let stat = this.getStat(statKey);
- if (stat) {
- let rollData = this.getCommonRollData(statKey)
- rollData.mode = "stat"
- rollData.title = `Stat ${stat.label}`;
-
- this.startRoll(rollData)
- } else {
- ui.notifications.warn("Statistic not found !");
- }
- }
-
- /* -------------------------------------------- */
- async rollSpec(specId) {
- let spec = this.getOneSpec(specId)
- if (spec) {
- let rollData = this.getCommonRollData(spec.data.statistic)
- rollData.mode = "spec"
- rollData.title = `Spec. : ${spec.name} `
- rollData.specList = [spec]
- rollData.selectedSpec = spec._id
- rollData.specName = spec.name
- rollData.img = spec.img
- rollData.specDicesLevel = spec.data.level
- this.startRoll(rollData)
- } else {
- ui.notifications.warn("Specialisation not found !");
- }
- }
-
- /* -------------------------------------------- */
- async rollMR(isInit = false, combatId = 0, combatantId = 0) {
- let mr = duplicate(this.data.data.mr)
- if (mr) {
- mr.dice = PegasusUtility.getDiceFromLevel(mr.value);
-
- let rollData = this.getCommonRollData("mr")
- rollData.mode = "MR"
- rollData.img = "systems/fvtt-pegasus-rpg/images/icons/MR.webp"
- rollData.isInit = isInit
- rollData.combatId = combatId
- rollData.combatantId = combatantId
- console.log("MR ROLL", rollData)
- this.startRoll(rollData);
- } else {
- ui.notifications.warn("MR not found !");
- }
- }
-
- /* -------------------------------------------- */
- async rollArmor(armorId) {
- let armor = this.data.items.get(armorId)
-
- if (armor) {
- let rollData = this.getCommonRollData(armor.data.statistic)
-
- armor = duplicate(armor);
- this.checkAndPrepareEquipment(armor);
-
- rollData.mode = "armor"
- rollData.armor = armor
- rollData.title = `Armor : ${armor.name}`
- rollData.isResistance = true;
- rollData.img = armor.img
- rollData.otherDicesLevel = armor.data.resistance
-
- this.startRoll(rollData);
- } else {
- ui.notifications.warn("Armor not found !", weaponId);
- }
- }
-
- /* -------------------------------------------- */
- async rollPower(powerId) {
- let power = this.data.items.get(powerId)
-
- if (power) {
- power = duplicate(power)
- let rollData = this.getCommonRollData(power.data.statistic)
-
- rollData.mode = "power"
- rollData.power = power
- rollData.title = `Power : ${power.name}`
- rollData.img = power.img
-
- this.startRoll(rollData);
- } else {
- ui.notifications.warn("Power not found !", powerId);
- }
- }
}
diff --git a/modules/imperium5-combat.js b/modules/imperium5-combat.js
index 352736f..44f2d6a 100644
--- a/modules/imperium5-combat.js
+++ b/modules/imperium5-combat.js
@@ -1,7 +1,7 @@
-import { Imperium5Utility } from "./imperium5pegasus-utility.js";
+import { Imperium5Utility } from "./imperium5-utility.js";
/* -------------------------------------------- */
-export class PegasusCombat extends Combat {
+export class Imperium5Combat extends Combat {
/* -------------------------------------------- */
async rollInitiative(ids, formula = undefined, messageOptions = {} ) {
@@ -20,19 +20,4 @@ export class PegasusCombat extends Combat {
_onUpdate(changed, options, userId) {
}
- /* -------------------------------------------- */
- static async checkTurnPosition() {
- while (game.combat.turn > 0) {
- await game.combat.previousTurn()
- }
- }
-
- /* -------------------------------------------- */
- static async decInitBy10( combatantId, value) {
- const combatant = game.combat.combatants.get(combatantId)
- let initValue = combatant.initiative + value
- await game.combat.setInitiative(combatantId, initValue)
- setTimeout( this.checkTurnPosition, 400) // The setInitiative is no more blocking for unknown reason
- }
-
}
diff --git a/modules/imperium5-commands.js b/modules/imperium5-commands.js
index f332e11..beb795b 100644
--- a/modules/imperium5-commands.js
+++ b/modules/imperium5-commands.js
@@ -4,14 +4,13 @@ import { Imperium5Utility } from "./imperium5-utility.js";
import { Imperium5RollDialog } from "./imperium5-roll-dialog.js";
/* -------------------------------------------- */
-export class PegasusCommands {
+export class Imperium5Commands {
static init() {
- if (!game.system.pegasus.commands) {
- const pegasusCommands = new PegasusCommands();
- pegasusCommands.registerCommand({ path: ["/char"], func: (content, msg, params) => pegasusCommands.createChar(msg), descr: "Create a new character" });
- pegasusCommands.registerCommand({ path: ["/pool"], func: (content, msg, params) => pegasusCommands.poolRoll(msg), descr: "Generic Roll Window" });
- game.system.pegasus.commands = pegasusCommands;
+ if (!game.system.imperium5.commands) {
+ const imperium5Commands = new Imperium5Commands();
+ //imperium5Commands.registerCommand({ path: ["/char"], func: (content, msg, params) => imperium5Commands.createChar(msg), descr: "Créer un personnnage" });
+ game.system.imperium5.commands = imperium5Commands;
}
}
constructor() {
@@ -96,11 +95,6 @@ export class PegasusCommands {
return false;
}
- /* -------------------------------------------- */
- async createChar(msg) {
- game.system.pegasus.creator = new PegasusActorCreate();
- game.system.pegasus.creator.start();
- }
/* -------------------------------------------- */
static _chatAnswer(msg, content) {
@@ -111,12 +105,12 @@ export class PegasusCommands {
/* -------------------------------------------- */
async poolRoll( msg) {
- let rollData = PegasusUtility.getBasicRollData()
+ let rollData = Imperium5Utility.getBasicRollData()
rollData.alias = "Dice Pool Roll",
rollData.mode = "generic"
rollData.title = `Dice Pool Roll`;
- let rollDialog = await PegasusRollDialog.create( this, rollData);
+ let rollDialog = await Imperium5RollDialog.create( this, rollData);
rollDialog.render( true );
}
diff --git a/modules/imperium5-item-sheet.js b/modules/imperium5-item-sheet.js
index 014076d..b902708 100644
--- a/modules/imperium5-item-sheet.js
+++ b/modules/imperium5-item-sheet.js
@@ -1,17 +1,19 @@
import { Imperium5Utility } from "./imperium5-utility.js";
+/* -------------------------------------------- */
/**
* Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet}
*/
-export class PegasusItemSheet extends ItemSheet {
+export class Imperium5ItemSheet extends ItemSheet {
+ /* -------------------------------------------- */
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
- classes: ["fvtt-pegasus-rpg", "sheet", "item"],
- template: "systems/fvtt-pegasus-rpg/templates/item-sheet.html",
+ classes: ["fvtt-imperium5", "sheet", "item"],
+ template: "systems/fvtt-imperium5/templates/item-sheet.html",
dragDrop: [{ dragSelector: null, dropSelector: null }],
width: 620,
height: 550,
@@ -48,9 +50,9 @@ export class PegasusItemSheet extends ItemSheet {
/* -------------------------------------------- */
async getData() {
- const objectData = PegasusUtility.data(this.object);
+ const objectData = Imperium5Utility.data(this.object);
- let itemData = foundry.utils.deepClone(PegasusUtility.templateData(this.object));
+ let itemData = foundry.utils.deepClone(Imperium5Utility.templateData(this.object));
let formData = {
title: this.title,
id: this.id,
@@ -59,13 +61,10 @@ export class PegasusItemSheet extends ItemSheet {
name: objectData.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
- optionsDiceList: PegasusUtility.getOptionsDiceList(),
- optionsStatusList: PegasusUtility.getOptionsStatusList(),
data: itemData,
limited: this.object.limited,
options: this.options,
owner: this.document.isOwner,
- mr: (this.object.type == 'specialisation'),
isGM: game.user.isGM
}
@@ -88,13 +87,13 @@ export class PegasusItemSheet extends ItemSheet {
/* -------------------------------------------- */
postItem() {
- let chatData = duplicate(PegasusUtility.data(this.item));
+ let chatData = duplicate( Imperium5Utility.data(this.item) )
if (this.actor) {
- chatData.actor = { id: this.actor.id };
+ chatData.actor = { id: this.actor.id }
}
// Don't post any image for the item (which would leave a large gap) if the default image is used
if (chatData.img.includes("/blank.png")) {
- chatData.img = null;
+ chatData.img = null
}
// JSON object for easy creation
chatData.jsondata = JSON.stringify(
@@ -103,8 +102,8 @@ export class PegasusItemSheet extends ItemSheet {
payload: chatData,
});
- renderTemplate('systems/fvtt-pegasus-rpg/templates/post-item.html', chatData).then(html => {
- let chatOptions = PegasusUtility.chatDataSetup(html);
+ renderTemplate('systems/fvtt-imperium5/templates/post-item.html', chatData).then(html => {
+ let chatOptions = Imperium5Utility.chatDataSetup(html);
ChatMessage.create(chatOptions)
});
}
@@ -117,7 +116,7 @@ export class PegasusItemSheet extends ItemSheet {
if (itemData.name != 'None') {
let spec = await Item.create(itemData, { temporary: true });
spec.data.origin = "embeddedItem";
- new PegasusItemSheet(spec).render(true);
+ new Imperium5ItemSheet(spec).render(true);
}
}
@@ -144,7 +143,7 @@ export class PegasusItemSheet extends ItemSheet {
if (itemData.name != 'None') {
let spec = await Item.create(itemData, { temporary: true });
spec.data.origin = "embeddedItem";
- new PegasusItemSheet(spec).render(true);
+ new Imperium5ItemSheet(spec).render(true);
}
}
@@ -162,343 +161,30 @@ export class PegasusItemSheet extends ItemSheet {
const li = $(ev.currentTarget).parents(".item");
const item = this.object.options.actor.getOwnedItem(li.data("item-id"));
item.sheet.render(true);
- });
-
- html.find('.delete-spec').click(ev => {
- this.object.update({ "data.specialisation": [{ name: 'None' }] });
- });
+ })
html.find('.delete-subitem').click(ev => {
this.deleteSubitem(ev);
- });
-
- html.find('.stat-choice-flag').click(ev => {
- let idx = $(ev.currentTarget).data("stat-idx");
- let array = duplicate(this.object.data.data.statincreasechoice);
- array[Number(idx)].flag = !array[Number(idx)].flag;
- this.object.update({ "data.statincreasechoice": array });
- });
+ })
// Update Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let itemId = li.data("item-id");
let itemType = li.data("item-type");
- });
-
- html.find('.view-subitem').click(ev => {
- this.viewSubitem(ev);
- });
-
- html.find('.view-spec').click(ev => {
- this.manageSpec();
- });
+ })
}
- /* -------------------------------------------- */
- async addAbility(event, item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- console.log("ABB", event, item, dataItem)
- if (event.toElement.className == 'drop-abilities') {
- let abilityArray = duplicate(this.object.data.data.abilities);
- abilityArray.push(newItem);
- await this.object.update({ 'data.abilities': abilityArray });
- }
- if (event.toElement.className == 'drop-optionnal-abilities') {
- let abilityArray = duplicate(this.object.data.data.optionnalabilities);
- abilityArray.push(newItem);
- await this.object.update({ 'data.optionnalabilities': abilityArray });
- }
- }
-
- /* -------------------------------------------- */
- async addRacePerk(event, item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- if (event.toElement.className == 'drop-race-perk') {
- let perkArray = duplicate(this.object.data.data.perks);
- perkArray.push(newItem);
- await this.object.update({ 'data.perks': perkArray });
- }
- }
-
- /* -------------------------------------------- */
- async addSpecialisation(item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- let specArray = [newItem];
- await this.object.update({ 'data.specialisation': specArray });
- }
-
- /* -------------------------------------------- */
- async addRoleSpecialisation(event, item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- console.log("Add spec", event, newItem);
- if (event.toElement.className == 'drop-spec1') {
- let specArray = duplicate(this.object.data.data.specialisationsplus1);
- specArray.push(newItem);
- await this.object.update({ 'data.specialisationsplus1': specArray });
- }
- if (event.toElement.className == 'drop-spec2') {
- let specArray = duplicate(this.object.data.data.specincrease);
- specArray.push(newItem);
- await this.object.update({ 'data.specincrease': specArray });
- }
- }
-
- /* -------------------------------------------- */
- async addRolePerk(event, item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- console.log("Add spec", event, newItem);
- if (event.toElement.className == 'drop-perk2') {
- let perkArray = duplicate(this.object.data.data.perks);
- perkArray.push(newItem);
- await this.object.update({ 'data.perks': perkArray });
- }
- if (event.toElement.className == 'drop-specialperk1') {
- let perkArray = duplicate(this.object.data.data.specialperk);
- perkArray.push(newItem);
- await this.object.update({ 'data.specialperk': perkArray });
- }
- }
-
- /* -------------------------------------------- */
- async addPower(event, item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- if (event.toElement.className == 'drop-spec-power') {
- let powArray = duplicate(this.object.data.data.powers);
- powArray.push(newItem);
- await this.object.update({ 'data.powers': powArray });
- }
- }
-
- /* -------------------------------------------- */
- async addAbilityPower(event, item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- if (event.toElement.className == 'drop-ability-power') {
- let powArray = duplicate(this.object.data.data.powersgained);
- powArray.push(newItem);
- 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) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- if (event.toElement.className == 'drop-ability-spec') {
- let powArray = duplicate(this.object.data.data.specialisations);
- powArray.push(newItem);
- await this.object.update({ 'data.specialisations': powArray });
- }
- }
- /* -------------------------------------------- */
- async addAbilityWeaponArmor(event, item, dataItem) {
- let newItem = duplicate(item.data);
- newItem._id = randomID(dataItem.id.length);
- if (event.toElement.className == 'drop-ability-weapon') {
- let weaponArray = duplicate(this.object.data.data.attackgained);
- weaponArray.push(newItem);
- await this.object.update({ 'data.attackgained': weaponArray });
- }
- if (event.toElement.className == 'drop-ability-armor') {
- let armorArray = duplicate(this.object.data.data.armorgained);
- armorArray.push(newItem);
- await this.object.update({ 'data.armorgained': armorArray });
- }
- }
-
- /* -------------------------------------------- */
- async addPerkSpecialisation(event, item, dataItem) {
- let newItem = duplicate(item.data);
- if (event.toElement.className == 'drop-spec-perk') {
- //console.log("PER SPEC", event)
- let key = event.toElement.dataset["key"];
- if (key == 'affectedspec') {
- await this.object.update({ 'data.features.affectedspec.value': newItem.name });
- } else {
- await this.object.update({ 'data.features.gainspecdice.value': newItem.name });
- }
- }
- }
-
- /* -------------------------------------------- */
- async addPerkEffect(event, item, dataItem) {
- let newItem = duplicate(item.data)
- if (event.toElement.className == 'drop-perk-effect') {
- let effectArray = duplicate(this.object.data.data.effectsgained)
- effectArray.push(newItem)
- await this.object.update({ 'data.effectsgained': effectArray })
- }
- }
-
- /* -------------------------------------------- */
- async addEffectPower(event, item, dataItem) {
- let newItem = duplicate(item.data)
- if (event.toElement.className == 'drop-power-effect') {
- let effectArray = duplicate(this.object.data.data.effectsgained)
- effectArray.push(newItem);
- await this.object.update({ 'data.effectsgained': effectArray })
- }
- }
-
- /* -------------------------------------------- */
- async addEffectSpec(event, item, dataItem) {
- let newItem = duplicate(item.data);
- if (event.toElement.className == 'drop-effect-spec') {
- let specArray = duplicate(this.object.data.data.recoveryrollspec);
- specArray.push(newItem);
- await this.object.update({ 'data.recoveryrollspec': specArray });
- }
- if (event.toElement.className == 'drop-effect-specaffected') {
- let specArray = duplicate(this.object.data.data.specaffected);
- specArray.push(newItem);
- await this.object.update({ 'data.specaffected': specArray });
- }
- }
-
- /* -------------------------------------------- */
- async addEffectItem(event, item, dataItem) {
- let newItem = duplicate(item.data);
- if (event.toElement.className == 'drop-equipment-effect') {
- let effectArray = duplicate(this.object.data.data.effects);
- effectArray.push(newItem);
- await this.object.update({ 'data.effects': effectArray });
- }
- }
/* -------------------------------------------- */
async _onDrop(event) {
-
- if (this.object.type == 'weapon' || this.object.type == 'armor' || this.object.type == 'shield'
- || this.object.type == 'equipment') {
- let data = event.dataTransfer.getData('text/plain');
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem);
- if (item.data.type == 'effect') {
- return this.addEffectItem(event, item, dataItem);
- }
- }
- }
-
- if (this.object.type == 'power') {
- let data = event.dataTransfer.getData('text/plain');
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem);
- if (item.data.type == 'effect') {
- return this.addEffectPower(event, item, dataItem);
- }
- }
- }
-
- if (this.object.type == 'effect') {
- let data = event.dataTransfer.getData('text/plain');
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem);
- if (item.data.type == 'specialisation') {
- return this.addEffectSpec(event, item, dataItem);
- }
- }
- }
-
- if (this.object.type == 'race') {
- let data = event.dataTransfer.getData('text/plain');
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem);
- if (item.data.type == 'ability') {
- return this.addAbility(event, item, dataItem);
- }
- if (item.data.type == 'perk') {
- return this.addRacePerk(event, item, dataItem);
- }
- }
- }
-
- if (this.object.type == 'perk') {
- let data = event.dataTransfer.getData('text/plain')
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem)
- if (item.data.type == 'specialisation') {
- return this.addPerkSpecialisation(event, item, dataItem)
- }
- if (item.data.type == 'effect') {
- return this.addPerkEffect(event, item, dataItem);
- }
- }
- }
-
- if (this.object.type == 'specialisation') {
- let data = event.dataTransfer.getData('text/plain');
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem);
- if (item.data.type == 'power') {
- return this.addPower(event, item, dataItem);
- }
- }
- }
- if (this.object.type == 'ability') {
- let data = event.dataTransfer.getData('text/plain');
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem);
- if (item.data.type == 'effect') {
- return this.addAbilityEffect(event, item, dataItem);
- }
- if (item.data.type == 'power') {
- return this.addAbilityPower(event, item, dataItem);
- }
- if (item.data.type == 'specialisation') {
- return this.addAbilitySpec(event, item, dataItem);
- }
- if (item.data.type == 'weapon' || item.data.type == 'armor') {
- return this.addAbilityWeaponArmor(event, item, dataItem);
- }
- }
- }
-
- if (this.object.type == 'role') {
- let data = event.dataTransfer.getData('text/plain');
- if (data) {
- let dataItem = JSON.parse(data);
- let item = await PegasusUtility.searchItem(dataItem);
- if (item.data.type == 'specialisation') {
- return this.addRoleSpecialisation(event, item, dataItem);
- }
- if (item.data.type == 'perk') {
- return this.addRolePerk(event, item, dataItem);
- }
- }
- }
-
- ui.notifications.warn("This item can not be dropped over another item");
}
/* -------------------------------------------- */
get template() {
let type = this.item.type;
- return `systems/fvtt-pegasus-rpg/templates/item-${type}-sheet.html`;
+ return `systems/fvtt-imperium5/templates/item-default-sheet.html`;
}
/* -------------------------------------------- */
diff --git a/modules/imperium5-item.js b/modules/imperium5-item.js
index ffdcd82..bd61122 100644
--- a/modules/imperium5-item.js
+++ b/modules/imperium5-item.js
@@ -1,32 +1,19 @@
export const defaultItemImg = {
- specialisation: "systems/fvtt-pegasus-rpg/images/icons/icon_spec.webp",
- perk: "systems/fvtt-pegasus-rpg/images/icons/icon_perk.webp",
- ability: "systems/fvtt-pegasus-rpg/images/icons/icon_raceability.webp",
- armor: "systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp",
- weapon: "systems/fvtt-pegasus-rpg/images/icons/icon_weapon.webp",
- equipment: "systems/fvtt-pegasus-rpg/images/icons/icon_equipment.webp",
- effect: "systems/fvtt-pegasus-rpg/images/icons/icon_effect.webp",
- race: "systems/fvtt-pegasus-rpg/images/icons/icon_race.webp",
- power: "systems/fvtt-pegasus-rpg/images/icons/icon_power.webp",
- armour: "systems/fvtt-pegasus-rpg/images/icons/icon_armour.webp",
- equipment: "systems/fvtt-pegasus-rpg/images/icons/icon_equipment.webp",
- weapon: "systems/fvtt-pegasus-rpg/images/icons/icon_meleeweapon.webp",
- shield: "systems/fvtt-pegasus-rpg/images/icons/icon_shield.webp",
- money: "systems/fvtt-pegasus-rpg/images/icons/icon_money.webp",
+ archetype: "systems/fvtt-imperium5/images/icons/archetype.webp",
}
/**
* Extend the basic ItemSheet with some very simple modifications
* @extends {ItemSheet}
*/
-export class PegasusItem extends Item {
+export class Imperium5Item extends Item {
constructor(data, context) {
if (!data.img) {
- data.img = defaultItemImg[data.type];
+ data.img = defaultItemImg[data.type]
}
- super(data, context);
+ super(data, context)
}
}
diff --git a/modules/imperium5-main.js b/modules/imperium5-main.js
index e76dac8..ff9996e 100644
--- a/modules/imperium5-main.js
+++ b/modules/imperium5-main.js
@@ -21,21 +21,11 @@ import { Imperium5Item } from "./imperium5-item.js";
/************************************************************************************/
Hooks.once("init", async function () {
- console.log(`Initializing Pegasus RPG`);
+ console.log(`Initializing Imperium5 RPG`);
/* -------------------------------------------- */
// preload handlebars templates
- PegasusUtility.preloadHandlebarsTemplates();
-
- /* -------------------------------------------- */
- game.settings.register("fvtt-pegasus-rpg", "dice-max-level", {
- name: "Maximum level value for dices lists",
- hint: "Se the maximum level value for dices lists",
- scope: "world",
- config: true,
- default: 20,
- type: Number
- });
+ Imperium5Utility.preloadHandlebarsTemplates();
/* -------------------------------------------- */
// Set an initiative formula for the system
@@ -45,30 +35,28 @@ Hooks.once("init", async function () {
};
/* -------------------------------------------- */
- game.socket.on("system.fvtt-pegasus-rpg", data => {
- PegasusUtility.onSocketMesssage(data)
+ game.socket.on("system.fvtt-imperium5", data => {
+ Imperium5Utility.onSocketMesssage(data)
});
/* -------------------------------------------- */
// Define custom Entity classes
- CONFIG.Combat.documentClass = PegasusCombat
- CONFIG.Actor.documentClass = PegasusActor
- CONFIG.Item.documentClass = PegasusItem
- //CONFIG.Token.objectClass = PegasusToken
- game.system.pegasus = { };
+ CONFIG.Combat.documentClass = Imperium5Combat
+ CONFIG.Actor.documentClass = Imperium5Actor
+ CONFIG.Item.documentClass = Imperium5Item
+ game.system.imperium5 = { }
/* -------------------------------------------- */
// Register sheet application classes
- Actors.unregisterSheet("core", ActorSheet);
- Actors.registerSheet("fvtt-pegasus", PegasusActorSheet, { types: ["character"], makeDefault: true });
- Actors.registerSheet("fvtt-pegasus", PegasusNPCSheet, { types: ["npc"], makeDefault: false });
+ Actors.unregisterSheet("core", ActorSheet)
+ Actors.registerSheet("fvtt-imperium5", Imperium5ActorSheet, { types: ["character"], makeDefault: true })
- Items.unregisterSheet("core", ItemSheet);
- Items.registerSheet("fvtt-pegasus", PegasusItemSheet, { makeDefault: true });
+ Items.unregisterSheet("core", ItemSheet)
+ Items.registerSheet("fvtt-imperium5", Imperium5ItemSheet, { makeDefault: true } )
- PegasusUtility.init();
+ Imperium5Utility.init()
-});
+})
/* -------------------------------------------- */
function welcomeMessage() {
@@ -76,15 +64,7 @@ function welcomeMessage() {
user: game.user.id,
whisper: [game.user.id],
content: `
- Welcome to the Pegasus Engine CORE RPG.
- Created by GMD Online
- The Pegasus Engine is a available for free on our website. It is also available as a PDF and in Print format at an affordable price.
- This project has been made possible thanks to all the Official GMD Members and Patreon Members that have supported me and as a result made it possible to supply this interface for free.
- In return I have made available a fully detailed Compendium for FREE for all members, which can be obtained from the Members page on my website.
- You too can become a supporter for future projects and enjoy amazing rewards.
- Sign up Here : https://www.gmdonline.co.uk/gmdmemberspage/
- GMD Online, GMD CORE RPG logo are © 2018 CORE Worlds and Game Rules © 2001. Interface © 2021 All rights reserved.
- Enjoy and become the hero you were born to be!
+ Bienvenue dans Imperium5 !
` });
}
@@ -93,36 +73,36 @@ function welcomeMessage() {
/* -------------------------------------------- */
Hooks.once("ready", function () {
- PegasusUtility.ready();
- // User warning
+ Imperium5Utility.ready()
+
if (!game.user.isGM && game.user.character == undefined) {
- ui.notifications.info("Warning ! No character linked to your user !");
+ ui.notifications.info("Attention ! Aucun personnage n'est relié !")
ChatMessage.create({
- content: "WARNING The player " + game.user.name + " is not linked to a character !",
+ content: "WARNING Le joueur " + game.user.name + " n'est pas connecté à un personnage !",
user: game.user._id
});
}
// CSS patch for v9
if (game.version) {
- let sidebar = document.getElementById("sidebar");
- sidebar.style.width = "min-content";
+ let sidebar = document.getElementById("sidebar")
+ sidebar.style.width = "min-content"
}
- welcomeMessage();
-});
+ welcomeMessage()
+})
/* -------------------------------------------- */
/* Foundry VTT Initialization */
/* -------------------------------------------- */
Hooks.on("chatMessage", (html, content, msg) => {
if (content[0] == '/') {
- let regExp = /(\S+)/g;
- let commands = content.match(regExp);
- if (game.system.pegasus.commands.processChatCommand(commands, content, msg)) {
- return false;
+ let regExp = /(\S+)/g
+ let commands = content.match(regExp)
+ if (game.system.imperium5.commands.processChatCommand(commands, content, msg)) {
+ return false
}
}
- return true;
+ return true
});
diff --git a/modules/imperium5-roll-dialog.js b/modules/imperium5-roll-dialog.js
index a963c69..c347238 100644
--- a/modules/imperium5-roll-dialog.js
+++ b/modules/imperium5-roll-dialog.js
@@ -1,20 +1,20 @@
import { Imperium5Utility } from "./imperium5-utility.js";
-export class PegasusRollDialog extends Dialog {
+export class Imperium5RollDialog extends Dialog {
/* -------------------------------------------- */
static async create(actor, rollData ) {
- let options = { classes: ["PegasusDialog"], width: 620, height: 380, 'z-index': 99999 };
- let html = await renderTemplate('systems/fvtt-pegasus-rpg/templates/roll-dialog-generic.html', rollData);
+ let options = { classes: ["Imperium5Dialog"], width: 620, height: 380, 'z-index': 99999 }
+ let html = await renderTemplate('systems/fvtt-imperium5/templates/roll-dialog-generic.html', rollData)
- return new PegasusRollDialog(actor, rollData, html, options );
+ return new Imperium5RollDialog(actor, rollData, html, options )
}
/* -------------------------------------------- */
constructor(actor, rollData, html, options, close = undefined) {
let conf = {
- title: (rollData.mode == "skill") ? "Skill" : "Roll",
+ title:"Jet",
content: html,
buttons: {
roll: {
@@ -38,202 +38,17 @@ export class PegasusRollDialog extends Dialog {
/* -------------------------------------------- */
roll () {
- PegasusUtility.rollPegasus( this.rollData )
+ Imperium5Utility.rollImperium5( this.rollData )
}
- /* -------------------------------------------- */
- manageEffects( effectIdx, toggled) {
- let effect = this.rollData.effectsList[effectIdx]
- if (effect) {
- effect.applied = toggled
-
- let level, genre, idVal
- if (effect.type == 'hindrance' ) {
- level = effect.value
- genre = 'positive'
- idVal = "#hindranceDicesLevel"
- }
- if (effect.type == 'effect' ) {
- let effectData = effect.effect
- level = effectData.data.effectlevel
- genre = effectData.data.genre
- effectData.data.isUsed = toggled
- if (effectData.data.bonusdice) {
- idVal = "#bonusDicesLevel"
- }
- if (effectData.data.reducedicevalue || effectData.data.statdice) {
- idVal = "#statDicesLevel"
- }
- if (effectData.data.otherdice) {
- idVal = "#otherDicesLevel"
- }
- if (effectData.data.hindrance) {
- idVal = "#hindranceDicesLevel"
- genre = 'positive' // Dynamic fix
- }
- }
- // Now process the dice level update
- let newLevel = Number($(idVal).val())
- console.log("Ongoing", newLevel, toggled, idVal )
- if (toggled) {
- if ( genre == 'positive') {
- newLevel += Number(level)
- }else {
- newLevel -= Number(level)
- }
- }else {
- if ( genre == 'positive') {
- newLevel -= Number(level)
- }else {
- newLevel += Number(level)
- }
- }
- newLevel = (newLevel<0) ? 0 : newLevel
- $(idVal).val(newLevel)
- }
- //console.log("Effect", effect, toggled)
- this.rollData.statDicesLevel = Number($('#statDicesLevel').val())
- this.rollData.specDicesLevel = Number($('#specDicesLevel').val())
- this.rollData.bonusDicesLevel = Number($('#bonusDicesLevel').val())
- this.rollData.hindranceDicesLevel = Number($('#hindranceDicesLevel').val())
- this.rollData.otherDicesLevel = Number($('#otherDicesLevel').val())
- }
-
- /* -------------------------------------------- */
- manageArmors( armorIdx, toggled) {
- let armor = this.rollData.armorsList[armorIdx]
- if (armor) {
- armor.applied = toggled
- if (armor.type == 'other' ) {
- if (toggled) {
- this.rollData.otherDicesLevel += Number(armor.value)
- } else {
- this.rollData.otherDicesLevel -= Number(armor.value)
- this.rollData.otherDicesLevel = (this.rollData.otherDicesLevel<0) ? 0 : this.rollData.otherDicesLevel
- }
- $("#otherDicesLevel").val(this.rollData.otherDicesLevel)
- }
- }
- console.log("Armor", armorIdx, toggled)
- }
-
- /* -------------------------------------------- */
- manageWeapons( weaponIdx, toggled) {
- let weapon = this.rollData.weaponsList[weaponIdx]
- if (weapon) {
- if (toggled) {
- this.rollData.weaponName = weapon.weapon.name
- } else {
- this.rollData.weaponName = undefined
- }
- weapon.applied = toggled
- if (weapon.type == 'damage' || weapon.type == 'enhanced' ) {
- if (toggled) {
- this.rollData.otherDicesLevel += Number(weapon.value)
- } else {
- this.rollData.weaponName = undefined
- this.rollData.otherDicesLevel -= Number(weapon.value)
- this.rollData.otherDicesLevel = (this.rollData.otherDicesLevel<0) ? 0 : this.rollData.otherDicesLevel
- }
- $("#otherDicesLevel").val(this.rollData.otherDicesLevel)
- }
- }
- console.log("Weapon", weaponIdx, toggled, this.rollData.otherDicesLevel, weapon)
- }
-
- /* -------------------------------------------- */
- manageEquip( equipIdx, toggled) {
- let equip = this.rollData.equipmentsList[equipIdx]
- if (equip) {
- equip.applied = toggled
- let idVal = "#otherDicesLevel" // Default
- if (equip.equip.data.bonusdice) {
- idVal = "#bonusDicesLevel"
- }
- if (equip.equip.data.statdice) {
- idVal = "#statDicesLevel"
- }
- if (equip.equip.data.otherdice) {
- idVal = "#otherDicesLevel"
- }
- let newLevel = Number($(idVal).val())
- if (toggled) {
- newLevel += Number(equip.value)
- } else {
- newLevel -= Number(equip.value)
- }
- newLevel = (newLevel <0) ? 0 : newLevel
- $(idVal).val(newLevel)
- // Then refresh
- this.rollData.statDicesLevel = Number($('#statDicesLevel').val())
- this.rollData.specDicesLevel = Number($('#specDicesLevel').val())
- this.rollData.bonusDicesLevel = Number($('#bonusDicesLevel').val())
- this.rollData.hindranceDicesLevel = Number($('#hindranceDicesLevel').val())
- this.rollData.otherDicesLevel = Number($('#otherDicesLevel').val())
- }
- }
-
/* -------------------------------------------- */
activateListeners(html) {
- super.activateListeners(html);
+ super.activateListeners(html)
- var dialog = this;
+ var dialog = this
function onLoad() {
}
- $(function () { onLoad(); });
-
- html.find('#specList').change(async (event) => {
- this.rollData.selectedSpec = event.currentTarget.value
- let spec = this.rollData.specList.find(item => item._id == this.rollData.selectedSpec)
- if ( spec) {
- this.rollData.specDiceLevel = spec.data.level
- this.rollData.specName = spec.name
- $('#specDicesLevel').val(this.rollData.specDiceLevel)
- } else {
- this.rollData.specName = undefined
- $('#specDicesLevel').val(0)
- }
- const content = await renderTemplate("systems/fvtt-pegasus-rpg/templates/roll-dialog-generic.html", this.rollData)
- this.data.content = content
- this.render(true)
- });
- html.find('#statDicesLevel').change((event) => {
- this.rollData.statDicesLevel = Number(event.currentTarget.value)
- });
- html.find('#specDicesLevel').change((event) => {
- this.rollData.specDicesLevel = Number(event.currentTarget.value)
- });
- html.find('#bonusDicesLevel').change((event) => {
- this.rollData.bonusDicesLevel = Number(event.currentTarget.value)
- });
- html.find('#hindranceDicesLevel').change((event) => {
- this.rollData.hindranceDicesLevel = Number(event.currentTarget.value)
- });
- html.find('#otherDicesLevel').change((event) => {
- this.rollData.otherDicesLevel = Number(event.currentTarget.value)
- });
- html.find('.effect-clicked').change((event) => {
- let toggled = event.currentTarget.checked
- let effectIdx = $(event.currentTarget).data("effect-idx")
- this.manageEffects( effectIdx, toggled)
- });
- html.find('.armor-clicked').change((event) => {
- let toggled = event.currentTarget.checked
- let armorIdx = $(event.currentTarget).data("armor-idx")
- this.manageArmors( armorIdx, toggled)
- });
- html.find('.weapon-clicked').change((event) => {
- let toggled = event.currentTarget.checked
- let weaponIdx = $(event.currentTarget).data("weapon-idx")
- this.manageWeapons( weaponIdx, toggled)
- });
- html.find('.equip-clicked').change((event) => {
- let toggled = event.currentTarget.checked
- let equipIdx = $(event.currentTarget).data("equip-idx")
- this.manageEquip( equipIdx, toggled)
- });
-
-
+ $(function () { onLoad(); })
}
}
\ No newline at end of file
diff --git a/modules/imperium5-utility.js b/modules/imperium5-utility.js
index c7e49aa..9976b12 100644
--- a/modules/imperium5-utility.js
+++ b/modules/imperium5-utility.js
@@ -12,21 +12,16 @@ export class Imperium5Utility {
/* -------------------------------------------- */
static async init() {
- Hooks.on('renderChatLog', (log, html, data) => PegasusUtility.chatListeners(html));
+ Hooks.on('renderChatLog', (log, html, data) => Imperium5Utility.chatListeners(html));
+
Hooks.on("getCombatTrackerEntryContext", (html, options) => {
- PegasusUtility.pushInitiativeOptions(html, options);
- });
- Hooks.on("dropCanvasData", (canvas, data) => {
- PegasusUtility.dropItemOnToken(canvas, data)
- });
+ Imperium5Utility.pushInitiativeOptions(html, options);
+ })
this.rollDataStore = {}
this.defenderStore = {}
- this.diceList = [];
- this.diceFoundryList = [];
- this.optionsDiceList = "";
- this.buildDiceLists();
- PegasusCommands.init();
+ this.diceList = []
+ Imperium5Commands.init();
Handlebars.registerHelper('count', function (list) {
return list.length;
@@ -50,23 +45,18 @@ export class Imperium5Utility {
Handlebars.registerHelper('mul', function (a, b) {
return parseInt(a) * parseInt(b);
})
+ Handlebars.registerHelper('exists', function (val) {
+ return val != null && val != undefined;
+ })
}
/* -------------------------------------------- */
static pushInitiativeOptions(html, options) {
- console.log('Option pushed....')
- options.push({ name: "Apply -10", condition: true, icon: ' ', callback: target => { PegasusCombat.decInitBy10(target.data('combatant-id'), -10); } })
- }
-
- /* -------------------------------------------- */
- static getSpecs() {
- return this.specs;
}
/* -------------------------------------------- */
static async ready() {
- const specs = await PegasusUtility.loadCompendium("fvtt-pegasus-rpg.specialisations");
- this.specs = specs.map(i => i.toObject());
+
}
/* -------------------------------------------- */
@@ -81,30 +71,6 @@ export class Imperium5Utility {
ChatMessage.create(chatData);
}
- /* -------------------------------------------- */
- static async dropItemOnToken(canvas, data) {
- if (data.type != "Item") {
- return
- }
-
- const position = canvas.grid.getTopLeft(data.x, data.y)
- let x = position[0]
- let y = position[1]
- const tokensList = [...canvas.tokens.placeables]
- for (let token of tokensList) {
- if (x >= token.x && x <= (token.x + token.width)
- && y >= token.y && y <= (token.y + token.height)) {
- let item = await this.searchItem(data)
- if (game.user.isGM || token.actor.isOwner) {
- 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
- }
- }
- }
-
/* -------------------------------------------- */
static async loadCompendiumData(compendium) {
const pack = game.packs.get(compendium);
@@ -113,106 +79,31 @@ export class Imperium5Utility {
/* -------------------------------------------- */
static async loadCompendium(compendium, filter = item => true) {
- let compendiumData = await PegasusUtility.loadCompendiumData(compendium);
+ let compendiumData = await Imperium5Utility.loadCompendiumData(compendium);
return compendiumData.filter(filter);
}
- /* -------------------------------------------- */
- static buildDiceLists() {
- let maxLevel = game.settings.get("fvtt-pegasus-rpg", "dice-max-level");
- let diceList = ["0"];
- let diceValues = [0];
- let diceFoundryList = ["d0"];
- let diceLevel = 1;
- let concat = "";
- let concatFoundry = "";
- let optionsDiceList = '0 ';
- let optionsLevel = '0 ';
- for (let i = 1; i <= maxLevel; i++) {
- let currentDices = concat + __level2Dice[diceLevel];
- diceList.push(currentDices);
- diceFoundryList.push(concatFoundry + __level2Dice[diceLevel] + "x");
- if (__level2Dice[diceLevel] == "d12") {
- concat = concat + "d12 ";
- concatFoundry = concatFoundry + "d12x, ";
- diceLevel = 1;
- } else {
- diceLevel++;
- }
- optionsDiceList += `${currentDices} `;
- optionsLevel += `${i} `;
- }
- this.diceList = diceList;
- this.diceFoundryList = diceFoundryList;
- this.optionsDiceList = optionsDiceList;
- this.optionsLevel = optionsLevel;
-
- this.optionsStatusList = 'Not applicable Health NRG Delirium ';
-
- }
-
/* -------------------------------------------- */
static getOptionsStatusList() {
return this.optionsStatusList;
}
- /* -------------------------------------------- */
- static getOptionsDiceList() {
- return this.optionsDiceList;
- }
- /* -------------------------------------------- */
- static getOptionsLevel() {
- return this.optionsLevel;
- }
-
- /* -------------------------------------------- */
- static computeAttackDefense(defenseRollId) {
- let defenseRollData = this.getRollData(defenseRollId);
- let attackRollData = this.getRollData(defenseRollData.linkedRollId);
- let defender = game.actors.get(defenseRollData.actorId);
- defender.processDefenseResult(defenseRollData, attackRollData);
- }
-
- /* -------------------------------------------- */
- static applyDamage(defenseRollId) {
- let defenseRollData = this.getRollData(defenseRollId);
- let defender = game.actors.get(defenseRollData.actorId);
- defender.applyDamageLoss(defenseRollData.finalDamage);
- }
-
- /* -------------------------------------------- */
- static applyNoDefense(actorId, attackRollId) {
- let attackRollData = this.getRollData(attackRollId);
- let defender = game.actors.get(actorId);
- defender.processNoDefense(attackRollData);
- }
/* -------------------------------------------- */
static async chatListeners(html) {
- html.on("click", '.chat-create-actor', event => {
- game.system.pegasus.creator.processChatEvent(event);
- });
html.on("click", '.view-item-from-chat', event => {
game.system.pegasus.creator.openItemView(event)
- });
+ })
}
/* -------------------------------------------- */
static async preloadHandlebarsTemplates() {
const templatePaths = [
- 'systems/fvtt-pegasus-rpg/templates/editor-notes-gm.html',
- 'systems/fvtt-pegasus-rpg/templates/partial-roll-select-effects.html',
- 'systems/fvtt-pegasus-rpg/templates/partial-options-statistics.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-equipment-types.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',
- 'systems/fvtt-pegasus-rpg/templates/partial-item-nav.html',
- 'systems/fvtt-pegasus-rpg/templates/partial-item-description.html',
- 'systems/fvtt-pegasus-rpg/templates/partial-actor-equipment.html'
+ 'systems/fvtt-imperium5/templates/editor-notes-gm.html',
+ 'systems/fvtt-imperium5/templates/actor-partial-ames.html',
+ 'systems/fvtt-imperium5/templates/actor-partial-paradigmes.html',
+ 'systems/fvtt-imperium5/templates/partial-item-description.html',
]
return loadTemplates(templatePaths);
}
@@ -241,15 +132,15 @@ export class Imperium5Utility {
}
static findChatMessageId(current) {
- return PegasusUtility.getChatMessageId(PegasusUtility.findChatMessage(current));
+ return Imperium5Utility.getChatMessageId(Imperium5Utility.findChatMessage(current))
}
static getChatMessageId(node) {
- return node?.attributes.getNamedItem('data-message-id')?.value;
+ return node?.attributes.getNamedItem('data-message-id')?.value
}
static findChatMessage(current) {
- return PegasusUtility.findNodeMatching(current, it => it.classList.contains('chat-message') && it.attributes.getNamedItem('data-message-id'));
+ return Imperium5Utility.findNodeMatching(current, it => it.classList.contains('chat-message') && it.attributes.getNamedItem('data-message-id'))
}
static findNodeMatching(current, predicate) {
@@ -257,14 +148,14 @@ export class Imperium5Utility {
if (predicate(current)) {
return current;
}
- return PegasusUtility.findNodeMatching(current.parentElement, predicate);
+ return Imperium5Utility.findNodeMatching(current.parentElement, predicate)
}
return undefined;
}
/* -------------------------------------------- */
static templateData(it) {
- return PegasusUtility.data(it)?.data ?? {}
+ return Imperium5Utility.data(it)?.data ?? {}
}
/* -------------------------------------------- */
@@ -275,29 +166,6 @@ export class Imperium5Utility {
return it;
}
- /* -------------------------------------------- */
- static getDiceValue(level = 0) {
- let diceString = this.diceList[level]
- let diceTab = diceString.split(" ")
- let diceValue = 0
- for (let dice of diceTab) {
- diceValue += __name2DiceValue[dice]
- }
- return diceValue
- }
-
- /* -------------------------------------------- */
- static getDiceFromLevel(level = 0) {
- level = Number(level)
- return this.diceList[level];
- }
- /* -------------------------------------------- */
- static getFoundryDiceFromLevel(level = 0) {
- level = Number(level)
- //console.log(this.diceFoundryList);
- return this.diceFoundryList[level];
- }
-
/* -------------------------------------------- */
static createDirectOptionList(min, max) {
let options = {};
@@ -326,29 +194,6 @@ export class Imperium5Utility {
return undefined;
}
- /* -------------------------------------------- */
- static getDefenseState(actorId) {
- return this.defenderStore[actorId];
- }
-
- /* -------------------------------------------- */
- static async updateDefenseState(defenderId, rollId) {
- this.defenderStore[defenderId] = rollId;
- if (game.user.character && game.user.character.id == defenderId) {
- let defender = game.actors.get(defenderId);
- let chatData = {
- user: game.user.id,
- alias: defender.name,
- rollMode: game.settings.get("core", "rollMode"),
- whisper: [game.user.id].concat(ChatMessage.getWhisperRecipients('GM')),
- content: `${defender.name} is under attack. He must roll a skill/weapon/technique to defend himself or suffer damages (button below).
- No defense
u.id);
- if (chatData.rollMode === "blindroll") chatData["blind"] = true;
- else if (chatData.rollMode === "selfroll") chatData["whisper"] = [game.user];
+ if (["gmroll", "blindroll"].includes(chatData.rollMode)) chatData["whisper"] = ChatMessage.getWhisperRecipients("GM").map(u => u.id)
+ if (chatData.rollMode === "blindroll") chatData["blind"] = true
+ else if (chatData.rollMode === "selfroll") chatData["whisper"] = [game.user]
if (forceWhisper) { // Final force !
- chatData["speaker"] = ChatMessage.getSpeaker();
- chatData["whisper"] = ChatMessage.getWhisperRecipients(forceWhisper);
+ chatData["speaker"] = ChatMessage.getSpeaker()
+ chatData["whisper"] = ChatMessage.getWhisperRecipients(forceWhisper)
}
return chatData;
@@ -444,28 +276,13 @@ export class Imperium5Utility {
whisper = [game.user.id];
break;
}
- await game.dice3d.showForRoll(roll, game.user, true, whisper, blind);
+ await game.dice3d.showForRoll(roll, game.user, true, whisper, blind)
}
}
}
/* -------------------------------------------- */
- static removeUsedPerkEffects(rollData) {
- // De-actived used effects from perks
- let toRem = []
- for (let effect of rollData.effectsList) {
- if (effect.effect.data.perkId && effect.effect.data.isUsed) {
- toRem.push(effect.effect._id)
- }
- }
- if (toRem.length > 0) {
- let actor = game.actors.get(rollData.actorId)
- actor.deleteEmbeddedDocuments('Item', toRem)
- }
- }
-
- /* -------------------------------------------- */
- static async rollPegasus(rollData) {
+ static async rollImperium5(rollData) {
let dicePool = [{ name: "stat", level: 0, statmod: 0 }, { name: "spec", level: 0 }, { name: "bonus", level: 0 }, { name: "hindrance", level: 0 }, { name: "other", level: 0 }];
if (rollData.stat) {
@@ -477,7 +294,7 @@ export class Imperium5Utility {
}
if (rollData.selectedSpec && rollData.selectedSpec != "0") {
rollData.spec = rollData.specList.find(item => item._id == rollData.selectedSpec);
- rollData.spec.data.dice = PegasusUtility.getDiceFromLevel(rollData.spec.data.level);
+ rollData.spec.data.dice = Imperium5Utility.getDiceFromLevel(rollData.spec.data.level);
}
if (rollData.spec) {
dicePool[1].level += Number(rollData.spec.data.level);
@@ -521,7 +338,7 @@ export class Imperium5Utility {
}
this.createChatWithRollMode(rollData.alias, {
- content: await renderTemplate(`systems/fvtt-pegasus-rpg/templates/chat-generic-result.html`, rollData)
+ content: await renderTemplate(`systems/fvtt-imperium5/templates/chat-generic-result.html`, rollData)
});
// Init stuf
@@ -536,29 +353,23 @@ export class Imperium5Utility {
this.saveRollData(rollData);
}
- /* -------------------------------------------- */
- static getDamageDice(result) {
- if (result < 0) return 0;
- return Math.floor(result / 5) + 1;
- }
-
/* ------------------------- ------------------- */
static async updateRoll(rollData) {
- let diceResults = rollData.diceResults;
- let sortedRoll = [];
+ let diceResults = rollData.diceResults
+ let sortedRoll = []
for (let i = 0; i < 10; i++) {
sortedRoll[i] = 0;
}
for (let dice of diceResults) {
- sortedRoll[dice.result]++;
+ sortedRoll[dice.result]++
}
let index = 0;
let bestRoll = 0;
for (let i = 0; i < 10; i++) {
if (sortedRoll[i] > bestRoll) {
- bestRoll = sortedRoll[i];
- index = i;
+ bestRoll = sortedRoll[i]
+ index = i
}
}
let bestScore = (bestRoll * 10) + index
@@ -574,33 +385,21 @@ export class Imperium5Utility {
/* ------------------------- ------------------- */
static async rerollDice(actorId, diceIndex = -1) {
- let actor = game.actors.get(actorId);
- let rollData = actor.getRollData();
+ let actor = game.actors.get(actorId)
+ let rollData = actor.getRollData()
- if (diceIndex == -1) {
- rollData.hasWillpower = actor.decrementWillpower();
- rollData.roll = undefined;
- } else {
- let myRoll = new Roll("1d6").roll({ async: false });
- await this.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"));
- console.log("Result: ", myRoll);
-
- rollData.roll.dice[0].results[diceIndex].result = myRoll.total; // Patch
- rollData.nbStrongHitUsed++;
- }
- this.rollFraggedKingdom(rollData);
}
/* -------------------------------------------- */
static getUsers(filter) {
- return game.users.filter(filter).map(user => user.data._id);
+ return game.users.filter(filter).map(user => user.data._id)
}
/* -------------------------------------------- */
static getWhisperRecipients(rollMode, name) {
switch (rollMode) {
- case "blindroll": return this.getUsers(user => user.isGM);
- case "gmroll": return this.getWhisperRecipientsAndGMs(name);
- case "selfroll": return [game.user.id];
+ case "blindroll": return this.getUsers(user => user.isGM)
+ case "gmroll": return this.getWhisperRecipientsAndGMs(name)
+ case "selfroll": return [game.user.id]
}
return undefined;
}
@@ -614,7 +413,7 @@ export class Imperium5Utility {
static blindMessageToGM(chatOptions) {
let chatGM = duplicate(chatOptions);
chatGM.whisper = this.getUsers(user => user.isGM);
- chatGM.content = "Blinde message of " + game.user.name + " " + chatOptions.content;
+ chatGM.content = "Message en aveugle à " + game.user.name + " " + chatOptions.content;
console.log("blindMessageToGM", chatGM);
game.socket.emit("system.fvtt-pegasus-rgp", { msg: "msg_gm_chat_message", data: chatGM });
}
@@ -653,17 +452,17 @@ export class Imperium5Utility {
switch (rollMode) {
case "blindroll": // GM only
if (!game.user.isGM) {
- this.blindMessageToGM(chatOptions);
+ this.blindMessageToGM(chatOptions)
chatOptions.whisper = [game.user.id];
- chatOptions.content = "Message only to the GM";
+ chatOptions.content = "Message only to the GM"
}
else {
- chatOptions.whisper = this.getUsers(user => user.isGM);
+ chatOptions.whisper = this.getUsers(user => user.isGM)
}
break;
default:
- chatOptions.whisper = this.getWhisperRecipients(rollMode, name);
+ chatOptions.whisper = this.getWhisperRecipients(rollMode, name)
break;
}
chatOptions.alias = chatOptions.alias || name;
@@ -675,49 +474,43 @@ export class Imperium5Utility {
let rollData = {
rollId: randomID(16),
rollMode: game.settings.get("core", "rollMode"),
- bonusDicesLevel: 0,
- hindranceDicesLevel: 0,
- otherDicesLevel: 0,
- statDicesLevel: 0,
- specDicesLevel: 0,
effectsList: [],
armorsList: [],
weaponsList: [],
equipmentsList: [],
- optionsDiceList: PegasusUtility.getOptionsDiceList()
+ optionsDiceList: Imperium5Utility.getOptionsDiceList()
}
- PegasusUtility.updateWithTarget(rollData)
+ Imperium5Utility.updateWithTarget(rollData)
return rollData
}
/* -------------------------------------------- */
static updateWithTarget(rollData) {
let objectDefender
- let target = PegasusUtility.getTarget();
+ let target = Imperium5Utility.getTarget()
if (target) {
let defenderActor = game.actors.get(target.data.actorId)
- objectDefender = PegasusUtility.data(defenderActor)
+ objectDefender = Imperium5Utility.data(defenderActor)
objectDefender = mergeObject(objectDefender, target.data.actorData)
rollData.defender = objectDefender
rollData.attackerId = this.id
rollData.defenderId = objectDefender._id
- defenderActor.addHindrancesList(rollData.effectsList)
}
}
/* -------------------------------------------- */
static createChatWithRollMode(name, chatOptions) {
- this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions);
+ this.createChatMessage(name, game.settings.get("core", "rollMode"), chatOptions)
}
/* -------------------------------------------- */
static async confirmDelete(actorSheet, li) {
let itemId = li.data("item-id");
- let msgTxt = "Are you sure to remove this Item ?";
+ let msgTxt = "
Etes vous certain de vouloir supprimer cet objet ?";
let buttons = {
delete: {
icon: ' ',
- label: "Yes, remove it",
+ label: "Oui",
callback: () => {
actorSheet.actor.deleteEmbeddedDocuments("Item", [itemId]);
li.slideUp(200, () => actorSheet.render(false));
@@ -725,12 +518,12 @@ export class Imperium5Utility {
},
cancel: {
icon: ' ',
- label: "Cancel"
+ label: "Annuler"
}
}
msgTxt += "
";
let d = new Dialog({
- title: "Confirm removal",
+ title: "Confirmer la suppression",
content: msgTxt,
buttons: buttons,
default: "cancel"
diff --git a/styles/simple.css b/styles/simple.css
index c562fa5..b57faec 100644
--- a/styles/simple.css
+++ b/styles/simple.css
@@ -193,7 +193,7 @@ table {border: 1px solid #7a7971;}
/* Styles limited to foundryvtt-vadentis sheets */
-.fvtt-pegasus-rpg .sheet-header {
+.fvtt-imperium5 .sheet-header {
-webkit-box-flex: 0;
-ms-flex: 0 0 210px;
flex: 0 0 210px;
@@ -213,15 +213,16 @@ table {border: 1px solid #7a7971;}
margin-bottom: 10px;
}
-.fvtt-pegasus-rpg .sheet-header .profile-img {
+.fvtt-imperium5 .sheet-header .profile-img {
-webkit-box-flex: 0;
-ms-flex: 0 0 128px;
flex: 0 0 128px;
- width: 196px;
+ width: 64px;
height: auto;
- max-height:260px;
+ max-height:128px;
margin-top: 0px;
margin-right: 10px;
+ margin-right: 10px;
object-fit: cover;
object-position: 50% 0;
}
@@ -255,34 +256,34 @@ table {border: 1px solid #7a7971;}
vertical-align: bottom;
}
-.fvtt-pegasus-rpg .sheet-header .header-fields {
+.fvtt-imperium5 .sheet-header .header-fields {
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
}
-.fvtt-pegasus-rpg .sheet-header h1.charname {
+.fvtt-imperium5 .sheet-header h1.charname {
height: 50px;
padding: 0px;
margin: 5px 0;
border-bottom: 0;
}
-.fvtt-pegasus-rpg .sheet-header h1.charname input {
+.fvtt-imperium5 .sheet-header h1.charname input {
width: 100%;
height: 100%;
margin: 0;
}
-.fvtt-pegasus-rpg .sheet-tabs {
+.fvtt-imperium5 .sheet-tabs {
-webkit-box-flex: 0;
-ms-flex: 0;
flex: 0;
}
-.fvtt-pegasus-rpg .sheet-body,
-.fvtt-pegasus-rpg .sheet-body .tab,
-.fvtt-pegasus-rpg .sheet-body .tab .editor {
+.fvtt-imperium5 .sheet-body,
+.fvtt-imperium5 .sheet-body .tab,
+.fvtt-imperium5 .sheet-body .tab .editor {
height: 100%;
font-size: 0.8rem;
}
@@ -305,70 +306,70 @@ table {border: 1px solid #7a7971;}
padding: 0 3px;
}
-.fvtt-pegasus-rpg .tox .tox-editor-container {
+.fvtt-imperium5 .tox .tox-editor-container {
background: #fff;
}
-.fvtt-pegasus-rpg .tox .tox-edit-area {
+.fvtt-imperium5 .tox .tox-edit-area {
padding: 0 8px;
}
-.fvtt-pegasus-rpg .resource-label {
+.fvtt-imperium5 .resource-label {
font-weight: bold;
text-transform: uppercase;
}
-.fvtt-pegasus-rpg .tabs {
+.fvtt-imperium5 .tabs {
height: 40px;
border-top: 1px solid #AAA;
border-bottom: 1px solid #AAA;
color: #000000;
}
-.fvtt-pegasus-rpg .tabs .item {
+.fvtt-imperium5 .tabs .item {
line-height: 40px;
font-weight: bold;
}
-.fvtt-pegasus-rpg .tabs .item.active {
+.fvtt-imperium5 .tabs .item.active {
text-decoration: underline;
text-shadow: none;
}
-.fvtt-pegasus-rpg .items-list {
+.fvtt-imperium5 .items-list {
list-style: none;
margin: 1px 0;
padding: 0;
overflow-y: auto;
}
-.fvtt-pegasus-rpg .items-list .item-header {
+.fvtt-imperium5 .items-list .item-header {
font-weight: bold;
}
-.fvtt-pegasus-rpg .items-list .item {
+.fvtt-imperium5 .items-list .item {
height: 30px;
line-height: 24px;
padding: 1px 0;
border-bottom: 1px solid #BBB;
}
-.fvtt-pegasus-rpg .items-list .item .item-image {
+.fvtt-imperium5 .items-list .item .item-image {
-webkit-box-flex: 0;
-ms-flex: 0 0 24px;
flex: 0 0 24px;
margin-right: 5px;
}
-.fvtt-pegasus-rpg .items-list .item img {
+.fvtt-imperium5 .items-list .item img {
display: block;
}
-.fvtt-pegasus-rpg .items-list .item-name {
+.fvtt-imperium5 .items-list .item-name {
margin: 0;
}
-.fvtt-pegasus-rpg .items-list .item-controls {
+.fvtt-imperium5 .items-list .item-controls {
-webkit-box-flex: 0;
-ms-flex: 0 0 86px;
flex: 0 0 86px;
@@ -379,7 +380,8 @@ table {border: 1px solid #7a7971;}
/* ======================================== */
/* Sheet */
.window-app.sheet .window-content .sheet-header{
- background: url("../images/ui/pc_sheet_bg.webp")
+ color: rgba(168, 139, 139, 0.5);
+ /*background: url("../images/ui/pc_sheet_bg.webp")*/
}
/* background: #011d33 url("../images/ui/fond1.webp") repeat left top;*/
/*color: rgba(168, 139, 139, 0.5);*/
@@ -410,10 +412,10 @@ table {border: 1px solid #7a7971;}
.window-app .window-content, .window-app.sheet .window-content .sheet-body{
font-size: 0.8rem;
- background: url("../images/ui/pc_sheet_bg.webp") repeat left top;
+ background: rgba(245,245,240,0.6);
+ /*background: url("../images/ui/pc_sheet_bg.webp") repeat left top;.*/
}
-/* background: rgba(245,245,240,0.6) url("../images/ui/sheet_background.webp") left top;*/
section.sheet-body{padding: 0.25rem 0.5rem;}
@@ -605,7 +607,7 @@ ul, li {
.devotion-label,
.sort-label,
.technique-label,
-.stat-label,
+.ame-label,
.arme-label,
.armure-label,
.equipement-label,
@@ -720,7 +722,7 @@ ul, li {
flex-shrink: 1;
flex-grow: 0;
}
-.npc-stat-label {
+.npc-ame-label {
flex-grow: 2;
}
@@ -739,7 +741,7 @@ ul, li {
margin-left: 0.25rem;
}
-.stats-table {
+.ames-table {
align-content: flex-start;
}
@@ -926,7 +928,7 @@ ul, li {
height: 64px;
}
-.stat-icon {
+.ame-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width:32px;
@@ -934,7 +936,7 @@ ul, li {
width: auto;
height: auto;
}
-.small-stat-icon {
+.small-ame-icon {
border: 0;
padding: 2px 2px 2px 2px;
max-width:16px;
@@ -1260,64 +1262,19 @@ ul, li {
}
/* =================== 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
*/
+.sheet-box {
+ border-radius: 5%;
+ background-color: #403f3eB0;
+ border-width: 1px;
+ padding: 0.4rem;
+ margin: 0.2rem;
+}
+
.color-class-black {
background-color: black;
background: black;
}
-.color-class-agi,
-.color-class-range {
- background-color: #02a41d;
- background: #02a41d;
-}
-.color-class-pool {
- background-color:#c5c3c3;
-}
-.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-mr {
- background-color: #050505;
-}
-.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);
}
@@ -1343,15 +1300,15 @@ Focus FOC: #ff0084
max-width: 128px;
justify-content: flex-start;
}
-.stat-item {
+.ame-item {
flex-grow: 1;
justify-content: flex-start;
margin: 2px;
}
-.stat-block {
+.ame-block {
min-width: 160px;
}
-.stat-margin {
+.ame-margin {
margin-left: 4px;
margin-top: 5px;
}
@@ -1359,14 +1316,14 @@ Focus FOC: #ff0084
margin-left: 4px;
margin-top: 3px;
}
-.stat-text-white {
+.ame-text-white {
color: white;
}
-.item-stat-roll {
+.item-ame-roll {
max-height: 42px;
min-height: 36px;
}
-.item-stat-roll select, .item-stat-roll input {
+.item-ame-roll select, .item-ame-roll input {
margin-top: 4px;
margin-right: 2px;
}
diff --git a/system.json b/system.json
index 842fdf2..e6abb86 100644
--- a/system.json
+++ b/system.json
@@ -30,9 +30,9 @@
"styles": [
"styles/simple.css"
],
- "templateVersion": 1,
+ "templateVersion": 4,
"title": "Imperium5 RPG",
"url": "https://www.uberwald.me/data/files/fvtt-imperium5",
- "version": "0.0.1",
+ "version": "0.0.4",
"background" : "./images/ui/imperium5_welcome_page.webp"
}
diff --git a/template.json b/template.json
index 2557e41..9f2b86f 100644
--- a/template.json
+++ b/template.json
@@ -1,424 +1,154 @@
{
"Actor": {
- "types": ["character", "npc"],
+ "types": [
+ "character"
+ ],
"templates": {
"biodata": {
"biodata": {
- "name": "",
"age": 0,
"size": "",
"weight": "",
"hair": "",
"sex": "",
"eyes": "",
+ "appactual": "",
+ "traits": "",
+ "identities": "",
+ "admid": "",
+ "memories": "",
+ "whoami": "",
"description": "",
- "worstfear": "",
- "worstfearactive": false,
- "desires": "",
- "desiresactive": false,
- "preferredhand": "",
- "catchphrase": "",
- "catchphraseused": false,
- "catchphrasetrigger": "",
- "charactervalue": 0,
- "level": 0,
- "threatlevel": 0,
- "cdp": 0,
- "cdpused": 0,
- "notes": "",
- "gmnotes": "",
- "racename": "",
- "rolename": ""
+ "gmnotes": ""
}
},
"core": {
- "race": [],
- "abilities": [],
"subactors": [],
- "statistics": {
- "agi":{
- "label": "Agility",
- "abbrev": "AGI",
- "level": 1,
- "value": 1,
- "mod": 0,
- "col": 1
+ "ames": {
+ "brutalite": {
+ "label": "Brutalité",
+ "type": "physique",
+ "value": 0,
+ "cohesion": 0
},
- "mnd":{
- "label": "Mind",
- "abbrev": "MND",
- "level": 1,
- "value": 1,
- "col": 1,
- "mod": 0
+ "dynamisme": {
+ "label": "Dynamisme",
+ "type": "physique",
+ "value": 0,
+ "cohesion": 0
},
- "soc":{
- "label": "Social",
- "abbrev": "SOC",
- "level": 1,
- "value": 1,
- "col": 1,
- "mod": 0
+ "autorite": {
+ "label": "Autorité",
+ "type": "social",
+ "value": 0,
+ "cohesion": 0
},
- "str":{
- "label": "Strength",
- "abbrev": "STR",
- "level": 1,
- "value": 1,
- "col": 1,
- "mod": 0
+ "simulacre": {
+ "label": "Simulacre",
+ "type": "social",
+ "value": 0,
+ "cohesion": 0
},
- "phy":{
- "label": "Physique",
- "abbrev": "PHY",
- "level": 1,
- "value": 1,
- "col": 1,
- "mod": 0
+ "savoir": {
+ "label": "Savoir",
+ "type": "mental",
+ "value": 0,
+ "cohesion": 0
},
- "com":{
- "label": "Combat",
- "abbrev": "COM",
- "level": 1,
- "value": 1,
- "col": 2,
- "mod": 0
- },
- "def":{
- "label": "Defence",
- "abbrev": "DEF",
- "level": 1,
- "value": 1,
- "col": 2,
- "mod": 0
- },
- "stl":{
- "label": "Stealth",
- "abbrev": "STL",
- "level": 1,
- "value": 1,
- "col": 2,
- "mod": 0
- },
- "per":{
- "label": "Perception",
- "abbrev": "PER",
- "level": 1,
- "value": 1,
- "col": 2,
- "mod": 0
- },
- "foc":{
- "label": "Focus",
- "abbrev": "FOC",
- "level": 1,
- "value": 1,
- "col": 2,
- "mod": 0
+ "creativite": {
+ "label": "Créativité",
+ "type": "mental",
+ "value": 0,
+ "cohesion": 0
}
},
- "nrg": {
- "label": "NRG",
- "type": "value",
- "absolutemax": 0,
- "value": 0,
- "max": 0,
- "mod": 0,
- "activated": 0
- },
- "mr": {
- "label": "MR (Initiative)",
- "type": "dice",
- "value": 0,
- "mod": 0
- },
- "momentum": {
- "label": "Momentum",
- "type": "value",
- "value": 0,
- "max": 0
- },
- "secondary": {
- "health": {
- "label": "Health",
+ "paradigmes": {
+ "humanite": {
+ "label": "Humanité",
"value": 0,
- "type": "value",
- "ismax": true,
- "iscombat": true,
- "bonus": 0,
- "max": 0
+ "editable": false
},
- "delirium": {
- "label": "Delirium",
+ "punk": {
+ "label": "Punk",
"value": 0,
- "type": "value",
- "ismax": true,
- "iscombat": true,
- "bonus": 0,
- "max": 0
+ "editable": false
},
- "stealthhealth": {
- "label": "STL Health",
- "type": "value",
+ "cyber": {
+ "label": "Cyber",
"value": 0,
- "ismax": true,
- "bonus": 0,
- "max": 0
- },
- "socialhealth": {
- "label": "SOC Health",
- "type": "value",
+ "editable": false
+ },
+ "virtuel": {
+ "label": "Virtuel",
"value": 0,
- "ismax": true,
- "bonus": 0,
- "max": 0
+ "editable": false
+ },
+ "perso": {
+ "label": "Perso",
+ "value": 0,
+ "editable": true
}
},
- "combat": {
- "bonusdice": 0,
- "otherdice": 0,
- "hindrancedice": 0,
- "stunlevel": 0,
- "stunthreshold": 0
+ "entropie": {
+ "label": "Entropie",
+ "seuil": 0,
+ "reserve": 0
}
- },
- "npccore": {
- "npctype": "",
- "description": ""
}
},
"character": {
- "templates": [ "biodata", "core" ]
- },
- "npc": {
- "templates": [ "npccore" ]
- }
+ "templates": [
+ "biodata",
+ "core"
+ ]
+ }
},
"Item": {
- "types": [ "race", "role", "ability", "specialisation", "perk", "power" , "armor", "shield", "equipment", "weapon", "effect", "money"],
- "effect": {
- "type": "",
- "genre": "",
- "effectlevel": 0,
- "reducedicevalue": false,
- "stataffected": "",
- "specaffected": [],
- "statdice": false,
- "bonusdice": false,
- "otherdice": false,
- "hindrance" : false,
- "resistedby": "",
- "recoveryroll": false,
- "recoveryrollstat": "",
- "recoveryrollspec": [],
- "effectstatlevel": false,
- "effectstat": "",
+ "types": [
+ "archetype",
+ "specialite",
+ "familiarite",
+ "nature",
+ "trait",
+ "symbiose",
+ "ressource",
+ "capacite",
+ "singularite",
+ "contact"
+ ],
+ "archetype": {
"description": ""
},
- "race": {
- "description": "",
- "environment": "",
- "society_culture": "",
- "outlook": "",
- "selectablestats": false,
- "statsonlyonce": false,
- "numberstats": 0,
- "abilities": [],
- "optionnalabilities": [],
- "nboptionnal": 0,
- "perksgained": false,
- "perksall": false,
- "perksnumber": 0,
- "perks": [],
- "statistics": ""
- },
- "role": {
- "statincrease1": "",
- "statincrease2": "",
- "messagespecplus1": "",
- "specialisationsplus1": [],
- "powers1": [],
- "MR": 0,
- "specialperk": [],
- "specincrease": [],
- "perks": [],
+ "specialite": {
"description": ""
},
- "ability": {
- "affectedstat": "str",
- "statmodifier": 1,
- "statlevelincrease": 0,
- "statusaffected": "",
- "statusmodifier": 0,
- "powersgained": [],
- "specialisations": [],
- "effectsgained": [],
- "aoe": "",
- "affectedcircumstances": "",
- "affectedspecialisations": "",
- "nrgcost": 0,
- "opponenthindrance": 0,
- "attackgained": [],
- "armorgained": [],
- "threatlevel": 0,
+ "familiarite": {
"description": ""
},
- "specialisation": {
- "statistic": "",
- "level": 1,
- "ispowergroup": false,
- "powersource": "",
- "powersactivated": false,
- "powers": [],
- "isthreatlevel": false,
+ "nature": {
"description": ""
},
- "perk": {
- "level": 1,
- "active": false,
- "duration": "",
- "isweaver": false,
- "effectsgained": [],
- "features": {
- "nrgcost": {
- "label": "NRG cost to use",
- "flag": false,
- "type": "number",
- "isvalid": true,
- "value": 0
- },
- "range": {
- "label": "Range",
- "flag": false,
- "type": "range",
- "isvalid": true,
- "value": ""
- },
- "nbtargets": {
- "label": "# Targets",
- "flag": false,
- "type": "string",
- "isvalid": true,
- "value": ""
- },
- "bonushealth": {
- "label": "Bonus to Health",
- "flag": false,
- "type": "string",
- "isvalid": true,
- "value": ""
- },
- "bonusnrg": {
- "label": "Bonus to NRG",
- "flag": false,
- "type": "string",
- "isvalid": true,
- "value": ""
- },
- "bonusdelirium": {
- "label": "Bonus to Delirium",
- "flag": false,
- "type": "string",
- "isvalid": true,
- "value": ""
- }
- },
- "status": "",
- "nbuse": "",
- "used1":false,
- "used2":false,
- "used3":false
- },
- "power": {
- "rollneeded": false,
- "statistic": "",
- "cost": 0,
- "costspent": 0,
- "range": "",
- "action": "",
- "type": "",
- "powersource": "",
- "effects": "",
- "activated": false,
- "purchasedeffects": "",
- "effectsgained": [],
- "dmgroll": false,
- "dmgstatistic": "",
+ "trait": {
"description": ""
- },
- "armor": {
- "statistic": "",
- "resistance": "",
- "weight": 0,
- "cost": 0,
- "idr": "",
- "equipped": false,
- "locationprotected": "",
- "effects": [],
- "activated": false,
- "description":""
},
- "shield": {
- "deftype": "",
- "level": "",
- "weight": 0,
- "cost": 0,
- "idr": "",
- "equipped": false,
- "effects": [],
- "activated": false,
- "description":""
+ "symbiose": {
+ "description": ""
},
- "equipment": {
- "type": "",
- "cost": 0,
- "weight": 0,
- "idr": "",
- "quantity": 0,
- "equipped": false,
- "stataffected": "",
- "level": 0,
- "statdice": false,
- "bonusdice": false,
- "otherdice": false,
- "effects": [],
- "activated": false,
- "iscontainer": false,
- "containercapacity": 0,
- "containerid": "",
- "threatlevel": 0,
- "description":""
- },
- "money" : {
+ "ressource": {
"value": 0,
- "quantity": 0,
- "weight": 0,
- "idr":"",
"description": ""
},
- "weapon": {
- "statistic": "",
- "damagestatistic": "",
- "damage": "",
- "cost": 0,
- "weight": 0,
- "idr": "",
- "range": "",
- "maxrange": "",
- "ao": "",
- "enhanced": false,
- "enhancedstat": "",
- "enhancedlevel": 0,
- "damagetype": "",
- "damagetypelevel": 0,
- "vehicledamagetype": "",
- "vehicledamagetypelevel": 0,
- "ammocurrent": 0,
- "ammomax": 0,
- "equipped": false,
- "effects": [],
- "activated": false,
+ "capacite": {
+ "type": "",
+ "description": ""
+ },
+ "singularite": {
+ "value": 0,
+ "description": ""
+ },
+ "contact": {
+ "value": 0,
"description": ""
}
}
-}
+}
\ No newline at end of file
diff --git a/templates/actor-partial-ames.html b/templates/actor-partial-ames.html
new file mode 100644
index 0000000..2bf1b00
--- /dev/null
+++ b/templates/actor-partial-ames.html
@@ -0,0 +1,13 @@
+{{#each data.ames as |ame key|}}
+ {{#if (eq ame.type ../typeame)}}
+
+
+
+
+
+
+
+ {{/if}}
+{{/each}}
diff --git a/templates/actor-partial-paradigmes.html b/templates/actor-partial-paradigmes.html
new file mode 100644
index 0000000..f0597f5
--- /dev/null
+++ b/templates/actor-partial-paradigmes.html
@@ -0,0 +1,16 @@
+{{#each data.paradigmes as |para key|}}
+
+
+ {{#if para.editable}}
+
+
+
+ {{else}}
+
+ {{/if}}
+
+
+
+{{/each}}
diff --git a/templates/actor-sheet.html b/templates/actor-sheet.html
index efa57a7..943036e 100644
--- a/templates/actor-sheet.html
+++ b/templates/actor-sheet.html
@@ -3,330 +3,148 @@
{{!-- Sheet Header --}}
- {{!-- Sheet Tab Navigation --}}
-
- Combat
- Specialisations
- Powers/Abilities
- Equipment
- Biography
-
-
{{!-- Sheet Body --}}
{{!-- Combat Tab --}}
-
-
-
-
-
+
-
-
-
-
-
-
- Ranged Attack
-
-
-
-
-
-
- Ranged Damage
-
-
+
+
+
+
+
Physique
+
+ {{>systems/fvtt-imperium5/templates/actor-partial-ames.html typeame="physique"}}
-
-
-
-
-
-
-
-
-
-
-
- Level
-
-
- Range
-
-
- #Targets
-
-
- Status
-
-
- Duration
-
-
-
-
-
-
-
-
-
-
+
+
+
Archetype
+
+
+
+ {{archetype.name}}
+
+
- {{#each perks as |perk key|}}
-
-
- {{perk.name}}
-
- {{perk.data.level}}
-
- {{#if perk.data.features.range.flag}}
- {{perk.data.features.range.value}}
- {{else}}
- -
-
- {{/if}}
- {{#if perk.data.features.nbtargets.flag}}
- {{perk.data.features.nbtargets.value}}
- {{else}}
- -
- {{/if}}
-
-
-
- {{#select perk.data.status}}
- Ready
- Activated
- 2 Rounds left
- 1 Round left
- {{/select}}
-
-
+
+
+
Spécialités
+
+ {{#each specialites as |spec key|}}
+
+
+ {{spec.name}}
+
+
+
+ {{/each}}
+
- {{#if (ne perk.data.status "ready")}}
- {{#if (eq perk.data.nbuse "next1action")}}
-
-
-
- {{/if}}
- {{#if (eq perk.data.nbuse "next2action")}}
-
-
-
- {{/if}}
- {{#if (eq perk.data.nbuse "next3action")}}
-
-
-
- {{/if}}
- {{else}}
-
-
-
- {{/if}}
-
-
-
- {{/each}}
-
+
Familiarités :
+
+ {{#each familiarites as |fami key|}}
+
+
+ {{fami.name}}
+
+
+
+ {{/each}}
+
+
+
+
+
+
+
Paradigmes
+
+ {{> systems/fvtt-imperium5/templates/actor-partial-paradigmes.html}}
+
+
-
-
-
-
-
- Level
-
-
- Type
-
-
- P/N
-
-
- Stat
-
-
- {{#each effects as |effect key|}}
-
-
- {{effect.name}}
- {{effect.data.effectlevel}}
- {{upperFirst effect.data.type}}
- {{upperFirst effect.data.genre}}
- {{upper effect.data.stataffected}}
-
-
-
- {{/each}}
-
{{!-- Other Tab --}}
-
-
-
-
- Stat
-
-
- Dice
-
-
- Powergroup
-
-
- {{#each specs as |spec key|}}
-
-
- {{spec.name}}
- {{upper spec.data.statistic}}
- {{spec.data.dice}}
- {{#if spec.data.ispowergroup}}
- {{#if spec.data.powersactivated}}
- Deactivate
- {{else}}
- Activate
- {{/if}}
- {{else}}
- -
- {{/if}}
-
-
-
- {{/each}}
-
-
+
+
+
+
+ Stat
+
+
+ Dice
+
+
+ Powergroup
+
+
+ {{#each specs as |spec key|}}
+
+
+ {{spec.name}}
+ {{upper spec.data.statistic}}
+ {{spec.data.dice}}
+ {{#if spec.data.ispowergroup}}
+ {{#if spec.data.powersactivated}}
+ Deactivate
+ {{else}}
+ Activate
+ {{/if}}
+ {{else}}
+ -
+ {{/if}}
+
+
+
+ {{/each}}
+
+
@@ -339,11 +157,21 @@
@@ -375,7 +203,8 @@
{{#each powers as |power key|}}
-
+
{{#if power.data.rollneeded}}
{{power.name}}
@@ -386,33 +215,34 @@
{{upperFirst power.data.type}}
- {{#if power.data.activated}}
- Activated
- {{else}}
- -
- {{/if}}
+ {{#if power.data.activated}}
+ Activated
+ {{else}}
+ -
+ {{/if}}
-
+
- {{upperFirst power.data.action}}
+ {{upperFirst power.data.action}}
- {{#if power.data.dmgroll}}
- {{upper power.data.dmgstatistic}}
- {{else}}
- -
- {{/if}}
-
+ {{#if power.data.dmgroll}}
+ {{upper power.data.dmgstatistic}}
+ {{else}}
+ -
+ {{/if}}
+
- {{power.data.cost}}
+ {{power.data.cost}}
-
+
@@ -436,10 +266,11 @@
Status Modifier
-
+
{{#each abilities as |ability key|}}
-
+
{{ability.name}}
{{upper ability.data.affectedstat}}
@@ -454,7 +285,7 @@
{{/each}}
-
+
@@ -482,20 +313,21 @@
IDR
-
+
{{#each moneys as |money key|}}
-
+
{{money.name}}
-
+
- {{money.data.quantity}}
- ( - /+ )
-
-
+ {{money.data.quantity}}
+ ( - /+ )
+
+
{{money.data.weight}}
-
+
{{#if money.data.idrDice}}
{{money.data.idrDice}}
@@ -527,45 +359,46 @@
DMG
- Ammo
+ Ammo
Act/Deact
- Weight
+ Weight
IDR
-
+
{{#each weapons as |weapon key|}}
-
+
{{weapon.name}}
{{upper weapon.data.statistic}}
{{upper weapon.data.damagestatistic}}
{{weapon.data.damageDice}}
-
+
{{#if (gt weapon.data.ammomax 0)}}
- {{weapon.data.ammocurrent}}/{{weapon.data.ammomax}}
+ {{weapon.data.ammocurrent}}/{{weapon.data.ammomax}}
( - /+ )
{{else}}
- -
-
+ -
+
{{/if}}
- {{#if (count weapon.data.effects)}}
+ {{#if (count weapon.data.effects)}}
{{#if weapon.data.activated}}
- Deactivate
+ Deactivate
{{else}}
- Activate
+ Activate
{{/if}}
- {{else}}
+ {{else}}
-
- {{/if}}
+ {{/if}}
{{weapon.data.weight}}
@@ -605,29 +438,30 @@
Act/Deact
- Weight
+ Weight
IDR
-
+
{{#each armors as |armor key|}}
-
+
{{armor.name}}
- {{upper armor.data.statistic}}
+ {{upper armor.data.statistic}}
{{armor.data.resistanceDice}}
{{armor.data.locationprotected}}
{{#if (count armor.data.effects)}}
- {{#if armor.data.activated}}
- Deactivate
- {{else}}
- Activate
- {{/if}}
+ {{#if armor.data.activated}}
+ Deactivate
{{else}}
- -
+ Activate
+ {{/if}}
+ {{else}}
+ -
{{/if}}
@@ -646,7 +480,7 @@
class="fas fa-circle">{{else}} {{/if}}
-
+
{{/each}}
@@ -662,27 +496,28 @@
Act/Deact
- Weight
+ Weight
IDR
-
+
{{#each shields as |shield key|}}
-
+
{{shield.name}}
{{shield.data.levelDice}}
{{#if (count shield.data.effects)}}
- {{#if shield.data.activated}}
- Deactivate
- {{else}}
- Activate
- {{/if}}
+ {{#if shield.data.activated}}
+ Deactivate
{{else}}
- -
+ Activate
+ {{/if}}
+ {{else}}
+ -
{{/if}}
@@ -716,22 +551,22 @@
Act/Deact
- Weight
+ Weight
IDR
-
+
{{#each containersTree as |equip key|}}
- {{> systems/fvtt-pegasus-rpg/templates/partial-actor-equipment.html equip=equip level=1}}
-
- {{#each equip.data.contents as |subgear key|}}
- {{> systems/fvtt-pegasus-rpg/templates/partial-actor-equipment.html equip=subgear level=2}}
- {{/each}}
-
+ {{> systems/fvtt-pegasus-rpg/templates/partial-actor-equipment.html equip=equip level=1}}
+
+ {{#each equip.data.contents as |subgear key|}}
+ {{> systems/fvtt-pegasus-rpg/templates/partial-actor-equipment.html equip=subgear level=2}}
+ {{/each}}
+
{{/each}}
-
+
@@ -777,12 +612,14 @@
Preferred Hand
-
-
+
+
Race
-
+
@@ -790,7 +627,8 @@
Role
-
+
@@ -803,14 +641,18 @@
Catchphrase :
@@ -827,7 +669,8 @@
Catchphrase used
-
+
@@ -840,13 +683,11 @@
Character Development Points Total (CDP total) :
-
+
Hero Level :
-
+
Hero Levels Remaining :
@@ -857,7 +698,7 @@
Threat Level :
-
+
diff --git a/templates/chat-create-actor.html b/templates/chat-create-actor.html
deleted file mode 100644
index 3b2a9af..0000000
--- a/templates/chat-create-actor.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
- {{#if (eq step "select-race")}}
-
Select a race from the list below
-
- {{/if}}
-
- {{#if (eq step "select-race-optionnal")}}
-
The selected Race has some optionnal abilities. Select one ability by clicking the relevant button below
- Remaining abilities to select : {{nboptionnal}}
-
-
- {{/if}}
-
- {{#if (eq step "select-race-stats")}}
-
Select Stats to gain +1 modifier :
- Remaining stats to select : {{numberstats}}
-
-
- {{#each stats as |stat key|}}
- {{#if @root.statsonlyonce}}
- {{#if stat.used}}
- {{else}}
-
- {{stat.label}} ({{stat.abbrev}})
- Select it !
-
- {{/if}}
- {{else}}
-
- {{stat.label}} ({{stat.abbrev}})
- Select it !
-
- {{/if}}
- {{/each}}
-
- {{/if}}
-
- {{#if (eq step "select-race-perks")}}
-
Now select {{nbraceperks}} Perk(s) for your character
-
-
- {{/if}}
-
- {{#if (eq step "select-role")}}
-
Now select a Role for your character.
-
-
- {{/if}}
-
- {{#if (eq step "select-role-start-spec")}}
-
Choose 1 Specialisation at +1DT :
-
-
- {{/if}}
-
- {{#if (eq step "select-role-stat")}}
-
Choose 1 Stat at +1DT :
-
-
- {{#each rolestats as |rolestat key|}}
-
- {{rolestat.label}}
- Select it !
-
- {{/each}}
-
- {{/if}}
-
- {{#if (eq step "select-role-spec")}}
-
Now select a specialisation at +{{dt}}DT.
-
-
- {{/if}}
-
- {{#if (eq step "select-role-perk")}}
-
Now select a Perk.
-
-
- {{/if}}
-
- {{#if (eq step "character-end")}}
-
Follow the next steps from the rulebook page 50 !. You can now spend 150 CDPs to customise your character.
-
- {{/if}}
-
-
-
diff --git a/templates/chat-effect-used.html b/templates/chat-effect-used.html
deleted file mode 100644
index f7c166e..0000000
--- a/templates/chat-effect-used.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
{{name}}
- {{#if img}}
-
- {{/if}}
-
Effect {{name}} has ben used and removed from the available effects.
-
diff --git a/templates/chat-opposed-damage.html b/templates/chat-opposed-damage.html
deleted file mode 100644
index e6f27a6..0000000
--- a/templates/chat-opposed-damage.html
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
- {{defenderName}} suffer damages from {{attackerName}} !
- Damages (inc. armor+weapon) : {{finalDamage}}
- Oppose damage roll with Chi
- Apply damage
-
-
diff --git a/templates/chat-opposed-fail.html b/templates/chat-opposed-fail.html
deleted file mode 100644
index 4e71d14..0000000
--- a/templates/chat-opposed-fail.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- {{defenderName}} wins the opposition against {{attackerName}} !
-
-
-
diff --git a/templates/chat-perk-ready.html b/templates/chat-perk-ready.html
deleted file mode 100644
index 8925b2a..0000000
--- a/templates/chat-perk-ready.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
{{name}}
- {{#if img}}
-
- {{/if}}
-
{{name}} has Just Deactivated the Perk: {{perk.name}}, make sure to manually delete all Effects provided by this Perk from Targets.
-
diff --git a/templates/item-ability-sheet.html b/templates/item-ability-sheet.html
deleted file mode 100644
index ef9da6c..0000000
--- a/templates/item-ability-sheet.html
+++ /dev/null
@@ -1,152 +0,0 @@
-
diff --git a/templates/item-armor-sheet.html b/templates/item-armor-sheet.html
deleted file mode 100644
index b6fd3c2..0000000
--- a/templates/item-armor-sheet.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
diff --git a/templates/item-default-sheet.html b/templates/item-default-sheet.html
new file mode 100644
index 0000000..b559558
--- /dev/null
+++ b/templates/item-default-sheet.html
@@ -0,0 +1,31 @@
+
diff --git a/templates/item-effect-sheet.html b/templates/item-effect-sheet.html
deleted file mode 100644
index 48fe87f..0000000
--- a/templates/item-effect-sheet.html
+++ /dev/null
@@ -1,149 +0,0 @@
-
diff --git a/templates/item-equipment-sheet.html b/templates/item-equipment-sheet.html
deleted file mode 100644
index 0d66d2d..0000000
--- a/templates/item-equipment-sheet.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
diff --git a/templates/item-money-sheet.html b/templates/item-money-sheet.html
deleted file mode 100644
index da8430c..0000000
--- a/templates/item-money-sheet.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
diff --git a/templates/item-perk-sheet.html b/templates/item-perk-sheet.html
deleted file mode 100644
index d353c99..0000000
--- a/templates/item-perk-sheet.html
+++ /dev/null
@@ -1,112 +0,0 @@
-
diff --git a/templates/item-power-sheet.html b/templates/item-power-sheet.html
deleted file mode 100644
index abb84fb..0000000
--- a/templates/item-power-sheet.html
+++ /dev/null
@@ -1,136 +0,0 @@
-
\ No newline at end of file
diff --git a/templates/item-race-sheet.html b/templates/item-race-sheet.html
deleted file mode 100644
index ec9bb16..0000000
--- a/templates/item-race-sheet.html
+++ /dev/null
@@ -1,134 +0,0 @@
-
\ No newline at end of file
diff --git a/templates/item-role-sheet.html b/templates/item-role-sheet.html
deleted file mode 100644
index b0aa6eb..0000000
--- a/templates/item-role-sheet.html
+++ /dev/null
@@ -1,114 +0,0 @@
-
diff --git a/templates/item-shield-sheet.html b/templates/item-shield-sheet.html
deleted file mode 100644
index 5614e11..0000000
--- a/templates/item-shield-sheet.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
diff --git a/templates/item-specialisation-sheet.html b/templates/item-specialisation-sheet.html
deleted file mode 100644
index c5c7c1c..0000000
--- a/templates/item-specialisation-sheet.html
+++ /dev/null
@@ -1,62 +0,0 @@
-
diff --git a/templates/item-weapon-sheet.html b/templates/item-weapon-sheet.html
deleted file mode 100644
index 3341e46..0000000
--- a/templates/item-weapon-sheet.html
+++ /dev/null
@@ -1,145 +0,0 @@
-
diff --git a/templates/npc-sheet.html b/templates/npc-sheet.html
deleted file mode 100644
index 6bfa5f1..0000000
--- a/templates/npc-sheet.html
+++ /dev/null
@@ -1,184 +0,0 @@
-
-
diff --git a/templates/partial-item-description.html b/templates/partial-item-description.html
index a78040b..2ab61fd 100644
--- a/templates/partial-item-description.html
+++ b/templates/partial-item-description.html
@@ -1,4 +1,4 @@
-
+
Description
diff --git a/templates/partial-item-nav.html b/templates/partial-item-nav.html
deleted file mode 100644
index 95b52cd..0000000
--- a/templates/partial-item-nav.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{{!-- Sheet Tab Navigation --}}
-
- Description
- Details
-
diff --git a/templates/partial-options-level.html b/templates/partial-options-level.html
deleted file mode 100644
index 0fb86c0..0000000
--- a/templates/partial-options-level.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{{#if notapplicable}}
-
Not applicable
-{{/if}}
-
0
-
d4
-
d6
-
d8
-
d10
-
d12
-
d12 d4
-
d12 d6
-
d12 d8
-
d12 d10
-
d12 d12
diff --git a/templates/partial-options-range.html b/templates/partial-options-range.html
deleted file mode 100644
index e08a1e5..0000000
--- a/templates/partial-options-range.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{{#if notapplicable}}
-
Not applicable
-{{/if}}
-
Self Only
-
Touch/Self
-
Threat Zone
-
Close
-
Medium
-
Long
-
Extreme
-
Line of Sight
-
TZ/Close
-
Close/Medium
-
Medium/Long
-
Long/Extreme
diff --git a/templates/partial-options-statistics.html b/templates/partial-options-statistics.html
deleted file mode 100644
index a187abf..0000000
--- a/templates/partial-options-statistics.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{{#if notapplicable}}
-
Not applicable
-{{/if}}
-{{#if all}}
-
All
-{{/if}}
-{{#if all}}
-
Special
-{{/if}}
-
AGI
-
MND
-
SOC
-
STR
-
PHY
-
COM
-
DEF
-
STL
-
PER
-
FOC
-{{#if mr}}
-
MR
-{{/if}}
diff --git a/templates/partial-roll-select-effects.html b/templates/partial-roll-select-effects.html
deleted file mode 100644
index b324929..0000000
--- a/templates/partial-roll-select-effects.html
+++ /dev/null
@@ -1,102 +0,0 @@
-
-{{#if (notEmpty effectsList)}}
-
Effects&Hindrances
-
-{{/if}}
-
-{{#if (notEmpty armorsList)}}
-
Armors&Shields
-
-{{/if}}
-
-{{#if (notEmpty weaponsList)}}
-
Weapons
-
-{{/if}}
-
-{{#if (notEmpty equipmentsList)}}
-
Items
-
-{{/if}}