LOEFD
Join Serverconversion macro
@MaxPat did you have a macro or script which could change the old classFeatures data into advancements on their items?
I had one a long time ago, let me try to dig it up
it definitely will need updating
Message Not Public
Sign In & Join Server To View
gotchya. well if you happen upon one or anyone interested in making one, send em our way will ya?
Message Not Public
Sign In & Join Server To View
this is what I had a long time ago (but definitely needs some updating):
I used this with
bad code dont use, look below
I used this with
updateAll
cc @🌈 Kandashi 🌈 (He/Him) ^ for if you are interested 😉
I won't have time till this weekend probabaly to iron this out, but will do so when I can
@Zhell you might be interested here too
Message Not Public
Sign In & Join Server To View
I'm thinking that since the class features work is already done, we can use that format to populate class items and subclass items
Basically not directly parsing the JSON you have here
Macro runnable snippet which will take an existing compendium with Class Items, and update that compendium's items with advancements as defined in the deprecated
CONFIG.DND5E.classFeatures
(useful for some modules which overrode or extended this).const PACK_NAME = 'world.blank-class-items';
/* Update All Class Items in the Compendium per legacy CONFIG.DND5E.classFeatures */
/* v0.3 */
const pack = game.packs.get(PACK_NAME);
if (!pack) {
ui.notifications.error('No pack by that name');
return;
};
const docs = await pack.getDocuments();
for (let item of docs) {
const className = item.name.slugify({strict: true});
const clsConfig = CONFIG.DND5E.classFeatures[className];
if (!clsConfig) continue;
const advancements = Object.entries(clsConfig.features).map(([level, items]) => {
return {
classRestriction: "",
level,
icon: "",
type: 'ItemGrant',
title: "Features",
configuration: { items },
value: {},
_id: foundry.utils.randomID(),
}
});
// add hitpoints advancement because this is a class
advancements.push({
classRestriction: "",
type: "HitPoints",
icon: "",
title: "",
configuration: {},
value: {},
_id: foundry.utils.randomID(),
});
await item.update({
'data.advancement': advancements
});
}
pack.render(true);
ui.notifications.notify('Complete');
A class compendium migration script for your guys' perusal and testing.
Gonna work on one that creates a compendium for subclasses next as I have time.
Then one which attempts to migrate an existing actor.
Gonna work on one that creates a compendium for subclasses next as I have time.
Then one which attempts to migrate an existing actor.
2 Messages Not Public
Sign In & Join Server To View
ohhhh nooooo
did we break this with the deprecation warning??
If you have this locally, can you test something for me?
In
In
config.js
in the 5e repo files, change the classFeatures
block to be this/**
* Character features automatically granted by classes & subclasses at certain levels.
* @type {object}
*/
Object.defineProperty(DND5E, "classFeatures", {
_classFeatures: ClassFeatures,
get() {
console.warn(
"The classFeatures object is deprecated. Please use the new Advancement API to configure class features.");
return this._classFeatures;
},
set(newClassFeatures) {
this._classFeatures = newClassFeatures;
},
configurable: true,
enumerable: true
});
Message Not Public
Sign In & Join Server To View
that would be because they're setting something nested within the object I guess.
You look to be replacing the object itself (which should still be supported and hopefully my snippet will allow that)
You look to be replacing the object itself (which should still be supported and hopefully my snippet will allow that)
Message Not Public
Sign In & Join Server To View
that looks like it works just based on my rudimentary testing
Message Not Public
Sign In & Join Server To View
wtf...
2 Messages Not Public
Sign In & Join Server To View
😬
Message Not Public
Sign In & Join Server To View
it's not good that I broke the other by fixing the one
Message Not Public
Sign In & Join Server To View
yeah what I sent above is definitely not right
its close but this is some black magic that's beyond me...
Macro runnable snippet which will take an existing compendium and create subclasses in that compendium with advancements as defined in the deprecated
Will not create duplicates (determined by
CONFIG.DND5E.classFeatures
(useful for some modules which overrode or extended this, in theory).Will not create duplicates (determined by
name
). Optionally allows creation of "empty" subclasses which have no features
defined (core 5e lists a lot of RAW subclasses without features).// the compendium id which should have the subclasses added to it
const PACK_NAME = 'world.custom-subclasses';
// the core system includes subclasses without features defined, should these be created as subclasses?
const INCLUDE_EMPTY_SUBCLASSES = false;
/* Create Subclass Items that are missing (based on name matching) in the Compendium per legacy CONFIG.DND5E.classFeatures */
/* v0.1 */
const pack = game.packs.get(PACK_NAME);
if (!pack) {
ui.notifications.error('No pack by that name');
return;
};
const itemData = Object.entries(CONFIG.DND5E.classFeatures).map(([classIdentifier, { subclasses }]) => {
const subclassItemData = Object.entries(subclasses).map(([subclassIdentifier, { label, features, source }]) => {
if (!INCLUDE_EMPTY_SUBCLASSES && (!features || foundry.utils.isObjectEmpty(features))) return;
const advancements = (!features || foundry.utils.isObjectEmpty(features)) ? [] : Object.entries(features).map(([level, items]) => {
return {
classRestriction: "",
level,
icon: "",
type: 'ItemGrant',
title: "Features",
configuration: { items },
value: {},
_id: foundry.utils.randomID(),
}
});
return {
data: {
advancement: advancements,
identifier: subclassIdentifier,
classIdentifier,
source,
},
name: label,
type: 'subclass'
}
});
return subclassItemData;
}).flat().filter(Boolean).filter(({name}) => !pack.index.getName(name));
console.log("Creating Items:", itemData);
await Item.implementation.create(itemData, { pack: PACK_NAME });
pack.render(true);
ui.notifications.notify('Complete');
Message Not Public
Sign In & Join Server To View
OK THIS ONES GNARLY.
This is 0.1 for a macro script which will migrate an actor to use class advancement which doesn't currently.
It makes some assumptions:
1. The
2. That original class item has been updated to have advancements.
3. Those advancements reference the same items as were manually added to the actor before.
https://gist.github.com/akrigline/170159bf376969b69c25a62f97398982#file-migrate-actor-js
This is 0.1 for a macro script which will migrate an actor to use class advancement which doesn't currently.
It makes some assumptions:
1. The
class
item being used has a core.sourceId
flag (happens when you drag/drop from a compendium/world item).2. That original class item has been updated to have advancements.
3. Those advancements reference the same items as were manually added to the actor before.
https://gist.github.com/akrigline/170159bf376969b69c25a62f97398982#file-migrate-actor-js
migrate-actor.js
in the gistI was able to use this on a 1.5.x "Starter Hero" (Quillathe) to introduce advancements to them in 1.6.x
Haven't gotten my head wrapped around adding a subclass item automatically yet and am too tired to try that tonight, but it's on the todo for this bad boy.
Haven't gotten my head wrapped around adding a subclass item automatically yet and am too tired to try that tonight, but it's on the todo for this bad boy.
@unsoluble this one might interest you, try at your own risk 😛
Obviously not ready for sharing at large but you expressed interest on the mothership so now I'm pulling you in here 🙂
Obviously not ready for sharing at large but you expressed interest on the mothership so now I'm pulling you in here 🙂
2 Messages Not Public
Sign In & Join Server To View
can always make a duplicate and run it on that, i do that sort of thing a lot 😛
Message Not Public
Sign In & Join Server To View
Right
Well, kinda.
It will try to configure the actor as though it has been getting advancements the whole time getting the class item that was added to the actor originally.
It will try to configure the actor as though it has been getting advancements the whole time getting the class item that was added to the actor originally.
It nukes any hp advancements because idk how I could figure out that info to backfill.
But it will look at the item grants and try to match up existing items on the actor with items they should have been granted if they had gone through the advancement flows.
This does not back fill items "missing" from the advancement, it assumes more or less that the actor is currently configured well, but wants to use advancement going forwards.
But it will look at the item grants and try to match up existing items on the actor with items they should have been granted if they had gone through the advancement flows.
This does not back fill items "missing" from the advancement, it assumes more or less that the actor is currently configured well, but wants to use advancement going forwards.
For any level lower than the current level of that class, it turns the item grant advancement into an optional one; then updates items with the flag to make it appear they are from an advancement.
@alaustin this channel might be of interest to you in your quest to migrate your data
2 Messages Not Public
Sign In & Join Server To View
yeah let me put some snippets up on the repo
@MaxPat
https://gitlab.com/foundrynet/dnd5e/-/snippets/2313873
https://gitlab.com/foundrynet/dnd5e/-/snippets/2313875
all yours :P.
I'll try to post something about them in the mothership today, but i've not been good about self-imposed timers lately.
https://gitlab.com/foundrynet/dnd5e/-/snippets/2313873
https://gitlab.com/foundrynet/dnd5e/-/snippets/2313875
all yours :P.
I'll try to post something about them in the mothership today, but i've not been good about self-imposed timers lately.
Message Not Public
Sign In & Join Server To View
@MaxPat gave
LeaguePoints™ to @Calego (ElfFriend) (#1 • 1495)

6 Messages Not Public
Sign In & Join Server To View
@MaxPat gave
LeaguePoints™ to @Zhell (#200 • 3)
