Fix numbering

This commit is contained in:
sladecraven 2022-01-30 09:44:37 +01:00
parent 9974c5365a
commit f590e1fe6a
7 changed files with 87 additions and 43 deletions

View File

@ -224,17 +224,9 @@ export class PegasusActorSheet extends ActorSheet {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
async _onDrop(event) { async _onDropItem(event, dragData) {
let data = event.dataTransfer.getData('text/plain'); let item = await PegasusUtility.searchItem( dragData)
if (data) { this.actor.preprocessItem( event, item, true )
let dataItem = JSON.parse( data);
let npc = game.actors.get( dataItem.id);
if ( npc ) {
this.actor.addSubActor( dataItem.id);
return;
}
}
super._onDrop(event);
} }
/* -------------------------------------------- */ /* -------------------------------------------- */

View File

@ -255,8 +255,24 @@ export class PegasusActor extends Actor {
getAttribute(attrKey) { getAttribute(attrKey) {
return this.data.data.attributes[attrKey]; return this.data.data.attributes[attrKey];
} }
/* -------------------------------------------- */
/* -------------------------------------------- */
async preprocessItem( event, item, onDrop = false) {
if ( item.data.type == 'race') {
this.applyRace(item.data)
} else if ( item.data.type == 'ability') {
this.applyAbility(item.data, [], true)
await this.createEmbeddedDocuments('Item', [item.data] )
} else {
if ( onDrop) {
await super._onDropItem(event, dragData)
} else {
await this.createEmbeddedDocuments('Item', [item.data] )
}
}
}
/* -------------------------------------------- */
async equipGear(equipmentId) { async equipGear(equipmentId) {
let item = this.data.items.find(item => item.id == equipmentId); let item = this.data.items.find(item => item.id == equipmentId);
if (item && item.data.data) { if (item && item.data.data) {
@ -354,7 +370,7 @@ export class PegasusActor extends Actor {
/* -------------------------------------------- */ /* -------------------------------------------- */
async computeNRGHealth() { async computeNRGHealth() {
if ( this.isToken) return if ( this.isToken ) return
if (this.isOwner || game.user.isGM) { if (this.isOwner || game.user.isGM) {
let updates = {} let updates = {}
let phyDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.phy.value) + this.data.data.secondary.health.bonus + this.data.data.statistics.phy.mod; let phyDiceValue = PegasusUtility.getDiceValue(this.data.data.statistics.phy.value) + this.data.data.secondary.health.bonus + this.data.data.statistics.phy.mod;
@ -454,12 +470,15 @@ export class PegasusActor extends Actor {
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
applyAbility(ability, updates = []) { applyAbility(ability, updates = [], directUpdate = false) {
if (ability.data.affectedstat != "notapplicable") { if (ability.data.affectedstat != "notapplicable") {
let stat = duplicate(this.data.data.statistics[ability.data.affectedstat]) let stat = duplicate(this.data.data.statistics[ability.data.affectedstat])
stat.value += parseInt(ability.data.statlevelincrease) stat.value += parseInt(ability.data.statlevelincrease)
stat.mod += parseInt(ability.data.statmodifier) stat.mod += parseInt(ability.data.statmodifier)
updates[`data.statistics.${ability.data.affectedstat}`] = stat updates[`data.statistics.${ability.data.affectedstat}`] = stat
if(directUpdate) {
this.update(updates)
}
} }
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -470,7 +489,7 @@ export class PegasusActor extends Actor {
newItems.push(race); newItems.push(race);
for (let ability of race.data.abilities) { for (let ability of race.data.abilities) {
newItems.push(ability); newItems.push(ability)
this.applyAbility(ability, updates) this.applyAbility(ability, updates)
} }
if (race.data.powersgained) { if (race.data.powersgained) {

View File

@ -197,16 +197,6 @@ export class PegasusItemSheet extends ItemSheet {
} }
/* -------------------------------------------- */
async searchItem( dataItem) {
let item;
if (dataItem.pack) {
item = await fromUuid("Compendium."+dataItem.pack+"."+dataItem.id);
} else {
item = game.items.get(dataItem.id )
}
return item;
}
/* -------------------------------------------- */ /* -------------------------------------------- */
async addAbility(event, item, dataItem) { async addAbility(event, item, dataItem) {
let newItem = duplicate(item.data); let newItem = duplicate(item.data);
@ -362,7 +352,7 @@ export class PegasusItemSheet extends ItemSheet {
let data = event.dataTransfer.getData('text/plain'); let data = event.dataTransfer.getData('text/plain');
if (data) { if (data) {
let dataItem = JSON.parse( data ); let dataItem = JSON.parse( data );
let item = await this.searchItem( dataItem); let item = await PegasusUtility.searchItem( dataItem);
if ( item.data.type == 'specialisation') { if ( item.data.type == 'specialisation') {
return this.addEffectSpec( event, item, dataItem); return this.addEffectSpec( event, item, dataItem);
} }
@ -373,7 +363,7 @@ export class PegasusItemSheet extends ItemSheet {
let data = event.dataTransfer.getData('text/plain'); let data = event.dataTransfer.getData('text/plain');
if (data) { if (data) {
let dataItem = JSON.parse( data ); let dataItem = JSON.parse( data );
let item = await this.searchItem( dataItem); let item = await PegasusUtility.searchItem( dataItem);
if ( item.data.type == 'ability') { if ( item.data.type == 'ability') {
return this.addAbility( event, item, dataItem); return this.addAbility( event, item, dataItem);
} }
@ -387,7 +377,7 @@ export class PegasusItemSheet extends ItemSheet {
let data = event.dataTransfer.getData('text/plain'); let data = event.dataTransfer.getData('text/plain');
if (data) { if (data) {
let dataItem = JSON.parse( data ); let dataItem = JSON.parse( data );
let item = await this.searchItem( dataItem); let item = await PegasusUtility.searchItem( dataItem);
if ( item.data.type == 'specialisation') { if ( item.data.type == 'specialisation') {
return this.addPerkSpecialisation( event, item, dataItem); return this.addPerkSpecialisation( event, item, dataItem);
} }
@ -398,7 +388,7 @@ export class PegasusItemSheet extends ItemSheet {
let data = event.dataTransfer.getData('text/plain'); let data = event.dataTransfer.getData('text/plain');
if (data) { if (data) {
let dataItem = JSON.parse( data ); let dataItem = JSON.parse( data );
let item = await this.searchItem( dataItem); let item = await PegasusUtility.searchItem( dataItem);
if ( item.data.type == 'power') { if ( item.data.type == 'power') {
return this.addPower( event, item, dataItem); return this.addPower( event, item, dataItem);
} }
@ -408,7 +398,7 @@ export class PegasusItemSheet extends ItemSheet {
let data = event.dataTransfer.getData('text/plain'); let data = event.dataTransfer.getData('text/plain');
if (data) { if (data) {
let dataItem = JSON.parse( data ); let dataItem = JSON.parse( data );
let item = await this.searchItem( dataItem); let item = await PegasusUtility.searchItem( dataItem);
if ( item.data.type == 'power') { if ( item.data.type == 'power') {
return this.addAbilityPower( event, item, dataItem); return this.addAbilityPower( event, item, dataItem);
} }
@ -425,7 +415,7 @@ export class PegasusItemSheet extends ItemSheet {
let data = event.dataTransfer.getData('text/plain'); let data = event.dataTransfer.getData('text/plain');
if (data) { if (data) {
let dataItem = JSON.parse( data ); let dataItem = JSON.parse( data );
let item = await this.searchItem( dataItem); let item = await PegasusUtility.searchItem( dataItem);
if ( item.data.type == 'specialisation') { if ( item.data.type == 'specialisation') {
return this.addRoleSpecialisation( event, item, dataItem); return this.addRoleSpecialisation( event, item, dataItem);
} }

View File

@ -15,6 +15,7 @@ import { PegasusNPCSheet } from "./pegasus-npc-sheet.js";
import { PegasusUtility } from "./pegasus-utility.js"; import { PegasusUtility } from "./pegasus-utility.js";
import { PegasusCombat } from "./pegasus-combat.js"; import { PegasusCombat } from "./pegasus-combat.js";
import { PegasusItem } from "./pegasus-item.js"; import { PegasusItem } from "./pegasus-item.js";
import { PegasusToken } from "./pegasus-token.js";
/* -------------------------------------------- */ /* -------------------------------------------- */
/* Foundry VTT Initialization */ /* Foundry VTT Initialization */
@ -52,9 +53,10 @@ Hooks.once("init", async function () {
/* -------------------------------------------- */ /* -------------------------------------------- */
// Define custom Entity classes // Define custom Entity classes
CONFIG.Combat.documentClass = PegasusCombat; CONFIG.Combat.documentClass = PegasusCombat
CONFIG.Actor.documentClass = PegasusActor; CONFIG.Actor.documentClass = PegasusActor
CONFIG.Item.documentClass = PegasusItem; CONFIG.Item.documentClass = PegasusItem
//CONFIG.Token.objectClass = PegasusToken
game.system.pegasus = { }; game.system.pegasus = { };
/* -------------------------------------------- */ /* -------------------------------------------- */

6
modules/pegasus-token.js Normal file
View File

@ -0,0 +1,6 @@
import { PegasusUtility } from "./pegasus-utility.js";
/* -------------------------------------------- */
export class PegasusToken extends Token {
}

View File

@ -17,6 +17,10 @@ export class PegasusUtility {
Hooks.on("getCombatTrackerEntryContext", (html, options) => { Hooks.on("getCombatTrackerEntryContext", (html, options) => {
PegasusUtility.pushInitiativeOptions(html, options); PegasusUtility.pushInitiativeOptions(html, options);
}); });
Hooks.on("dropCanvasData", (canvas, data) => {
PegasusUtility.dropItemOnToken(canvas, data)
});
this.rollDataStore = {} this.rollDataStore = {}
this.defenderStore = {} this.defenderStore = {}
this.diceList = []; this.diceList = [];
@ -41,7 +45,7 @@ export class PegasusUtility {
/* -------------------------------------------- */ /* -------------------------------------------- */
static pushInitiativeOptions(html, options) { static pushInitiativeOptions(html, options) {
console.log('Option pushed....') console.log('Option pushed....')
options.push( { name: "Apply -10", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { PegasusCombat.decInitBy10(target.data('combatant-id'), -10); } } ) options.push({ name: "Apply -10", condition: true, icon: '<i class="fas fa-plus"></i>', callback: target => { PegasusCombat.decInitBy10(target.data('combatant-id'), -10); } })
} }
/* -------------------------------------------- */ /* -------------------------------------------- */
@ -55,6 +59,27 @@ export class PegasusUtility {
this.specs = specs.map(i => i.toObject()); this.specs = specs.map(i => i.toObject());
} }
/* -------------------------------------------- */
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)
token.actor.preprocessItem("none", item, false )
console.log("Dropped !!!", item, token)
return
}
}
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static async loadCompendiumData(compendium) { static async loadCompendiumData(compendium) {
const pack = game.packs.get(compendium); const pack = game.packs.get(compendium);
@ -152,7 +177,6 @@ export class PegasusUtility {
const templatePaths = [ const templatePaths = [
'systems/fvtt-pegasus-rpg/templates/editor-notes-gm.html', 'systems/fvtt-pegasus-rpg/templates/editor-notes-gm.html',
'systems/fvtt-pegasus-rpg/templates/partial-roll-common-dices.html',
'systems/fvtt-pegasus-rpg/templates/partial-roll-select-effects.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-statistics.html',
'systems/fvtt-pegasus-rpg/templates/partial-options-level.html', 'systems/fvtt-pegasus-rpg/templates/partial-options-level.html',
@ -449,8 +473,8 @@ export class PegasusUtility {
} }
// Init stuf // Init stuf
if (rollData.isInit) { if (rollData.isInit) {
let combat = game.combats.get( rollData.combatId) let combat = game.combats.get(rollData.combatId)
combat.updateEmbeddedDocuments("Combatant", [ { _id: rollData.combatantId, initiative: rollData.finalScore } ]); combat.updateEmbeddedDocuments("Combatant", [{ _id: rollData.combatantId, initiative: rollData.finalScore }]);
} }
// And save the roll // And save the roll
this.saveRollData(rollData); this.saveRollData(rollData);
@ -539,6 +563,17 @@ export class PegasusUtility {
game.socket.emit("system.fvtt-weapons-of-the-gods", { msg: "msg_gm_chat_message", data: chatGM }); game.socket.emit("system.fvtt-weapons-of-the-gods", { msg: "msg_gm_chat_message", data: chatGM });
} }
/* -------------------------------------------- */
static async searchItem(dataItem) {
let item;
if (dataItem.pack) {
item = await fromUuid("Compendium." + dataItem.pack + "." + dataItem.id);
} else {
item = game.items.get(dataItem.id)
}
return item;
}
/* -------------------------------------------- */ /* -------------------------------------------- */
static split3Columns(data) { static split3Columns(data) {

View File

@ -183,6 +183,6 @@
"templateVersion": 64, "templateVersion": 64,
"title": "Pegasus RPG", "title": "Pegasus RPG",
"url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg", "url": "https://www.uberwald.me/data/files/fvtt-pegasus-rpg",
"version": "0.2.7", "version": "0.3.0",
"background" : "./images/ui/pegasus_welcome_page.webp" "background" : "./images/ui/pegasus_welcome_page.webp"
} }