Skip to content

Commit

Permalink
12.01 changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ironmonk88 committed Jun 12, 2024
1 parent 064c9ed commit 19d0d5b
Show file tree
Hide file tree
Showing 23 changed files with 186 additions and 167 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
## Version 12.01

v12 compatibility

Fixed issue with items being created that aren't attached to an actor

Fixed issue that was preventing currency from being added to an Enhanced Journal Loot entry

Added the option to allow owned vehicles to be moved during combat.

## Version 11.17

Fixing a silly mistake that made redirecting rolls no longer work
Expand Down
10 changes: 5 additions & 5 deletions apps/assignxp.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export class AssignXPApp extends Application {
return self.findIndex((i) => { return i?.actor.id == a.actor.id }) === index;
});

this.initialActors = duplicate(this.actors);
this.initialActors = foundry.utils.duplicate(this.actors);

this.changeXP(options?.xp);
}
Expand All @@ -61,7 +61,7 @@ export class AssignXPApp extends Application {
}

static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
id: "assignexperience",
title: i18n("MonksTokenBar.AssignXP"),
template: "./modules/monks-tokenbar/templates/assignxp.html",
Expand Down Expand Up @@ -267,13 +267,13 @@ export class AssignXPApp extends Application {
this.render(true);
break;
case 'initial':
this.actors = duplicate(this.initialActors);
this.actors = foundry.utils.duplicate(this.initialActors);
this.changeXP();
this.render(true);
break;
case 'last':
if (AssignXP.lastTokens) {
this.actors = duplicate(AssignXP.lastTokens);
this.actors = foundry.utils.duplicate(AssignXP.lastTokens);
this.changeXP();
this.render(true);
}
Expand Down Expand Up @@ -358,7 +358,7 @@ export class AssignXPApp extends Application {
content: html
};

setProperty(chatData, "flags.monks-tokenbar", requestdata);
foundry.utils.setProperty(chatData, "flags.monks-tokenbar", requestdata);
msg = await ChatMessage.create(chatData, {});
this.close();
} else
Expand Down
24 changes: 12 additions & 12 deletions apps/contestedroll.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export class ContestedRollApp extends Application {

this.requestoptions = this.requestoptions.filter(g => g.groups);
for (let attr of this.requestoptions) {
attr.groups = duplicate(attr.groups);
attr.groups = foundry.utils.duplicate(attr.groups);
for (let [k, v] of Object.entries(attr.groups)) {
attr.groups[k] = v?.label || v;
}
Expand All @@ -39,7 +39,7 @@ export class ContestedRollApp extends Application {

static get defaultOptions() {
// let top = ($('#tokenbar').position()?.top || $('#hotbar').position()?.top || 300) - 260;
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
id: "contestedroll",
title: i18n("MonksTokenBar.ContestedRoll"),
template: "./modules/monks-tokenbar/templates/contestedroll.html",
Expand Down Expand Up @@ -154,7 +154,7 @@ export class ContestedRollApp extends Application {
chatData.whisper = requestedPlayers;

//chatData.flags["monks-tokenbar"] = {"testmsg":"testing"};
setProperty(chatData, "flags.monks-tokenbar", requestdata);
foundry.utils.setProperty(chatData, "flags.monks-tokenbar", requestdata);
msg = await ChatMessage.create(chatData, {});
msg.mtb_callback = this.opts.callback;
if (setting('request-roll-sound-file') != '' && rollmode != 'selfroll' && roll !== false)
Expand Down Expand Up @@ -417,15 +417,15 @@ export class ContestedRoll {

for (let update of updates) {
if (update != undefined) {
let msgtoken = duplicate(message.getFlag('monks-tokenbar', 'token' + update.id));
let msgtoken = foundry.utils.duplicate(message.getFlag('monks-tokenbar', 'token' + update.id));
log('updating actor', msgtoken, update.roll);

if (update.roll) {
let tooltip = '';
if (update.roll instanceof Roll) {
msgtoken.roll = update.roll.toJSON();
if (msgtoken.roll.terms.length)
msgtoken.roll.terms = duplicate(msgtoken.roll.terms);
msgtoken.roll.terms = foundry.utils.duplicate(msgtoken.roll.terms);
for (let i = 0; i < msgtoken.roll.terms.length; i++) {
if (msgtoken.roll.terms[i] instanceof RollTerm)
msgtoken.roll.terms[i] = msgtoken.roll.terms[i].toJSON();
Expand Down Expand Up @@ -474,7 +474,7 @@ export class ContestedRoll {

if (game.system.id == 'dnd5e') {
let rolls = [];
for (let key of Object.keys(getProperty(message, "flags.monks-tokenbar"))) {
for (let key of Object.keys(foundry.utils.getProperty(message, "flags.monks-tokenbar"))) {
if (key.startsWith('token')) {
let token = flags[key] || message.flags['monks-tokenbar'][key];
if (token.roll) {
Expand Down Expand Up @@ -536,7 +536,7 @@ export class ContestedRoll {
if (restart.action.data.usetokens == 'fail' || restart.action.data.usetokens == 'succeed') {
result.tokens = result.tokenresults.filter(r => r.passed == (restart.action.data.usetokens == 'succeed'));
} else {
result.tokens = duplicate(result.tokenresults);
result.tokens = foundry.utils.duplicate(result.tokenresults);
}
for (let i = 0; i < result.tokens.length; i++) {
result.tokens[i] = await fromUuid(result.tokens[i].uuid);
Expand Down Expand Up @@ -571,7 +571,7 @@ export class ContestedRoll {
} else {
let flags = {};
for (let update of updates) {
let msgtoken = duplicate(message.getFlag('monks-tokenbar', 'token' + update.id));
let msgtoken = foundry.utils.duplicate(message.getFlag('monks-tokenbar', 'token' + update.id));
msgtoken.reveal = true;
flags["token" + update.id] = msgtoken;
log("Finish Rolling", msgtoken);
Expand All @@ -598,7 +598,7 @@ export class ContestedRoll {
let j = (i + 1) % 2;
let passed = (!allRolled ? 'waiting' : (tokens[i].roll.total > tokens[j].roll.total ? 'won' : (tokens[i].roll.total < tokens[j].roll.total ? 'failed' : 'tied')));
if (tokens[i].passed != passed) {
let msgtoken = duplicate(tokens[i]);
let msgtoken = foundry.utils.duplicate(tokens[i]);
msgtoken.passed = passed;
flags['token' + msgtoken.id] = msgtoken;
}
Expand Down Expand Up @@ -631,7 +631,7 @@ export class ContestedRoll {
for (let i = 0; i < 2; i++) {
let passed = (tokens[i].id == tokenid ? 'won' : 'failed');
if(tokens[i].passed != passed) {
let msgtoken = duplicate(tokens[i]);
let msgtoken = foundry.utils.duplicate(tokens[i]);
msgtoken.passed = passed;
flags['token' + msgtoken.id] = msgtoken;
}
Expand Down Expand Up @@ -683,7 +683,7 @@ export class ContestedRoll {
if (actor instanceof Actor && actor.type == "character") {
const heroPointCount = actor.heroPoints.value;
if (heroPointCount)
await token.actor.update({ "system.resources.heroPoints.value": Math.clamped(heroPointCount - 1, 0, 3) });
await token.actor.update({ "system.resources.heroPoints.value": Math.clamp(heroPointCount - 1, 0, 3) });
else {
return ui.notifications.warn("Does not have a hero point");
}
Expand All @@ -693,7 +693,7 @@ export class ContestedRoll {
}

const oldRoll = msgToken.roll;
const newData = deepClone(oldRoll.data);
const newData = foundry.utils.deepClone(oldRoll.data);
const newOptions = { ...oldRoll.options, isReroll: !0 };
const formula = oldRoll.formula.replace("2d20kh", "1d20").replace("2d20kl", "1d20");
const newRoll = await new Roll(formula, newData, newOptions).evaluate({ async: !0 });
Expand Down
6 changes: 3 additions & 3 deletions apps/editstats.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export class EditStats extends FormApplication {

super(object, options);
this.stats = (Array.isArray(stats) ? stats : []).map(s => {
s.id = s.id || randomID();
s.id = s.id || foundry.utils.randomID();
return s;
});
//let's just grab the first player character we can find
Expand All @@ -21,7 +21,7 @@ export class EditStats extends FormApplication {
}

static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
id: "tokenbar-editstats",
title: 'Edit Stats',
template: "./modules/monks-tokenbar/templates/editstats.html",
Expand Down Expand Up @@ -60,7 +60,7 @@ export class EditStats extends FormApplication {
}

addStat(event) {
this.stats.push({ id: randomID(), stat: "", icon: "fa-address-book" });
this.stats.push({ id: foundry.utils.randomID(), stat: "", icon: "fa-address-book" });
this.render(true);
}

Expand Down
60 changes: 39 additions & 21 deletions apps/lootables.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export class LootablesApp extends Application {
return result;
}).map(i => {
return {
id: this.lootEntity == "convert" ? i._id : getProperty(i, "flags.core.sourceId") || i._id,
id: this.lootEntity == "convert" ? i._id : foundry.utils.getProperty(i, "flags.core.sourceId") || i._id,
name: i.name,
img: i.img,
from: t.name,
Expand Down Expand Up @@ -133,7 +133,7 @@ export class LootablesApp extends Application {
}

static get defaultOptions() {
return mergeObject(super.defaultOptions, {
return foundry.utils.mergeObject(super.defaultOptions, {
id: "lootables",
title: i18n("MonksTokenBar.Lootables"),
template: "./modules/monks-tokenbar/templates/lootables.html",
Expand Down Expand Up @@ -222,6 +222,23 @@ export class LootablesApp extends Application {
return (currency.value != undefined ? currency.value : currency) || 0;
}

static getSnappedPosition(x, y, interval = 1) {
if (interval === 0) return { x: Math.round(x), y: Math.round(y) };
let x0 = x.toNearest(canvas.grid.size);
let y0 = y.toNearest(canvas.grid.size);
let dx = 0;
let dy = 0;
if (interval !== 1) {
let delta = canvas.grid.size / interval;
dx = Math.round((x - x0) / delta) * delta;
dy = Math.round((y - y0) / delta) * delta;
}
return {
x: Math.round(x0 + dx),
y: Math.round(y0 + dy)
};
}

async activateListeners(html) {
super.activateListeners(html);

Expand Down Expand Up @@ -412,7 +429,7 @@ export class LootablesApp extends Application {

let i = data.data || await fromUuid(data.uuid);
let item = {
id: getProperty(i, "flags.core.sourceId") || i._id,
id: foundry.utils.getProperty(i, "flags.core.sourceId") || i._id,
name: i.name,
img: i.img,
sysQty: i.system.quantity,
Expand Down Expand Up @@ -470,7 +487,7 @@ export class LootablesApp extends Application {
return result;
}).map(i => {
return {
id: this.lootEntity == "convert" ? i._id : getProperty(i, "flags.core.sourceId") || i._id,
id: this.lootEntity == "convert" ? i._id : foundry.utils.getProperty(i, "flags.core.sourceId") || i._id,
name: i.name,
img: i.img,
from: t.name,
Expand Down Expand Up @@ -645,7 +662,7 @@ export class LootablesApp extends Application {
}
*/

newActorData = expandObject(newActorData);
newActorData = foundry.utils.expandObject(newActorData);

entry.actor._sheet = null;

Expand Down Expand Up @@ -764,26 +781,26 @@ export class LootablesApp extends Application {
if (isNaN(loot.quantity))
loot.quantity = 1;

item._id = randomID();
item._id = foundry.utils.randomID();
if (game.modules.get("monks-enhanced-journal")?.active) {
let sysPrice = game.MonksEnhancedJournal.getSystemPrice(item);
let price = game.MonksEnhancedJournal.getPrice(sysPrice);
setProperty(item, "flags.monks-enhanced-journal.quantity", loot.quantity);
setProperty(item, "flags.monks-enhanced-journal.price", price.value + " " + price.currency);
setProperty(item, "flags.monks-enhanced-journal.from", loot.from);
foundry.utils.setProperty(item, "flags.monks-enhanced-journal.quantity", loot.quantity);
foundry.utils.setProperty(item, "flags.monks-enhanced-journal.price", price.value + " " + price.currency);
foundry.utils.setProperty(item, "flags.monks-enhanced-journal.from", loot.from);
}
if (lootSheet !== 'monks-enhanced-journal') {
//+++ Need to set to correct system quantity
let itemQty = getProperty(item, "system.quantity") || 1;
let itemQty = foundry.utils.getProperty(item, "system.quantity") || 1;
if (isNaN(itemQty))
itemQty = 1;
setProperty(item, "system.quantity", itemQty * loot.quantity);
foundry.utils.setProperty(item, "system.quantity", itemQty * loot.quantity);

if (getProperty(item, "system.equipped") != undefined) {
if (foundry.utils.getProperty(item, "system.equipped") != undefined) {
if (game.system.id == "pf2e")
setProperty(item, "system.equipped.handsHeld", 0);
foundry.utils.setProperty(item, "system.equipped.handsHeld", 0);
else
setProperty(item, "system.equipped", false);
foundry.utils.setProperty(item, "system.equipped", false);
}
}

Expand Down Expand Up @@ -870,7 +887,7 @@ export class LootablesApp extends Application {
let item = await pack.getDocument(coinage._id);
let itemData = item.toObject();
delete itemData._id;
setProperty(itemData, "system.quantity", currency[denomination]);
foundry.utils.setProperty(itemData, "system.quantity", currency[denomination]);
await entity.createEmbeddedDocuments("Item", [itemData]);
}
}
Expand All @@ -879,12 +896,13 @@ export class LootablesApp extends Application {
} else
entity.update({ data: { currency: entityCurr } });
} else if (lootSheet == 'monks-enhanced-journal') {
let entityItems = duplicate(entity.getFlag('monks-enhanced-journal', 'items') || []);
let entityItems = foundry.utils.duplicate(entity.getFlag('monks-enhanced-journal', 'items') || []);
entityItems = entityItems.concat(items);
await entity.setFlag('monks-enhanced-journal', 'items', entityItems);

let entityCurr = entity.getFlag("monks-enhanced-journal", "currency") || {};
for (let curr of MonksTokenBar.system.getCurrency()) {
for (let currObj of MonksTokenBar.system.getCurrency()) {
let curr = currObj.id;
if (currency[curr] != undefined) {
if (typeof currency[curr] == "string" && currency[curr].indexOf("d") != -1) {
let r = new Roll(currency[curr]);
Expand Down Expand Up @@ -914,14 +932,14 @@ export class LootablesApp extends Application {
if (createObject && !(lootSheet == "item-piles" && created) && this.lootEntity != "convert" && lootSheet != "pf2e") {
let pt = { x: ptAvg.x / ptAvg.count, y: ptAvg.y / ptAvg.count };
// Snap to Grid
let snap = canvas.grid.getSnappedPosition(pt.x, pt.y, canvas[(this.isLootActor(lootSheet) ? 'tokens' : 'notes')].gridPrecision);
let snap = LootablesApp.getSnappedPosition(pt.x, pt.y, 1);
pt.x = snap.x;
pt.y = snap.y;

// Validate the final position
if (canvas.dimensions.rect.contains(pt.x, pt.y)) {
if (this.isLootActor(lootSheet)) {
const td = await entity.getTokenDocument(mergeObject(pt, { texture: { src: setting("loot-image") } }));
const td = await entity.getTokenDocument(foundry.utils.mergeObject(pt, { texture: { src: setting("loot-image") } }));

const cls = getDocumentClass("Token");
await cls.create(td, { parent: canvas.scene });
Expand All @@ -931,7 +949,7 @@ export class LootablesApp extends Application {
y: parseInt(pt.y + (canvas.scene.dimensions.size / 2)),
entryId: entity.parent.id,
pageId: entity.id,
icon: setting("loot-image")
texture: { src: setting("loot-image") }
};

const cls = getDocumentClass("Note");
Expand Down Expand Up @@ -993,7 +1011,7 @@ export class LootablesApp extends Application {

let newItems = [];
if (actor.getFlag('monks-tokenbar', 'olditems')?.length) {
actorData.items = duplicate(actor.items);
actorData.items = foundry.utils.duplicate(actor.items);
for (let olditem of actor.getFlag('monks-tokenbar', 'olditems')) {
if (actorData.items.findIndex(i => { return i._id == olditem._id; }) < 0)
actorData.items.push(olditem);
Expand Down
2 changes: 1 addition & 1 deletion apps/pick-icon.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 19d0d5b

Please sign in to comment.