Good enough for a new version (#56)

* fixed pt-br translation and extra string identifiers

Fixed some grammatical errors on the Brazilian Portuguese translation and added a few string identifiers to expand the translation of this module.

* added the additional fields to the other translations

* added some filters for the new dnd5e item types

* renderable and searchable from a function and button on the character sheet

* oops was only looking at the active tab on Tidy Sheet

* minor mistakes in merge

* using more names and words from DND5e language file

* added filter for backgrounds

* fixed item rarity filter in Foundty 10+

* updated readme

* format and link issues

---------

Co-authored-by: Eduardo Freire <edufc.rj@gmail.com>
mergable
ZoltanTheDM 2023-03-28 14:32:06 -07:00 committed by GitHub
parent d4181d347e
commit 7fc48e2771
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 798 additions and 527 deletions

View File

@ -1,3 +1,11 @@
#0.9.0
- Button on character sheets for opening a search with class and spell level (works on default and TidySheet5e)
- added filters for subclasses and backgrounds [League-of-Foundry-Developers/compendium-browser#48](https://github.com/League-of-Foundry-Developers/compendium-browser/issues/48)
- Additional searches for sub-features
- Merged PR [League-of-Foundry-Developers/compendium-browser#45](https://github.com/League-of-Foundry-Developers/compendium-browser/pull/45)
- Used more DnD5e loaclization tags. Should be less work to translate, also defaults localization to tag name
- Fixed item rarity search in Foundry 10+ [League-of-Foundry-Developers/compendium-browser#54](https://github.com/League-of-Foundry-Developers/compendium-browser/issues/54)
#0.8.2 #0.8.2
- Fixed Class searching for spells - issue: #43 - Fixed Class searching for spells - issue: #43
- Fixed Drag-and-Drop error in Foundry V10 - issue: #41 - Fixed Drag-and-Drop error in Foundry V10 - issue: #41

View File

@ -3,25 +3,15 @@ Tired of scrolling compendia? Easily browse and filter for spells, feats, items,
Compendium Browser is faster and better-behaved; **it no longer loads all the compendia into memory on start-up** (which sometimes hung servers because of memory or CPU requirements). Instead, it filters and loads on-demand, as well as giving you a Module Setting to control how many rows are loaded at a time. Compendium Browser is faster and better-behaved; **it no longer loads all the compendia into memory on start-up** (which sometimes hung servers because of memory or CPU requirements). Instead, it filters and loads on-demand, as well as giving you a Module Setting to control how many rows are loaded at a time.
[Patch Notes](https://raw.githubusercontent.com/League-of-Foundry-Developers/compendium-browser/master/Patchnotes.md)
## v0.8:
- Compatibility with Foundry V10
- Added check for "Compendium Folders" module 'phantom' actors (#[CF_tempEntity]) to filter out of NPC list.
- Fix to handle un-migrated compendiums (they get auto-excluded from the browser even if selected)
## v0.7:
- Supports Foundry 0.8.x and Foundry 9
- Faster searches using Foundry 0.8.x queries (thanks ZoltantheDM!)
- Faster NPC searches using getIndex() (thanks kyleady!)
## v0.6:
- Additional and Optional Features spells from Tasha's
- Spanish, German translations
## Summary ## Summary
* **Authors**: Discord: Spetzel#0103; Felix (felix.mueller.86@web.de); ZoltantheDM * **Authors**: Discord: Spetzel#0103; Felix (felix.mueller.86@web.de); ZoltantheDM (Zoltan#8700); eduardopato41
* **Version**: 0.7.2 * **Version**: 0.9.0
* **Foundry VTT Compatibility**: 0.8.6-9 * **Foundry VTT Compatibility**: 9-10
* **System Compatibility (If applicable)**: dnd5e * **System Compatibility (If applicable)**: dnd5e
* **Translation Support**: en, de (thanks https://github.com/CarnVanBeck), es (thanks https://github.com/JJBocanegra), fr, ja, pt-BR * **Translation Support**: en, de (thanks https://github.com/CarnVanBeck), es (thanks https://github.com/JJBocanegra), fr, ja, pt-BR
[Patch Notes](https://github.com/ZoltanTheDM/compendium-browser/blob/master/Patchnotes.md)
## Installation ## Installation
1. Go to the Add-on Modules tab in Foundry Setup 1. Go to the Add-on Modules tab in Foundry Setup
2. Click Install Module and search for **Compendium Browser** OR paste this link: `https://github.com/League-of-Foundry-Developers/compendium-browser/releases/latest/download/module.json` 2. Click Install Module and search for **Compendium Browser** OR paste this link: `https://github.com/League-of-Foundry-Developers/compendium-browser/releases/latest/download/module.json`
@ -36,9 +26,6 @@ This application enables anyone to add their own custom spell or npc filters via
All filters featured in the app are included in this manner and can be found in the compendium-browser.js at around line 726. All filters featured in the app are included in this manner and can be found in the compendium-browser.js at around line 726.
## Contribution
If you feel like supporting my work, feel free to leave a tip at my paypal felix.mueller.86@web.de
## License ## License
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Compendium Browser - a module for Foundry VTT -</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="https://github.com/syl3r86?tab=repositories" property="cc:attributionName" rel="cc:attributionURL">Felix Müller</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>. <a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Compendium Browser - a module for Foundry VTT -</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="https://github.com/syl3r86?tab=repositories" property="cc:attributionName" rel="cc:attributionURL">Felix Müller</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.

View File

@ -284,36 +284,21 @@ class CompendiumBrowser extends Application {
}); });
this.triggerSort(html, "npc"); this.triggerSort(html, "npc");
// reset filters and re-render for (let tab of ["spell", "feat", "item", "npc"]){
//0.4.3: Reset ALL filters because when we do a re-render it affects all tabs // reset filters and re-render
html.find('#reset-spell-filter').click(ev => { //0.4.3: Reset ALL filters because when we do a re-render it affects all tabs
this.resetFilters(); html.find(`#reset-${tab}-filter`).click(ev => {
//v0.4.3: Re-render so that we display the filters correctly this.resetFilters();
this.refreshList = "spell"; //v0.4.3: Re-render so that we display the filters correctly
this.render(); this.refreshList = tab;
}); this.render();
});
html.find('#reset-feat-filter').click(ev => { //copy Javascript seach to clipboard
this.resetFilters(); html.find(`#copy-search-${tab}`).click(async ev => {
//v0.4.3: Re-render so that we display the filters correctly this.copySearchToClipboard(tab);
this.refreshList = "feat"; });
this.render(); }
});
html.find('#reset-item-filter').click(ev => {
this.resetFilters();
//v0.4.3: Re-render so that we display the filters correctly
this.refreshList = "item";
this.render();
});
html.find('#reset-npc-filter').click(ev => {
this.resetFilters();
//v0.4.3: Re-render so that we display the filters correctly
this.refreshList = "npc";
this.render();
});
// settings // settings
html.find('.settings input').on('change', ev => { html.find('.settings input').on('change', ev => {
@ -396,6 +381,12 @@ class CompendiumBrowser extends Application {
} }
} }
this.replaceList(html, browserTab); this.replaceList(html, browserTab);
// console.log(this.spellFilters.activeFilters);
// console.log(this.featFilters.activeFilters);
// console.log(this.itemFilters.activeFilters);
// console.log(this.npcFilters.activeFilters);
}); });
// multiselect filters // multiselect filters
@ -568,7 +559,7 @@ class CompendiumBrowser extends Application {
const decoratedItem = this.decorateItem(item5e); const decoratedItem = this.decorateItem(item5e);
if(decoratedItem && ["feat","class"].includes(decoratedItem.type) && this.passesFilter(decoratedItem, this.featFilters.activeFilters)){ if(decoratedItem && ["feat","class","subclass", "background"].includes(decoratedItem.type) && this.passesFilter(decoratedItem, this.featFilters.activeFilters)){
itemsList[item5e.id] = { itemsList[item5e.id] = {
compendium : pack.collection, compendium : pack.collection,
name : decoratedItem.name, name : decoratedItem.name,
@ -595,7 +586,7 @@ class CompendiumBrowser extends Application {
const decoratedItem = this.decorateItem(item5e); const decoratedItem = this.decorateItem(item5e);
if(decoratedItem && !["spell","feat","class"].includes(decoratedItem.type) && this.passesFilter(decoratedItem, this.itemFilters.activeFilters)){ if(decoratedItem && !["spell","feat","class","subclass", "background"].includes(decoratedItem.type) && this.passesFilter(decoratedItem, this.itemFilters.activeFilters)){
itemsList[item5e.id] = { itemsList[item5e.id] = {
compendium : pack.collection, compendium : pack.collection,
name : decoratedItem.name, name : decoratedItem.name,
@ -799,6 +790,10 @@ class CompendiumBrowser extends Application {
cb.replaceList(html, cb.refreshList); cb.replaceList(html, cb.refreshList);
cb.refreshList = null; cb.refreshList = null;
if(CompendiumBrowser.postRender){
CompendiumBrowser.postRender();
}
} }
resetFilters() { resetFilters() {
@ -1084,6 +1079,10 @@ class CompendiumBrowser extends Application {
if (!CompendiumBrowser.isFoundryV10Plus) { if (!CompendiumBrowser.isFoundryV10Plus) {
item.hasSave = item5e.hasSave; item.hasSave = item5e.hasSave;
} }
} else if (item.type === 'subclass') {
//subclasses dont exist lower then version 10
item.classRequirement = [item.system.classIdentifier];
item.classRequirementString = item.system.classIdentifier
} else { } else {
// getting pack // getting pack
let matchedPacks = []; let matchedPacks = [];
@ -1219,6 +1218,7 @@ class CompendiumBrowser extends Application {
return false; return false;
} }
} else { } else {
if (prop === undefined) return false;
if (filter.value !== undefined && prop !== undefined && prop != filter.value && !(filter.value === true && prop)) { if (filter.value !== undefined && prop !== undefined && prop != filter.value && !(filter.value === true && prop)) {
return false; return false;
} }
@ -1373,23 +1373,36 @@ class CompendiumBrowser extends Application {
//FILTERS - Added on the Ready hook //FILTERS - Added on the Ready hook
//0.4.0 Make this async so filters can be added all at once //0.4.0 Make this async so filters can be added all at once
async addFilter(entityType, category, label, path, type, possibleValues = null, valIsArray = false) { async addFilter(entityType, category, label, path, type, possibleValues = null, valIsArray = false) {
let target = `${entityType}Filters`; let target = `${entityType}Filters`;
let filter = {}; let filter = {};
filter.path = path; filter.path = path;
filter.label = label; filter.labelId = stripSpecialCharacters(label);
filter.label = game.i18n.localize(label) ?? label;
filter.type = 'text'; filter.type = 'text';
if (['text', 'bool', 'select', 'multiSelect', 'numberCompare'].indexOf(type) !== -1) { if (['text', 'bool', 'select', 'multiSelect', 'numberCompare'].indexOf(type) !== -1) {
filter[`is${type}`] = true; filter[`is${type}`] = true;
filter.type = type; filter.type = type;
} }
if (possibleValues !== null) { if (possibleValues !== null) {
filter.possibleValues = possibleValues; filter.possibleValueIds = possibleValues;
filter.possibleValues = Object.keys(possibleValues).reduce(function (acc, current) {
acc[current] = game.i18n.localize(possibleValues[current]) ?? possibleValues[current];
return acc;
}.bind(this),
{})
} }
filter.valIsArray = valIsArray; filter.valIsArray = valIsArray;
let catId = category.replace(/\W/g, ''); let catId = stripSpecialCharacters(category);
if (this[target].registeredFilterCategorys[catId] === undefined) { if (this[target].registeredFilterCategorys[catId] === undefined) {
this[target].registeredFilterCategorys[catId] = {label: category, filters: []}; this[target].registeredFilterCategorys[catId] = {
label: game.i18n.localize(category) ?? category,
labelId: catId,
filters: []
};
} }
this[target].registeredFilterCategorys[catId].filters.push(filter); this[target].registeredFilterCategorys[catId].filters.push(filter);
@ -1400,75 +1413,75 @@ class CompendiumBrowser extends Application {
//Foundry v10+ Item#data is now Item#system //Foundry v10+ Item#data is now Item#system
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'system.source', 'text'); this.addSpellFilter("CMPBrowser.general", "DND5E.Source", 'system.source', 'text');
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.lvl"), 'system.level', 'multiSelect', [game.i18n.localize("CMPBrowser.cantip"), 1, 2, 3, 4, 5, 6, 7, 8, 9]); this.addSpellFilter("CMPBrowser.general", "DND5E.Level", 'system.level', 'multiSelect', {0:"DND5E.SpellCantrip", 1:"1", 2:"2", 3:"3", 4:"4", 5:"5", 6:"6", 7:"7", 8:"8", 9:"9"});
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.school"), 'system.school', 'select', CONFIG.DND5E.spellSchools); this.addSpellFilter("CMPBrowser.general", "DND5E.SpellSchool", 'system.school', 'select', CONFIG.DND5E.spellSchools);
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.castingTime"), 'system.activation.type', 'select', this.addSpellFilter("CMPBrowser.general", "CMPBrowser.castingTime", 'system.activation.type', 'select',
{ {
action: game.i18n.localize("DND5E.Action"), action: "DND5E.Action",
bonus: game.i18n.localize("CMPBrowser.bonusAction"), bonus: "DND5E.BonusAction",
reaction: game.i18n.localize("CMPBrowser.reaction"), reaction: "DND5E.Reaction",
minute: game.i18n.localize("DND5E.TimeMinute"), minute: "DND5E.TimeMinute",
hour: game.i18n.localize("DND5E.TimeHour"), hour: "DND5E.TimeHour",
day: game.i18n.localize("DND5E.TimeDay") day: "DND5E.TimeDay"
} }
); );
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.spellType"), 'system.actionType', 'select', CONFIG.DND5E.itemActionTypes); this.addSpellFilter("CMPBrowser.general", "CMPBrowser.spellType", 'system.actionType', 'select', CONFIG.DND5E.itemActionTypes);
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.damageType"), 'damageTypes', 'select', CONFIG.DND5E.damageTypes); this.addSpellFilter("CMPBrowser.general", "CMPBrowser.damageType", 'damageTypes', 'select', CONFIG.DND5E.damageTypes);
//JV-082: Fix for missing "Class" search feature //JV-082: Fix for missing "Class" search feature
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.class"), 'classes', 'select', this.addSpellFilter("CMPBrowser.general", "ITEM.TypeClass", 'classes', 'select',
{ {
artificer: game.i18n.localize("CMPBrowser.artificer"), artificer: "CMPBrowser.artificer",
bard: game.i18n.localize("CMPBrowser.bard"), bard: "CMPBrowser.bard",
cleric: game.i18n.localize("CMPBrowser.cleric"), cleric: "CMPBrowser.cleric",
druid: game.i18n.localize("CMPBrowser.druid"), druid: "CMPBrowser.druid",
paladin: game.i18n.localize("CMPBrowser.paladin"), paladin: "CMPBrowser.paladin",
ranger: game.i18n.localize("CMPBrowser.ranger"), ranger: "CMPBrowser.ranger",
sorcerer: game.i18n.localize("CMPBrowser.sorcerer"), sorcerer: "CMPBrowser.sorcerer",
warlock: game.i18n.localize("CMPBrowser.warlock"), warlock: "CMPBrowser.warlock",
wizard: game.i18n.localize("CMPBrowser.wizard"), wizard: "CMPBrowser.wizard",
}, true }, true
); );
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.ritual"), 'system.components.ritual', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.Ritual", 'system.components.ritual', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.concentration"), 'system.components.concentration', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.Concentration", 'system.components.concentration', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.verbal"), 'system.components.vocal', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentVerbal", 'system.components.vocal', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.somatic"), 'system.components.somatic', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentSomatic", 'system.components.somatic', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.material"), 'system.components.material', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentMaterial", 'system.components.material', 'bool');
} }
else { else {
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'data.source', 'text'); this.addSpellFilter("CMPBrowser.general", "DND5E.Source", 'data.source', 'text');
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.lvl"), 'data.level', 'multiSelect', [game.i18n.localize("CMPBrowser.cantip"), 1, 2, 3, 4, 5, 6, 7, 8, 9]); this.addSpellFilter("CMPBrowser.general", "DND5E.Level", 'data.level', 'multiSelect', {0:"DND5E.SpellCantrip", 1:"1", 2:"2", 3:"3", 4:"4", 5:"5", 6:"6", 7:"7", 8:"8", 9:"9"});
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.school"), 'data.school', 'select', CONFIG.DND5E.spellSchools); this.addSpellFilter("CMPBrowser.general", "DND5E.SpellSchool", 'data.school', 'select', CONFIG.DND5E.spellSchools);
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.castingTime"), 'data.activation.type', 'select', this.addSpellFilter("CMPBrowser.general", "CMPBrowser.castingTime", 'data.activation.type', 'select',
{ {
action: game.i18n.localize("DND5E.Action"), action: "DND5E.Action",
bonus: game.i18n.localize("CMPBrowser.bonusAction"), bonus: "DND5E.BonusAction",
reaction: game.i18n.localize("CMPBrowser.reaction"), reaction: "DND5E.Reaction",
minute: game.i18n.localize("DND5E.TimeMinute"), minute: "DND5E.TimeMinute",
hour: game.i18n.localize("DND5E.TimeHour"), hour: "DND5E.TimeHour",
day: game.i18n.localize("DND5E.TimeDay") day: "DND5E.TimeDay"
} }
); );
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.spellType"), 'data.actionType', 'select', CONFIG.DND5E.itemActionTypes); this.addSpellFilter("CMPBrowser.general", "CMPBrowser.spellType", 'data.actionType', 'select', CONFIG.DND5E.itemActionTypes);
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.damageType"), 'damageTypes', 'select', CONFIG.DND5E.damageTypes); this.addSpellFilter("CMPBrowser.general", "CMPBrowser.damageType", 'damageTypes', 'select', CONFIG.DND5E.damageTypes);
this.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.class"), 'data.classes', 'select', this.addSpellFilter("CMPBrowser.general", "ITEM.TypeClass", 'data.classes', 'select',
{ {
artificer: game.i18n.localize("CMPBrowser.artificer"), artificer: "CMPBrowser.artificer",
bard: game.i18n.localize("CMPBrowser.bard"), bard: "CMPBrowser.bard",
cleric: game.i18n.localize("CMPBrowser.cleric"), cleric: "CMPBrowser.cleric",
druid: game.i18n.localize("CMPBrowser.druid"), druid: "CMPBrowser.druid",
paladin: game.i18n.localize("CMPBrowser.paladin"), paladin: "CMPBrowser.paladin",
ranger: game.i18n.localize("CMPBrowser.ranger"), ranger: "CMPBrowser.ranger",
sorcerer: game.i18n.localize("CMPBrowser.sorcerer"), sorcerer: "CMPBrowser.sorcerer",
warlock: game.i18n.localize("CMPBrowser.warlock"), warlock: "CMPBrowser.warlock",
wizard: game.i18n.localize("CMPBrowser.wizard"), wizard: "CMPBrowser.wizard",
}, true }, true
); );
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.ritual"), 'data.components.ritual', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.Ritual", 'data.components.ritual', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.concentration"), 'data.components.concentration', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.Concentration", 'data.components.concentration', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.verbal"), 'data.components.vocal', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentVerbal", 'data.components.vocal', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.somatic"), 'data.components.somatic', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentSomatic", 'data.components.somatic', 'bool');
this.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.material"), 'data.components.material', 'bool'); this.addSpellFilter("DND5E.SpellComponents", "DND5E.ComponentMaterial", 'data.components.material', 'bool');
} }
} }
@ -1478,64 +1491,69 @@ class CompendiumBrowser extends Application {
// Feature Filters // Feature Filters
//Foundry v10+ Item#data is now Item#system //Foundry v10+ Item#data is now Item#system
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'system.source', 'text'); this.addItemFilter("CMPBrowser.general", "DND5E.Source", 'system.source', 'text');
} }
else else
{ {
this.addItemFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'data.source', 'text'); this.addItemFilter("CMPBrowser.general", "DND5E.Source", 'data.source', 'text');
} }
this.addItemFilter(game.i18n.localize("CMPBrowser.general"), "Item Type", 'type', 'select', { this.addItemFilter("CMPBrowser.general", "Item Type", 'type', 'select', {
consumable: game.i18n.localize("DND5E.ItemTypeConsumable"), consumable: "ITEM.TypeConsumable",
backpack: game.i18n.localize("DND5E.ItemTypeContainer"), backpack: "ITEM.TypeContainer",
equipment: game.i18n.localize("DND5E.ItemTypeEquipment"), equipment: "ITEM.TypeEquipment",
loot: game.i18n.localize("DND5E.ItemTypeLoot"), loot: "ITEM.TypeLoot",
tool: game.i18n.localize("DND5E.ItemTypeTool"), tool: "ITEM.TypeTool",
weapon: game.i18n.localize("DND5E.ItemTypeWeapon") weapon: "ITEM.TypeWeapon"
}); });
this.addItemFilter(game.i18n.localize("CMPBrowser.general"), "Packs", 'matchedPacks', 'select', this.addItemFilter("CMPBrowser.general", "CMPBrowser.ItemsPacks", 'matchedPacks', 'select',
{ {
burglar: "Burglar's Pack", burglar: "CMPBrowser.ItemsPacksBurglar",
diplomat: "Diplomat's Pack", diplomat: "CMPBrowser.ItemsPacksDiplomat",
dungeoneer: "Dungeoneer's Pack", dungeoneer: "CMPBrowser.ItemsPacksDungeoneer",
entertainer: "Entertainer's Pack", entertainer: "CMPBrowser.ItemsPacksEntertainer",
explorer: "Explorer's Pack", explorer: "CMPBrowser.ItemsPacksExplorer",
monsterhunter: "Monster Hunter's Pack", monsterhunter: "CMPBrowser.ItemsPacksMonsterHunter",
priest: "Priest's Pack", priest: "CMPBrowser.ItemsPacksPriest",
scholar: "Scholar's Pack", scholar: "CMPBrowser.ItemsPacksScholar",
}, true }, true
); );
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter("Game Mechanics", game.i18n.localize("DND5E.ItemActivationCost"), 'system.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes); this.addItemFilter("CMPBrowser.GameMechanics", "DND5E.ItemActivationCost", 'system.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes);
} }
else { else {
this.addItemFilter("Game Mechanics", game.i18n.localize("DND5E.ItemActivationCost"), 'data.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes); this.addItemFilter("CMPBrowser.GameMechanics", "DND5E.ItemActivationCost", 'data.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes);
} }
this.addItemFilter("Game Mechanics", game.i18n.localize("CMPBrowser.damageType"), 'damageTypes', 'select', CONFIG.DND5E.damageTypes); this.addItemFilter("CMPBrowser.GameMechanics", "CMPBrowser.damageType", 'damageTypes', 'select', CONFIG.DND5E.damageTypes);
this.addItemFilter("Game Mechanics", "Uses Resources", 'usesRessources', 'bool'); this.addItemFilter("CMPBrowser.GameMechanics", "CMPBrowser.UsesResources", 'usesRessources', 'bool');
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter("Item Subtype", "Weapon", 'system.weaponType', 'text', CONFIG.DND5E.weaponTypes); this.addItemFilter("CMPBrowser.ItemSubtype", "ITEM.TypeWeapon", 'system.weaponType', 'text', CONFIG.DND5E.weaponTypes);
this.addItemFilter("Item Subtype", "Equipment", 'system.armor.type', 'text', CONFIG.DND5E.equipmentTypes); this.addItemFilter("CMPBrowser.ItemSubtype", "ITEM.TypeEquipment", 'system.armor.type', 'text', CONFIG.DND5E.equipmentTypes);
this.addItemFilter("Item Subtype", "Consumable", 'system.consumableType', 'text', CONFIG.DND5E.consumableTypes); this.addItemFilter("CMPBrowser.ItemSubtype", "ITEM.TypeConsumable", 'system.consumableType', 'text', CONFIG.DND5E.consumableTypes);
} }
else { else {
this.addItemFilter("Item Subtype", "Weapon", 'data.weaponType', 'text', CONFIG.DND5E.weaponTypes); this.addItemFilter("CMPBrowser.ItemSubtype", "ITEM.TypeWeapon", 'data.weaponType', 'text', CONFIG.DND5E.weaponTypes);
this.addItemFilter("Item Subtype", "Equipment", 'data.armor.type', 'text', CONFIG.DND5E.equipmentTypes); this.addItemFilter("CMPBrowser.ItemSubtype", "ITEM.TypeEquipment", 'data.armor.type', 'text', CONFIG.DND5E.equipmentTypes);
this.addItemFilter("Item Subtype", "Consumable", 'data.consumableType', 'text', CONFIG.DND5E.consumableTypes); this.addItemFilter("CMPBrowser.ItemSubtype", "ITEM.TypeConsumable", 'data.consumableType', 'text', CONFIG.DND5E.consumableTypes);
} }
//0.7.2c: Fix rarity encoding (uses camelcase names) if (CompendiumBrowser.isFoundryV10Plus) {
this.addItemFilter("Magic Items", "Rarity", 'data.rarity', 'select', this.addItemFilter("CMPBrowser.MagicItems", "DND5E.Rarity", 'system.rarity', 'select', CONFIG.DND5E.itemRarity);
{ }
common: "Common", else {
uncommon: "Uncommon", //0.7.2c: Fix rarity encoding (uses camelcase names)
rare: "Rare", this.addItemFilter("CMPBrowser.MagicItems", "DND5E.Rarity", 'data.rarity', 'select',
veryRare: "Very Rare", {
legendary: "Legendary" common: "DND5E.ItemRarityCommon",
}); uncommon: "DND5E.ItemRarityUncommon",
rare: "DND5E.ItemRarityRare",
veryRare: "DND5E.ItemRarityVeryRare",
legendary: "DND5E.ItemRarityLegendary",
});
}
} }
async addFeatFilters() { async addFeatFilters() {
@ -1543,37 +1561,66 @@ class CompendiumBrowser extends Application {
// Feature Filters // Feature Filters
//Foundry v10+ Item#data is now Item#system //Foundry v10+ Item#data is now Item#system
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'system.source', 'text'); this.addFeatFilter("CMPBrowser.general", "DND5E.Source", 'system.source', 'text');
} }
else else
{ {
this.addFeatFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'data.source', 'text'); this.addFeatFilter("CMPBrowser.general", "DND5E.Source", 'data.source', 'text');
} }
this.addFeatFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.class"), 'classRequirement', 'select', this.addFeatFilter("CMPBrowser.general", "ITEM.TypeClass", 'classRequirement', 'select',
{ {
artificer: game.i18n.localize("CMPBrowser.artificer"), artificer: "CMPBrowser.artificer",
barbarian: "Barbarian", barbarian: "CMPBrowser.barbarian",
bard: game.i18n.localize("CMPBrowser.bard"), bard: "CMPBrowser.bard",
cleric: game.i18n.localize("CMPBrowser.cleric"), cleric: "CMPBrowser.cleric",
druid: game.i18n.localize("CMPBrowser.druid"), druid: "CMPBrowser.druid",
fighter: "Fighter", fighter: "CMPBrowser.fighter",
monk: "Monk", monk: "CMPBrowser.monk",
paladin: game.i18n.localize("CMPBrowser.paladin"), paladin: "CMPBrowser.paladin",
ranger: game.i18n.localize("CMPBrowser.ranger"), ranger: "CMPBrowser.ranger",
rogue: "Rogue", rogue: "CMPBrowser.rogue",
sorcerer: game.i18n.localize("CMPBrowser.sorcerer"), sorcerer: "CMPBrowser.sorcerer",
warlock: game.i18n.localize("CMPBrowser.warlock"), warlock: "CMPBrowser.warlock",
wizard: game.i18n.localize("CMPBrowser.wizard") wizard: "CMPBrowser.wizard"
}, true); }, true);
let featureTypes = {
class: "ITEM.TypeClass",
feat: "ITEM.TypeFeat",
};
//subclasses don't exist lower then version 10
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter("Game Mechanics", game.i18n.localize("DND5E.ItemActivationCost"), 'system.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes); featureTypes.subclass = "ITEM.TypeSubclass";
featureTypes.background = "DND5E.Background";
}
this.addFeatFilter("CMPBrowser.general", "CMPBrowser.overall", 'type', 'select',
featureTypes
, false);
if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter("CMPBrowser.general", "DND5E.ItemFeatureType", 'system.type.value', 'select',
Object.keys(dnd5e.config.featureTypes).reduce(function(acc, current) {
acc[current] = dnd5e.config.featureTypes[current].label;
return acc;
}, {})
, false);
}
if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter("CMPBrowser.general", "CMPBrowser.subfeature", 'system.type.subtype', 'select',
dnd5e.config.featureTypes.class.subtypes);
}
if (CompendiumBrowser.isFoundryV10Plus) {
this.addFeatFilter("CMPBrowser.GameMechanics", "DND5E.ItemActivationCost", 'system.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes);
} }
else { else {
this.addFeatFilter("Game Mechanics", game.i18n.localize("DND5E.ItemActivationCost"), 'data.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes); this.addFeatFilter("CMPBrowser.GameMechanics", "DND5E.ItemActivationCost", 'data.activation.type', 'select', CONFIG.DND5E.abilityActivationTypes);
} }
this.addFeatFilter("Game Mechanics", game.i18n.localize("CMPBrowser.damageType"), 'damageTypes', 'select', CONFIG.DND5E.damageTypes); this.addFeatFilter("CMPBrowser.GameMechanics", "CMPBrowser.damageType", 'damageTypes', 'select', CONFIG.DND5E.damageTypes);
this.addFeatFilter("Game Mechanics", "Uses Resources", 'usesRessources', 'bool'); this.addFeatFilter("CMPBrowser.GameMechanics", "CMPBrowser.UsesResources", 'usesRessources', 'bool');
} }
@ -1583,20 +1630,20 @@ class CompendiumBrowser extends Application {
//Foundry v10+ Actor#data is now Actor#system //Foundry v10+ Actor#data is now Actor#system
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'system.details.source', 'text'); this.addNpcFilter("CMPBrowser.general", "DND5E.Source", 'system.details.source', 'text');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.size"), 'system.traits.size', 'select', CONFIG.DND5E.actorSizes); this.addNpcFilter("CMPBrowser.general", "DND5E.Size", 'system.traits.size', 'select', CONFIG.DND5E.actorSizes);
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasSpells"), 'hasSpells', 'bool'); this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasSpells", 'hasSpells', 'bool');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasLegAct"), 'system.resources.legact.max', 'bool'); this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegAct", 'system.resources.legact.max', 'bool');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasLegRes"), 'system.resources.legres.max', 'bool'); this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegRes", 'system.resources.legres.max', 'bool');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.cr"), 'system.details.cr', 'numberCompare'); this.addNpcFilter("CMPBrowser.general", "DND5E.ChallengeRating", 'system.details.cr', 'numberCompare');
} }
else { else {
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("DND5E.Source"), 'data.details.source', 'text'); this.addNpcFilter("CMPBrowser.general", "DND5E.Source", 'data.details.source', 'text');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.size"), 'data.traits.size', 'select', CONFIG.DND5E.actorSizes); this.addNpcFilter("CMPBrowser.general", "DND5E.Size", 'data.traits.size', 'select', CONFIG.DND5E.actorSizes);
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasSpells"), 'hasSpells', 'bool'); this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasSpells", 'hasSpells', 'bool');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasLegAct"), 'data.resources.legact.max', 'bool'); this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegAct", 'data.resources.legact.max', 'bool');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasLegRes"), 'data.resources.legres.max', 'bool'); this.addNpcFilter("CMPBrowser.general", "CMPBrowser.hasLegRes", 'data.resources.legres.max', 'bool');
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.cr"), 'data.details.cr', 'numberCompare'); this.addNpcFilter("CMPBrowser.general", "DND5E.ChallengeRating", 'data.details.cr', 'numberCompare');
} }
let npcDetailsPath; let npcDetailsPath;
//Foundry v10+ Actor#data is now Actor#system //Foundry v10+ Actor#data is now Actor#system
@ -1611,51 +1658,51 @@ class CompendiumBrowser extends Application {
npcDetailsPath = "data.details.type"; npcDetailsPath = "data.details.type";
} }
this.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.creatureType"), npcDetailsPath, 'text', { this.addNpcFilter("CMPBrowser.general", "DND5E.CreatureType", npcDetailsPath, 'text', {
aberration: game.i18n.localize("CMPBrowser.aberration"), aberration: "DND5E.CreatureAberration",
beast: game.i18n.localize("CMPBrowser.beast"), beast: "DND5E.CreatureBeast",
celestial: game.i18n.localize("CMPBrowser.celestial"), celestial: "DND5E.CreatureCelestial",
construct: game.i18n.localize("CMPBrowser.construct"), construct: "DND5E.CreatureConstruct",
dragon: game.i18n.localize("CMPBrowser.dragon"), dragon: "DND5E.CreatureDragon",
elemental: game.i18n.localize("CMPBrowser.elemental"), elemental: "DND5E.CreatureElemental",
fey: game.i18n.localize("CMPBrowser.fey"), fey: "DND5E.CreatureFey",
fiend: game.i18n.localize("CMPBrowser.fiend"), fiend: "DND5E.CreatureFiend",
giant: game.i18n.localize("CMPBrowser.giant"), giant: "DND5E.CreatureGiant",
humanoid: game.i18n.localize("CMPBrowser.humanoid"), humanoid: "DND5E.CreatureHumanoid",
monstrosity: game.i18n.localize("CMPBrowser.monstrosity"), monstrosity: "DND5E.CreatureMonstrosity",
ooze: game.i18n.localize("CMPBrowser.ooze"), ooze: "DND5E.CreatureOoze",
plant: game.i18n.localize("CMPBrowser.plant"), plant: "DND5E.CreaturePlant",
undead: game.i18n.localize("CMPBrowser.undead") undead: "DND5E.CreatureUndead"
}); });
//Foundry v10+ Actor#data is now Actor#system //Foundry v10+ Actor#data is now Actor#system
if (CompendiumBrowser.isFoundryV10Plus) { if (CompendiumBrowser.isFoundryV10Plus) {
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityStr"), 'system.abilities.str.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityStr", 'system.abilities.str.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityDex"), 'system.abilities.dex.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityDex", 'system.abilities.dex.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityCon"), 'system.abilities.con.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityCon", 'system.abilities.con.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityInt"), 'system.abilities.int.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityInt", 'system.abilities.int.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityWis"), 'system.abilities.wis.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityWis", 'system.abilities.wis.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityCha"), 'system.abilities.cha.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityCha", 'system.abilities.cha.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.DamImm"), 'system.traits.di.value', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.DamImm", 'system.traits.di.value', 'multiSelect', CONFIG.DND5E.damageTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.DamRes"), 'system.traits.dr.value', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.DamRes", 'system.traits.dr.value', 'multiSelect', CONFIG.DND5E.damageTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.DamVuln"), 'system.traits.dv.value', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.DamVuln", 'system.traits.dv.value', 'multiSelect', CONFIG.DND5E.damageTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.ConImm"), 'system.traits.ci.value', 'multiSelect', CONFIG.DND5E.conditionTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.ConImm", 'system.traits.ci.value', 'multiSelect', CONFIG.DND5E.conditionTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("CMPBrowser.dmgDealt"), 'damageDealt', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "CMPBrowser.dmgDealt", 'damageDealt', 'multiSelect', CONFIG.DND5E.damageTypes, true);
} }
else else
{ {
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityStr"), 'data.abilities.str.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityStr", 'data.abilities.str.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityDex"), 'data.abilities.dex.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityDex", 'data.abilities.dex.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityCon"), 'data.abilities.con.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityCon", 'data.abilities.con.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityInt"), 'data.abilities.int.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityInt", 'data.abilities.int.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityWis"), 'data.abilities.wis.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityWis", 'data.abilities.wis.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.abilities"), game.i18n.localize("DND5E.AbilityCha"), 'data.abilities.cha.value', 'numberCompare'); this.addNpcFilter("DND5E.Abilities", "DND5E.AbilityCha", 'data.abilities.cha.value', 'numberCompare');
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.DamImm"), 'data.traits.di.value', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.DamImm", 'data.traits.di.value', 'multiSelect', CONFIG.DND5E.damageTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.DamRes"), 'data.traits.dr.value', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.DamRes", 'data.traits.dr.value', 'multiSelect', CONFIG.DND5E.damageTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.DamVuln"), 'data.traits.dv.value', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.DamVuln", 'data.traits.dv.value', 'multiSelect', CONFIG.DND5E.damageTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.ConImm"), 'data.traits.ci.value', 'multiSelect', CONFIG.DND5E.conditionTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "DND5E.ConImm", 'data.traits.ci.value', 'multiSelect', CONFIG.DND5E.conditionTypes, true);
this.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("CMPBrowser.dmgDealt"), 'damageDealt', 'multiSelect', CONFIG.DND5E.damageTypes, true); this.addNpcFilter("CMPBrowser.dmgInteraction", "CMPBrowser.dmgDealt", 'damageDealt', 'multiSelect', CONFIG.DND5E.damageTypes, true);
} }
} }
@ -1705,6 +1752,246 @@ class CompendiumBrowser extends Application {
addItemFilter(category, label, path, type, possibleValues = null, valIsArray = false) { addItemFilter(category, label, path, type, possibleValues = null, valIsArray = false) {
this.addFilter('item', category, label, path, type, possibleValues, valIsArray); this.addFilter('item', category, label, path, type, possibleValues, valIsArray);
} }
async renderWith(tab="spell", filters=[]){
//if there isn't a tab error out
if(!this[`${tab}Filters`]){
ui.notifications.warn(`no tab by name ${tab}`);
return
}
this.resetFilters();
this.refreshList = tab;
let html = await this.render();
let activateFilters = filters.reduce((acc, input) => {
let filter = this.findFilter(tab, input.section, input.label);
if (filter){
if (input.value){
filter.value = input.value;
}
else if(input.values){
filter.values = input.values;
}
else{
ui.notifications.warn(`no value(s) in filter:${tab} ${input.section}, ${input.label}`);
}
acc[stripSpecialCharacters(filter.path)] = filter;
}
else{
ui.notifications.warn(`filter not found: tab:${tab} ${input.section}, ${input.label}.`);
}
return acc;
},
{})
this[`${tab}Filters`].activeFilters = activateFilters;
//wait for after the afterRender function to change tabs
//this avoids some errors when initially opening the window
CompendiumBrowser.postRender = async ()=>{
CompendiumBrowser.postRender = ()=>{};
await html.activateTab(tab);
for (let input of filters){
let filter = this.findFilter(tab, input.section, input.label);
if (!filter){
continue;
}
const typeMap = {
select:"select",
bool: "select",
text: "input",
}
if (filter.type in typeMap){
let component = html.element.find(`div.tab.active #${input.section}-${input.label} ${typeMap[filter.type]}`)
component[0].value = input.value;
}
else if (filter.type == "multiSelect"){
let components = html.element.find(`div.tab.active #${input.section}-${input.label}`)
for (let v of input.values){
let c = components.find(`input[data-value=${v}]`)
c.prop( "checked", true );
}
}
else{
ui.notifications.warn(`Unknown filter type?`);
console.log(filter)
}
}
};
this.render(true);
return this
}
findFilter(type, category, label){
let target = `${type}Filters`;
let catId = stripSpecialCharacters(category);
if (!this[target].registeredFilterCategorys[catId]){
return;
}
let filter = this[target].registeredFilterCategorys[catId].filters.
find(x => x.labelId == label)
if (!filter){
return;
}
return {
path: filter.path,
type: filter.type,
valIsArray: filter.valIsArray,
}
}
async copySearchToClipboard(tab){
const text = this.getSearchText(tab)
try {
await navigator.clipboard.writeText(text);
ui.notifications.info("Javascript Copied to clipboard")
} catch (err) {
ui.notifications.warn("failed to copy javascript to clipboard, check logs for string")
console.error('Failed to copy: ', err);
console.log(text);
}
}
getSearchText(tab){
const target = `${tab}Filters`
//map active filters to their labels
let output = Object.values(this[target].activeFilters).map(filter => {
//find Filters from paths
let out = this.findFilterR(target, filter)
if(filter.value){
out.value = filter.value;
}
else if(filter.values){
out.values = filter.values;
}
return out;
})
const strOut = `game.compendiumBrowser.renderWith("${tab}", ${JSON.stringify(output)})`
return strOut;
}
findFilterR(target, filterTarget){
for (let cat of Object.keys(this[target].registeredFilterCategorys)){
for (let filter of this[target].registeredFilterCategorys[cat].filters){
if (filterTarget.path == filter.path){
return {section:`${cat}`, label:`${filter.labelId}`}
}
}
}
ui.notifications.warn("Could not find the filter!!")
console.warn(filterTarget)
return;
}
static async addTidySheetButton(cb, html, actor){
await html.find('.spell-browser-btn').remove();
let tabBar = html.find("div.tab.spellbook .spellcasting-ability")
// console.log(tabBar)
const cbButton = $(`<div style="max-width:40px;min-width:32px;"><button class="compendium-browser spell-browser-btn"><i class="fa-duotone fa-book"></i></button></div>`);
tabBar.append(cbButton)
CompendiumBrowser.addSpellsButton(cbButton, actor.actor)
}
static async addDefaultSheetButton(cb, html, actor){
await html.find('.spell-browser-btn').remove();
let tabBar = html.find("div.spellbook-filters")
// console.log(tabBar)
const cbButton = $(`<div style="max-width:40px;min-width:32px;"><button class="compendium-browser spell-browser-btn"><i class="fa-duotone fa-book"></i></button></div>`);
tabBar.append(cbButton)
CompendiumBrowser.addSpellsButton(cbButton, actor.actor)
}
static addSpellsButton(cbButton, character){
cbButton.click(async ev => {
ev.preventDefault();
let target = [];
target = target.concat(CompendiumBrowser.findCasterClass(character));
target = target.concat(CompendiumBrowser.findMaxCasterLevel(character));
game.compendiumBrowser.renderWith("spell", target);
});
}
//find the first caster class of the character
static findCasterClass(character){
const options = ["artificer", "bard", "cleric", "druid", "paladin", "ranger", "sorcerer", "warlock", "wizard"]
for (let cls of Object.keys(character.classes)){
if (options.includes(cls)){
return [{"section":"CMPBrowsergeneral","label":"ITEMTypeClass","value":cls}];
}
}
return [];
}
static findMaxCasterLevel(character){
//find max spell level
let maxLevel = Object.keys(character.system.spells).reduce((acc, spell)=>{
//special case for pact magic
if (spell == "pact"){
return Math.max(character.system.spells[spell].level, acc)
}
else{
let spellObject = character.system.spells[spell];
if ((spellObject.override ?? spellObject.max) > 0){
let match = spell.match(/spell(?<lvl>\d+)/);
return Math.max(parseInt(match.groups.lvl), acc)
}
}
return acc
}, 0)
if (maxLevel > 0){
return [{"section":"CMPBrowsergeneral","label":"DND5ELevel", values: [...Array(maxLevel + 1).keys()]}];
}
return [];
}
} }
Hooks.on('ready', async () => { Hooks.on('ready', async () => {
@ -1723,4 +2010,11 @@ Hooks.on('ready', async () => {
}); });
function stripSpecialCharacters(str){
return str.replace(/\W/g, '');
}
Hooks.on("renderActorSheet5eCharacter", CompendiumBrowser.addDefaultSheetButton);
Hooks.on("renderTidy5eSheet", CompendiumBrowser.addTidySheetButton);
Hooks.on("renderCompendiumBrowser", CompendiumBrowser.afterRender); Hooks.on("renderCompendiumBrowser", CompendiumBrowser.afterRender);

View File

@ -1,61 +1,59 @@
{ {
"CMPBrowser.compendiumBrowser": "Kompendium Browser", "CMPBrowser.compendiumBrowser": "Kompendium Browser",
"CMPBrowser.sortBy": "Sortiere anhand", "CMPBrowser.sortBy": "Sortiere anhand",
"CMPBrowser.cr": "Herausforderungsgrad", "CMPBrowser.generalSettings": "Allgemeine Einstellungen",
"CMPBrowser.generalSettings": "Allgemeine Einstellungen", "CMPBrowser.allowSpellAcc": "Erlaubew Spielern den Zugriff auf den Zauber Browser",
"CMPBrowser.allowSpellAcc": "Erlaubew Spielern den Zugriff auf den Zauber Browser", "CMPBrowser.allowFeatAcc": "Allow Players Access to the feat browser",
"CMPBrowser.allowNpcAcc": "Erlaube Spielern den Zugriff auf den NSC Browser", "CMPBrowser.allowItemAcc": "Allow Players Access to the item browser",
"CMPBrowser.compSettingsSpell": "Gegenstands Kompendium Einstellungen", "CMPBrowser.allowNpcAcc": "Erlaube Spielern den Zugriff auf den NSC Browser",
"CMPBrowser.compSettingsNpc": "NSC Kompendium Einstellungen", "CMPBrowser.compSettingsSpell": "Gegenstands Kompendium Einstellungen",
"CMPBrowser.load": "Laden", "CMPBrowser.compSettingsNpc": "NSC Kompendium Einstellungen",
"CMPBrowser.lvl": "Stufe", "CMPBrowser.load": "Laden",
"CMPBrowser.ritual": "Ritual", "CMPBrowser.castingTime": "Wirkungsdauer",
"CMPBrowser.concentration": "Konzentration", "CMPBrowser.spellType": "Zauberart",
"CMPBrowser.verbal": "Verbal", "CMPBrowser.damageType": "Schadensart",
"CMPBrowser.somatic": "Gesten", "CMPBrowser.UsesResources": "Uses Resources",
"CMPBrowser.material": "Material", "CMPBrowser.GameMechanics": "Game Mechanics",
"CMPBrowser.cantip": "Zaubertrick", "CMPBrowser.ItemSubtype": "Item Subtype",
"CMPBrowser.school": "Schule", "CMPBrowser.MagicItems": "Magic Items",
"CMPBrowser.castingTime": "Wirkungsdauer", "CMPBrowser.ItemsPacks": "Packs",
"CMPBrowser.bonusAction": "Bonusaktion", "CMPBrowser.ItemsPacksBurglar": "Burglar's Pack",
"CMPBrowser.reaction": "Reaktion", "CMPBrowser.ItemsPacksDiplomat": "Diplomat's Pack",
"CMPBrowser.spellType": "Zauberart", "CMPBrowser.ItemsPacksDungeoneer": "Dungeoneer's Pack",
"CMPBrowser.damageType": "Schadensart", "CMPBrowser.ItemsPacksEntertainer": "Entertainer's Pack",
"CMPBrowser.class": "Klasse", "CMPBrowser.ItemsPacksExplorer": "Explorer's Pack",
"CMPBrowser.artificer": "Artificer", "CMPBrowser.ItemsPacksMonsterHunter": "Monster Hunter's Pack",
"CMPBrowser.bard": "Barde", "CMPBrowser.ItemsPacksPriest": "Priest's Pack",
"CMPBrowser.cleric": "Kleriker", "CMPBrowser.ItemsPacksScholar": "Scholar's Pack",
"CMPBrowser.druid": "Druide", "CMPBrowser.artificer": "Artificer",
"CMPBrowser.paladin": "Paladin", "CMPBrowser.barbarian": "Barbarian",
"CMPBrowser.ranger": "Waldläufer", "CMPBrowser.bard": "Barde",
"CMPBrowser.sorcerer": "Zauberer", "CMPBrowser.cleric": "Kleriker",
"CMPBrowser.warlock": "Hexenmeister", "CMPBrowser.druid": "Druide",
"CMPBrowser.wizard": "Magier", "CMPBrowser.fighter": "Fighter",
"CMPBrowser.general": "Allgemein", "CMPBrowser.monk": "Monk",
"CMPBrowser.components": "Komponenten", "CMPBrowser.paladin": "Paladin",
"CMPBrowser.hasSpells": "Hat Zauber", "CMPBrowser.ranger": "Waldläufer",
"CMPBrowser.hasLegAct": "Hat Legendäre Aktionen", "CMPBrowser.rogue": "Rogue",
"CMPBrowser.hasLegRes": "Hat Legendäre Resistenz", "CMPBrowser.sorcerer": "Zauberer",
"CMPBrowser.creatureType": "Kreaturentyp", "CMPBrowser.warlock": "Hexenmeister",
"CMPBrowser.aberration": "Aberration", "CMPBrowser.wizard": "Magier",
"CMPBrowser.beast": "Tier", "CMPBrowser.general": "Allgemein",
"CMPBrowser.celestial": "Himmlischer", "CMPBrowser.hasSpells": "Hat Zauber",
"CMPBrowser.construct": "Konstrukt", "CMPBrowser.hasLegAct": "Hat Legendäre Aktionen",
"CMPBrowser.dragon": "Drache", "CMPBrowser.hasLegRes": "Hat Legendäre Resistenz",
"CMPBrowser.elemental": "Elementar", "CMPBrowser.dmgInteraction": "Schadensinteraktion",
"CMPBrowser.fey": "Fee", "CMPBrowser.dmgDealt": "Schaden zugefügt",
"CMPBrowser.fiend": "Unhold", "CMPBrowser.Tab.SpellBrowser": "Zauber Browser",
"CMPBrowser.giant": "Riese", "CMPBrowser.Tab.FeatBrowser": "Feat Browser",
"CMPBrowser.humanoid": "Humanoid", "CMPBrowser.Tab.ItemBrowser": "Item Browser",
"CMPBrowser.monstrosity": "Monstrosität", "CMPBrowser.Tab.NPCBrowser": "NSC Browser",
"CMPBrowser.ooze": "Schlick", "CMPBrowser.Tab.Settings": "Einstellungen",
"CMPBrowser.plant": "Pflanze", "CMPBrowser.SETTING.Maxload.NAME": "Maximum load",
"CMPBrowser.undead": "Untot", "CMPBrowser.SETTING.Maxload.HINT": "Maximum number of spells, feats, items, or NPCs to display; to see more use the filters. This setting is to allow manageing memory and server load.",
"CMPBrowser.abilities": "Fertigkeiten", "CMPBrowser.LOADING.Message": "Loading...{numLoaded} {itemType}s",
"CMPBrowser.dmgInteraction": "Schadensinteraktion", "CMPBrowser.LOADED.Message": "Loaded {numLoaded} {itemType}s",
"CMPBrowser.dmgDealt": "Schaden zugefügt", "CMPBrowser.LOADED.MaxLoaded": "(maximum displayed; to see more, use the filters)",
"CMPBrowser.size": "Größe", "CMPBrowser.Filters.ResetFilters": "Reset Filters"
"CMPBrowser.spellBrowser": "Zauber Browser",
"CMPBrowser.npcBrowser": "NSC Browser",
"CMPBrowser.settings": "Einstellungen"
} }

View File

@ -1,70 +1,61 @@
{ {
"CMPBrowser.compendiumBrowser":"Compendium Browser", "CMPBrowser.compendiumBrowser":"Compendium Browser",
"CMPBrowser.sortBy":"Sort by", "CMPBrowser.sortBy":"Sort by",
"CMPBrowser.cr":"Challenge Rating",
"CMPBrowser.generalSettings":"General Settings", "CMPBrowser.generalSettings":"General Settings",
"CMPBrowser.allowSpellAcc":"Allow Players Access to the spell browser", "CMPBrowser.allowSpellAcc": "Allow Players Access to the spell browser",
"CMPBrowser.allowNpcAcc":"Allow Players Access to the npc browser", "CMPBrowser.allowFeatAcc": "Allow Players Access to the feat browser",
"CMPBrowser.compSettingsSpell":"Item Compendium Settings", "CMPBrowser.allowItemAcc": "Allow Players Access to the item browser",
"CMPBrowser.compSettingsNpc":"NPC Compendium Settings", "CMPBrowser.allowNpcAcc": "Allow Players Access to the npc browser",
"CMPBrowser.compSettingsSpell": "Item Compendium Settings",
"CMPBrowser.compSettingsNpc": "NPC Compendium Settings",
"CMPBrowser.load":"Load", "CMPBrowser.load":"Load",
"CMPBrowser.lvl":"Level",
"CMPBrowser.ritual":"Ritual",
"CMPBrowser.concentration":"Concentration",
"CMPBrowser.verbal":"Verbal",
"CMPBrowser.somatic":"Somatic",
"CMPBrowser.material":"Material",
"CMPBrowser.cantip":"Cantrip",
"CMPBrowser.school":"School",
"CMPBrowser.castingTime":"Casting Time", "CMPBrowser.castingTime":"Casting Time",
"CMPBrowser.bonusAction":"Bonus Action",
"CMPBrowser.reaction":"Reaction",
"CMPBrowser.spellType":"Spell Type", "CMPBrowser.spellType":"Spell Type",
"CMPBrowser.damageType":"Damage Type", "CMPBrowser.damageType":"Damage Type",
"CMPBrowser.class":"Class", "CMPBrowser.UsesResources": "Uses Resources",
"CMPBrowser.artificer":"Artificer", "CMPBrowser.GameMechanics": "Game Mechanics",
"CMPBrowser.bard":"Bard", "CMPBrowser.ItemSubtype": "Item Subtype",
"CMPBrowser.cleric":"Cleric", "CMPBrowser.MagicItems": "Magic Items",
"CMPBrowser.druid":"Druid", "CMPBrowser.ItemsPacks": "Packs",
"CMPBrowser.paladin":"Paladin", "CMPBrowser.ItemsPacksBurglar": "Burglar's Pack",
"CMPBrowser.ranger":"Ranger", "CMPBrowser.ItemsPacksDiplomat": "Diplomat's Pack",
"CMPBrowser.sorcerer":"Sorcerer", "CMPBrowser.ItemsPacksDungeoneer": "Dungeoneer's Pack",
"CMPBrowser.warlock":"Warlock", "CMPBrowser.ItemsPacksEntertainer": "Entertainer's Pack",
"CMPBrowser.wizard":"Wizard", "CMPBrowser.ItemsPacksExplorer": "Explorer's Pack",
"CMPBrowser.ItemsPacksMonsterHunter": "Monster Hunter's Pack",
"CMPBrowser.ItemsPacksPriest": "Priest's Pack",
"CMPBrowser.ItemsPacksScholar": "Scholar's Pack",
"CMPBrowser.artificer": "Artificer",
"CMPBrowser.barbarian": "Barbarian",
"CMPBrowser.bard": "Bard",
"CMPBrowser.cleric": "Cleric",
"CMPBrowser.druid": "Druid",
"CMPBrowser.fighter": "Fighter",
"CMPBrowser.monk": "Monk",
"CMPBrowser.paladin": "Paladin",
"CMPBrowser.ranger": "Ranger",
"CMPBrowser.rogue": "Rogue",
"CMPBrowser.sorcerer": "Sorcerer",
"CMPBrowser.warlock": "Warlock",
"CMPBrowser.wizard": "Wizard",
"CMPBrowser.general":"General", "CMPBrowser.general":"General",
"CMPBrowser.components":"Components", "CMPBrowser.overall":"Overall Type",
"CMPBrowser.subfeature":"Subfeature Type",
"CMPBrowser.hasSpells":"Has Spells", "CMPBrowser.hasSpells":"Has Spells",
"CMPBrowser.hasLegAct":"Has Legendary Actions", "CMPBrowser.hasLegAct":"Has Legendary Actions",
"CMPBrowser.hasLegRes":"Has Legendary Resistance", "CMPBrowser.hasLegRes":"Has Legendary Resistance",
"CMPBrowser.creatureType":"Creature Type",
"CMPBrowser.aberration": "Aberration",
"CMPBrowser.beast": "Beast",
"CMPBrowser.celestial": "Celestial",
"CMPBrowser.construct": "construct",
"CMPBrowser.dragon": "Dragon",
"CMPBrowser.elemental": "Elemental",
"CMPBrowser.fey": "Fey",
"CMPBrowser.fiend": "Fiend",
"CMPBrowser.giant": "Giant",
"CMPBrowser.humanoid": "Humanoid",
"CMPBrowser.monstrosity": "Monstrosity",
"CMPBrowser.ooze": "Ooze",
"CMPBrowser.plant": "Plant",
"CMPBrowser.undead": "Undead",
"CMPBrowser.abilities": "Abilities",
"CMPBrowser.dmgInteraction": "Damage Interaction", "CMPBrowser.dmgInteraction": "Damage Interaction",
"CMPBrowser.dmgDealt": "Damage Dealt", "CMPBrowser.dmgDealt": "Damage Dealt",
"CMPBrowser.size": "Size", "CMPBrowser.Tab.SpellBrowser": "Spell Browser",
"CMPBrowser.Tab.SpellBrowser":"Spell Browser",
"CMPBrowser.Tab.FeatBrowser": "Feat Browser", "CMPBrowser.Tab.FeatBrowser": "Feat Browser",
"CMPBrowser.Tab.ItemBrowser": "Item Browser", "CMPBrowser.Tab.ItemBrowser": "Item Browser",
"CMPBrowser.Tab.NPCBrowser":"NPC Browser", "CMPBrowser.Tab.NPCBrowser": "NPC Browser",
"CMPBrowser.Tab.Settings":"Settings", "CMPBrowser.Tab.Settings": "Settings",
"CMPBrowser.SETTING.Maxload.NAME" : "Maximum load", "CMPBrowser.SETTING.Maxload.NAME": "Maximum load",
"CMPBrowser.SETTING.Maxload.HINT" : "Maximum number of spells, feats, items, or NPCs to display; to see more use the filters. This setting is to allow manageing memory and server load.", "CMPBrowser.SETTING.Maxload.HINT": "Maximum number of spells, feats, items, or NPCs to display; to see more use the filters. This setting is to allow manageing memory and server load.",
"CMPBrowser.LOADING.Message" : "Loading...{numLoaded} {itemType}s", "CMPBrowser.LOADING.Message": "Loading...{numLoaded} {itemType}s",
"CMPBrowser.LOADED.Message": "Loaded {numLoaded} {itemType}s", "CMPBrowser.LOADED.Message": "Loaded {numLoaded} {itemType}s",
"CMPBrowser.LOADED.MaxLoaded" : "(maximum displayed; to see more, use the filters)", "CMPBrowser.LOADED.MaxLoaded": "(maximum displayed; to see more, use the filters)",
"CMPBrowser.Filters.ResetFilters" : "Reset Filters" "CMPBrowser.Filters.ResetFilters": "Reset Filters"
} }

View File

@ -1,66 +1,59 @@
{ {
"CMPBrowser.compendiumBrowser": "Compendium Browser", "CMPBrowser.compendiumBrowser": "Compendium Browser",
"CMPBrowser.sortBy": "Ordenar por", "CMPBrowser.sortBy": "Ordenar por",
"CMPBrowser.cr": "Valor de Desafío", "CMPBrowser.generalSettings": "Opciones generales",
"CMPBrowser.generalSettings": "Opciones generales", "CMPBrowser.allowSpellAcc": "Permitir a los jugadores el acceso al navegador de conjuros",
"CMPBrowser.allowSpellAcc": "Permitir a los jugadores el acceso al navegador de conjuros", "CMPBrowser.allowFeatAcc": "Allow Players Access to the feat browser",
"CMPBrowser.allowNpcAcc": "Permitir a los jugadores el acceso al navegador de NPCs", "CMPBrowser.allowItemAcc": "Allow Players Access to the item browser",
"CMPBrowser.compSettingsSpell": "Opciones del compendio de objetos", "CMPBrowser.allowNpcAcc": "Permitir a los jugadores el acceso al navegador de NPCs",
"CMPBrowser.compSettingsNpc": "Opciones del compendio de NPCs", "CMPBrowser.compSettingsSpell": "Opciones del compendio de objetos",
"CMPBrowser.load": "Cargar", "CMPBrowser.compSettingsNpc": "Opciones del compendio de NPCs",
"CMPBrowser.lvl": "Nivel", "CMPBrowser.load": "Cargar",
"CMPBrowser.ritual": "Ritual", "CMPBrowser.castingTime": "Tiempo de lanzamiento",
"CMPBrowser.concentration": "Concentración", "CMPBrowser.spellType": "Tipo de conjuro",
"CMPBrowser.verbal": "Verbal", "CMPBrowser.damageType": "Tipo de daño",
"CMPBrowser.somatic": "Somático", "CMPBrowser.UsesResources": "Uses Resources",
"CMPBrowser.material": "Material", "CMPBrowser.GameMechanics": "Game Mechanics",
"CMPBrowser.cantip": "Truco", "CMPBrowser.ItemSubtype": "Item Subtype",
"CMPBrowser.school": "Escuela", "CMPBrowser.MagicItems": "Magic Items",
"CMPBrowser.castingTime": "Tiempo de lanzamiento", "CMPBrowser.ItemsPacks": "Packs",
"CMPBrowser.bonusAction": "Acción adicional", "CMPBrowser.ItemsPacksBurglar": "Burglar's Pack",
"CMPBrowser.reaction": "Reacción", "CMPBrowser.ItemsPacksDiplomat": "Diplomat's Pack",
"CMPBrowser.spellType": "Tipo de conjuro", "CMPBrowser.ItemsPacksDungeoneer": "Dungeoneer's Pack",
"CMPBrowser.damageType": "Tipo de daño", "CMPBrowser.ItemsPacksEntertainer": "Entertainer's Pack",
"CMPBrowser.class": "Clase", "CMPBrowser.ItemsPacksExplorer": "Explorer's Pack",
"CMPBrowser.artificer": "Artificiero", "CMPBrowser.ItemsPacksMonsterHunter": "Monster Hunter's Pack",
"CMPBrowser.bard": "Bardo", "CMPBrowser.ItemsPacksPriest": "Priest's Pack",
"CMPBrowser.cleric": "Clérigo", "CMPBrowser.ItemsPacksScholar": "Scholar's Pack",
"CMPBrowser.druid": "Druida", "CMPBrowser.artificer": "Artificiero",
"CMPBrowser.fighter": "Guerrero", "CMPBrowser.barbarian": "Barbarian",
"CMPBrowser.monk": "Monje", "CMPBrowser.bard": "Bardo",
"CMPBrowser.paladin": "Paladín", "CMPBrowser.cleric": "Clérigo",
"CMPBrowser.ranger": "Explorador", "CMPBrowser.druid": "Druida",
"CMPBrowser.rogue": "Pícaro", "CMPBrowser.fighter": "Guerrero",
"CMPBrowser.sorcerer": "Hechicero", "CMPBrowser.monk": "Monje",
"CMPBrowser.warlock": "Brujo", "CMPBrowser.paladin": "Paladín",
"CMPBrowser.wizard": "Mago", "CMPBrowser.ranger": "Explorador",
"CMPBrowser.general": "General", "CMPBrowser.rogue": "Pícaro",
"CMPBrowser.components": "Componentes", "CMPBrowser.sorcerer": "Hechicero",
"CMPBrowser.hasSpells": "Tiene conjuros", "CMPBrowser.warlock": "Brujo",
"CMPBrowser.hasLegAct": "Tiene acciones legendarias", "CMPBrowser.wizard": "Mago",
"CMPBrowser.hasLegRes": "Tiene resistencia legendaria", "CMPBrowser.general": "General",
"CMPBrowser.creatureType": "Tipo de criatura", "CMPBrowser.hasSpells": "Tiene conjuros",
"CMPBrowser.aberration": "Aberración", "CMPBrowser.hasLegAct": "Tiene acciones legendarias",
"CMPBrowser.beast": "Bestia", "CMPBrowser.hasLegRes": "Tiene resistencia legendaria",
"CMPBrowser.celestial": "Celestial", "CMPBrowser.dmgInteraction": "Interacción con el daño",
"CMPBrowser.construct": "Autómata", "CMPBrowser.dmgDealt": "Daño infligido",
"CMPBrowser.dragon": "Dragón", "CMPBrowser.Tab.SpellBrowser": "Conjuros",
"CMPBrowser.elemental": "Elemental", "CMPBrowser.Tab.FeatBrowser": "Rasgos de clase",
"CMPBrowser.fey": "Feérico", "CMPBrowser.Tab.ItemBrowser": "Objetos",
"CMPBrowser.fiend": "Infernal", "CMPBrowser.Tab.NPCBrowser": "NPCs",
"CMPBrowser.giant": "Gigante", "CMPBrowser.Tab.Settings": "Opciones",
"CMPBrowser.humanoid": "Humanoide", "CMPBrowser.SETTING.Maxload.NAME": "Maximum load",
"CMPBrowser.monstrosity": "Monstruosidad", "CMPBrowser.SETTING.Maxload.HINT": "Maximum number of spells, feats, items, or NPCs to display; to see more use the filters. This setting is to allow manageing memory and server load.",
"CMPBrowser.ooze": "Cieno", "CMPBrowser.LOADING.Message": "Loading...{numLoaded} {itemType}s",
"CMPBrowser.plant": "Planta", "CMPBrowser.LOADED.Message": "Loaded {numLoaded} {itemType}s",
"CMPBrowser.undead": "Muerto viviente", "CMPBrowser.LOADED.MaxLoaded": "(maximum displayed; to see more, use the filters)",
"CMPBrowser.abilities": "Habilidades", "CMPBrowser.Filters.ResetFilters": "Reset Filters"
"CMPBrowser.dmgInteraction": "Interacción con el daño",
"CMPBrowser.dmgDealt": "Daño infligido",
"CMPBrowser.size": "Tamaño",
"CMPBrowser.spellBrowser": "Conjuros",
"CMPBrowser.npcBrowser": "NPCs",
"CMPBrowser.featBrowser": "Rasgos de clase",
"CMPBrowser.itemBrowser": "Objetos",
"CMPBrowser.settings": "Opciones"
} }

View File

@ -1,60 +1,59 @@
{ {
"CMPBrowser.compendiumBrowser":"Recherche dans les Compendium", "CMPBrowser.compendiumBrowser":"Recherche dans les Compendium",
"CMPBrowser.sortBy":"Trié par", "CMPBrowser.sortBy":"Trié par",
"CMPBrowser.cr":"Niveau de la rencontre",
"CMPBrowser.generalSettings":"Paramètres généraux", "CMPBrowser.generalSettings":"Paramètres généraux",
"CMPBrowser.allowSpellAcc":"Autoriser les joueurs à accéder aux listes de sorts", "CMPBrowser.allowSpellAcc":"Autoriser les joueurs à accéder aux listes de sorts",
"CMPBrowser.allowFeatAcc": "Allow Players Access to the feat browser",
"CMPBrowser.allowItemAcc": "Allow Players Access to the item browser",
"CMPBrowser.allowNpcAcc":"Autoriser les joueurs à accéder aux listes de PNJ", "CMPBrowser.allowNpcAcc":"Autoriser les joueurs à accéder aux listes de PNJ",
"CMPBrowser.compSettingsSpell":"Paramètres de compendium de sorts", "CMPBrowser.compSettingsSpell":"Paramètres de compendium de sorts",
"CMPBrowser.compSettingsNpc":"Paramètres de compendium de PNJ", "CMPBrowser.compSettingsNpc":"Paramètres de compendium de PNJ",
"CMPBrowser.load":"Charger", "CMPBrowser.load":"Charger",
"CMPBrowser.lvl":"Level",
"CMPBrowser.ritual":"Rituel",
"CMPBrowser.concentration":"Concentration",
"CMPBrowser.verbal":"Verbales",
"CMPBrowser.somatic":"Somatiques",
"CMPBrowser.material":"Matérielles",
"CMPBrowser.cantip":"Tours de magie",
"CMPBrowser.school":"Ecole",
"CMPBrowser.castingTime":"Durée d'incantation", "CMPBrowser.castingTime":"Durée d'incantation",
"CMPBrowser.bonusAction":"Action Bonus",
"CMPBrowser.reaction":"Réaction",
"CMPBrowser.spellType":"Type de sort", "CMPBrowser.spellType":"Type de sort",
"CMPBrowser.damageType":"Type de dégâts", "CMPBrowser.damageType":"Type de dégâts",
"CMPBrowser.class":"Classe", "CMPBrowser.UsesResources": "Uses Resources",
"CMPBrowser.GameMechanics": "Game Mechanics",
"CMPBrowser.ItemSubtype": "Item Subtype",
"CMPBrowser.MagicItems": "Magic Items",
"CMPBrowser.ItemsPacks": "Packs",
"CMPBrowser.ItemsPacksBurglar": "Burglar's Pack",
"CMPBrowser.ItemsPacksDiplomat": "Diplomat's Pack",
"CMPBrowser.ItemsPacksDungeoneer": "Dungeoneer's Pack",
"CMPBrowser.ItemsPacksEntertainer": "Entertainer's Pack",
"CMPBrowser.ItemsPacksExplorer": "Explorer's Pack",
"CMPBrowser.ItemsPacksMonsterHunter": "Monster Hunter's Pack",
"CMPBrowser.ItemsPacksPriest": "Priest's Pack",
"CMPBrowser.ItemsPacksScholar": "Scholar's Pack",
"CMPBrowser.artificer": "Artificer",
"CMPBrowser.barbarian": "Barbarian",
"CMPBrowser.bard":"Barde", "CMPBrowser.bard":"Barde",
"CMPBrowser.cleric":"Clerc", "CMPBrowser.cleric":"Clerc",
"CMPBrowser.druid":"Druide", "CMPBrowser.druid":"Druide",
"CMPBrowser.fighter": "Fighter",
"CMPBrowser.monk": "Monk",
"CMPBrowser.paladin":"Paladin", "CMPBrowser.paladin":"Paladin",
"CMPBrowser.ranger":"Rôdeur", "CMPBrowser.ranger":"Rôdeur",
"CMPBrowser.rogue": "Rogue",
"CMPBrowser.sorcerer":"Sorcier", "CMPBrowser.sorcerer":"Sorcier",
"CMPBrowser.warlock":"Ensorceleur", "CMPBrowser.warlock":"Ensorceleur",
"CMPBrowser.wizard":"Magicien", "CMPBrowser.wizard":"Magicien",
"CMPBrowser.general":"Général", "CMPBrowser.general":"Général",
"CMPBrowser.components":"Composants",
"CMPBrowser.hasSpells":"à des Sorts", "CMPBrowser.hasSpells":"à des Sorts",
"CMPBrowser.hasLegAct":"à des Actions Légendaires", "CMPBrowser.hasLegAct":"à des Actions Légendaires",
"CMPBrowser.hasLegRes":"à des Resistances Légendaires", "CMPBrowser.hasLegRes":"à des Resistances Légendaires",
"CMPBrowser.creatureType":"Type de Créature",
"CMPBrowser.aberration": "Aberration",
"CMPBrowser.beast": "Bête",
"CMPBrowser.celestial": "Céleste",
"CMPBrowser.construct": "Artificielles",
"CMPBrowser.dragon": "Dragon",
"CMPBrowser.elemental": "Elementaire",
"CMPBrowser.fey": "Fée",
"CMPBrowser.fiend": "Fiélon",
"CMPBrowser.giant": "Géant",
"CMPBrowser.humanoid": "Humanoïde",
"CMPBrowser.monstrosity": "Monstrueuse",
"CMPBrowser.ooze": "Vase",
"CMPBrowser.plant": "Plante",
"CMPBrowser.undead": "Morts-vivants",
"CMPBrowser.abilities": "Capacités",
"CMPBrowser.dmgInteraction": "Spécificité des dégâts", "CMPBrowser.dmgInteraction": "Spécificité des dégâts",
"CMPBrowser.dmgDealt": "Type de dégats", "CMPBrowser.dmgDealt": "Type de dégats",
"CMPBrowser.size": "Taille", "CMPBrowser.Tab.SpellBrowser": "Recherche de sorts",
"CMPBrowser.spellBrowser":"Recherche de sorts", "CMPBrowser.Tab.FeatBrowser": "Feat Browser",
"CMPBrowser.npcBrowser":"Recherche de PNJ", "CMPBrowser.Tab.ItemBrowser": "Item Browser",
"CMPBrowser.settings":"Paramétrages" "CMPBrowser.Tab.NPCBrowser": "Recherche de PNJ",
} "CMPBrowser.Tab.Settings": "Paramétrages",
"CMPBrowser.SETTING.Maxload.NAME": "Maximum load",
"CMPBrowser.SETTING.Maxload.HINT": "Maximum number of spells, feats, items, or NPCs to display; to see more use the filters. This setting is to allow manageing memory and server load.",
"CMPBrowser.LOADING.Message": "Loading...{numLoaded} {itemType}s",
"CMPBrowser.LOADED.Message": "Loaded {numLoaded} {itemType}s",
"CMPBrowser.LOADED.MaxLoaded": "(maximum displayed; to see more, use the filters)",
"CMPBrowser.Filters.ResetFilters": "Reset Filters"
}

View File

@ -1,60 +1,59 @@
{ {
"CMPBrowser.compendiumBrowser":"辞典ブラウザ", "CMPBrowser.compendiumBrowser":"辞典ブラウザ",
"CMPBrowser.sortBy":"並び替え", "CMPBrowser.sortBy":"並び替え",
"CMPBrowser.cr":"難易度",
"CMPBrowser.generalSettings":"一般設定", "CMPBrowser.generalSettings":"一般設定",
"CMPBrowser.allowSpellAcc":"プレイヤーに呪文辞典の使用を許可する。", "CMPBrowser.allowSpellAcc":"プレイヤーに呪文辞典の使用を許可する。",
"CMPBrowser.allowFeatAcc": "Allow Players Access to the feat browser",
"CMPBrowser.allowItemAcc": "Allow Players Access to the item browser",
"CMPBrowser.allowNpcAcc":"プレイヤーにNPC辞典の使用を許可する。", "CMPBrowser.allowNpcAcc":"プレイヤーにNPC辞典の使用を許可する。",
"CMPBrowser.compSettingsSpell":"呪文辞典設定", "CMPBrowser.compSettingsSpell":"呪文辞典設定",
"CMPBrowser.compSettingsNpc":"NPC辞典設定", "CMPBrowser.compSettingsNpc":"NPC辞典設定",
"CMPBrowser.load":"追加", "CMPBrowser.load":"追加",
"CMPBrowser.lvl":"レベル",
"CMPBrowser.ritual":"儀式",
"CMPBrowser.concentration":"集中",
"CMPBrowser.verbal":"音声",
"CMPBrowser.somatic":"動作",
"CMPBrowser.material":"物質",
"CMPBrowser.cantip":"初級",
"CMPBrowser.school":"系統",
"CMPBrowser.castingTime":"発動時間", "CMPBrowser.castingTime":"発動時間",
"CMPBrowser.bonusAction":"ボーナスアクション",
"CMPBrowser.reaction":"リアクション",
"CMPBrowser.spellType":"呪文種別", "CMPBrowser.spellType":"呪文種別",
"CMPBrowser.damageType":"ダメージ種別", "CMPBrowser.damageType":"ダメージ種別",
"CMPBrowser.class":"クラス", "CMPBrowser.UsesResources": "Uses Resources",
"CMPBrowser.GameMechanics": "Game Mechanics",
"CMPBrowser.ItemSubtype": "Item Subtype",
"CMPBrowser.MagicItems": "Magic Items",
"CMPBrowser.ItemsPacks": "Packs",
"CMPBrowser.ItemsPacksBurglar": "Burglar's Pack",
"CMPBrowser.ItemsPacksDiplomat": "Diplomat's Pack",
"CMPBrowser.ItemsPacksDungeoneer": "Dungeoneer's Pack",
"CMPBrowser.ItemsPacksEntertainer": "Entertainer's Pack",
"CMPBrowser.ItemsPacksExplorer": "Explorer's Pack",
"CMPBrowser.ItemsPacksMonsterHunter": "Monster Hunter's Pack",
"CMPBrowser.ItemsPacksPriest": "Priest's Pack",
"CMPBrowser.ItemsPacksScholar": "Scholar's Pack",
"CMPBrowser.artificer": "Artificer",
"CMPBrowser.barbarian": "Barbarian",
"CMPBrowser.bard":"バード", "CMPBrowser.bard":"バード",
"CMPBrowser.cleric":"クレリック", "CMPBrowser.cleric":"クレリック",
"CMPBrowser.druid":"ドルイド", "CMPBrowser.druid":"ドルイド",
"CMPBrowser.fighter": "Fighter",
"CMPBrowser.monk": "Monk",
"CMPBrowser.paladin":"パラディン", "CMPBrowser.paladin":"パラディン",
"CMPBrowser.ranger":"レンジャー", "CMPBrowser.ranger":"レンジャー",
"CMPBrowser.rogue": "Rogue",
"CMPBrowser.sorcerer":"ソーサラー", "CMPBrowser.sorcerer":"ソーサラー",
"CMPBrowser.warlock":"ウォーロック", "CMPBrowser.warlock":"ウォーロック",
"CMPBrowser.wizard":"ウィザード", "CMPBrowser.wizard":"ウィザード",
"CMPBrowser.general":"一般", "CMPBrowser.general":"一般",
"CMPBrowser.components":"物質構成要素",
"CMPBrowser.hasSpells":"術者", "CMPBrowser.hasSpells":"術者",
"CMPBrowser.hasLegAct":"伝説的アクション所持", "CMPBrowser.hasLegAct":"伝説的アクション所持",
"CMPBrowser.hasLegRes":"伝説的抵抗所持", "CMPBrowser.hasLegRes":"伝説的抵抗所持",
"CMPBrowser.creatureType":"クリーチャー種別",
"CMPBrowser.aberration": "異形",
"CMPBrowser.beast": "野獣",
"CMPBrowser.celestial": "セレスチャル",
"CMPBrowser.construct": "人造",
"CMPBrowser.dragon": "ドラゴン",
"CMPBrowser.elemental": "エレメンタル",
"CMPBrowser.fey": "フェイ",
"CMPBrowser.fiend": "フィーンド",
"CMPBrowser.giant": "巨人",
"CMPBrowser.humanoid": "ヒューマノイド",
"CMPBrowser.monstrosity": "怪物",
"CMPBrowser.ooze": "粘体",
"CMPBrowser.plant": "植物",
"CMPBrowser.undead": "アンデッド",
"CMPBrowser.abilities": "能力値",
"CMPBrowser.dmgInteraction": "ダメージ関連", "CMPBrowser.dmgInteraction": "ダメージ関連",
"CMPBrowser.dmgDealt": "与えるダメージ種別", "CMPBrowser.dmgDealt": "与えるダメージ種別",
"CMPBrowser.size": "サイズ", "CMPBrowser.Tab.SpellBrowser":"呪文ブラウザ",
"CMPBrowser.spellBrowser":"呪文ブラウザ", "CMPBrowser.Tab.FeatBrowser": "Feat Browser",
"CMPBrowser.npcBrowser":"NPCブラウザ", "CMPBrowser.Tab.ItemBrowser": "Item Browser",
"CMPBrowser.settings":"設定" "CMPBrowser.Tab.NPCBrowser":"NPCブラウザ",
"CMPBrowser.Tab.Settings":"設定",
"CMPBrowser.SETTING.Maxload.NAME": "Maximum load",
"CMPBrowser.SETTING.Maxload.HINT": "Maximum number of spells, feats, items, or NPCs to display; to see more use the filters. This setting is to allow manageing memory and server load.",
"CMPBrowser.LOADING.Message": "Loading...{numLoaded} {itemType}s",
"CMPBrowser.LOADED.Message": "Loaded {numLoaded} {itemType}s",
"CMPBrowser.LOADED.MaxLoaded": "(maximum displayed; to see more, use the filters)",
"CMPBrowser.Filters.ResetFilters": "Reset Filters"
} }

View File

@ -1,61 +1,59 @@
{ {
"CMPBrowser.compendiumBrowser":"Navegador de Compêndio", "CMPBrowser.compendiumBrowser": "Navegador de Compêndio",
"CMPBrowser.sortBy":"Classificar por", "CMPBrowser.sortBy": "Classificar por",
"CMPBrowser.cr":"Nivel de Desafio", "CMPBrowser.generalSettings": "Configurações Gerais",
"CMPBrowser.generalSettings":"Configurações Gerais", "CMPBrowser.allowSpellAcc": "Permite o acesso dos jogadores ao navegador de Magias",
"CMPBrowser.allowSpellAcc":"Permite o acesso dos jogadores ao navegador de magias", "CMPBrowser.allowFeatAcc": "Permite o acesso dos jogadores ao navegador de Características",
"CMPBrowser.allowNpcAcc":"Permite o acesso dos jogadores ao navegador de NPCs", "CMPBrowser.allowItemAcc": "Permite o acesso dos jogadores ao navegador de Itens",
"CMPBrowser.compSettingsSpell":"Configuração de Compêndio de Itens", "CMPBrowser.allowNpcAcc": "Permite o acesso dos jogadores ao navegador de NPCs",
"CMPBrowser.compSettingsNpc":"Configuração de Compêndio de NPCs", "CMPBrowser.compSettingsSpell": "Configuração de Compêndio de Itens",
"CMPBrowser.load":"Carregar", "CMPBrowser.compSettingsNpc": "Configuração de Compêndio de NPCs",
"CMPBrowser.lvl":"Nivel", "CMPBrowser.load": "Carregar",
"CMPBrowser.ritual":"Ritual", "CMPBrowser.castingTime": "Custo de Ativação",
"CMPBrowser.concentration":"Concentraçãon", "CMPBrowser.spellType": "Tipo da Magia",
"CMPBrowser.verbal":"Verbal", "CMPBrowser.damageType": "Tipo de Dano",
"CMPBrowser.somatic":"Somático", "CMPBrowser.UsesResources": "Usa Recursos",
"CMPBrowser.material":"Material", "CMPBrowser.GameMechanics": "Mecânicas do Jogo",
"CMPBrowser.cantip":"Truque", "CMPBrowser.ItemSubtype": "Tipo do Item",
"CMPBrowser.school":"Escola", "CMPBrowser.MagicItems": "Itens Mágicos",
"CMPBrowser.castingTime":"Custo de Ativação", "CMPBrowser.ItemsPacks": "Kits de Equipamentos",
"CMPBrowser.bonusAction":"Ação bonus", "CMPBrowser.ItemsPacksBurglar": "Kit de Assaltante",
"CMPBrowser.reaction":"Reação", "CMPBrowser.ItemsPacksDiplomat": "Kit de Diplomata",
"CMPBrowser.spellType":"Tipo da Magia", "CMPBrowser.ItemsPacksDungeoneer": "Kit de Explorador",
"CMPBrowser.damageType":"Tipo de Dano", "CMPBrowser.ItemsPacksEntertainer": "Kit de Artista",
"CMPBrowser.class":"Classe", "CMPBrowser.ItemsPacksExplorer": "Kit de Aventureiro",
"CMPBrowser.artificer":"Artífice", "CMPBrowser.ItemsPacksMonsterHunter": "Monster Hunter's Pack",
"CMPBrowser.bard":"Bardo", "CMPBrowser.ItemsPacksPriest": "Kit de Sacerdote",
"CMPBrowser.cleric":"Clerigo", "CMPBrowser.ItemsPacksScholar": "Kit de Erudito",
"CMPBrowser.druid":"Druida", "CMPBrowser.artificer": "Artífice",
"CMPBrowser.paladin":"Paladino", "CMPBrowser.barbarian": "Bárbaro",
"CMPBrowser.ranger":"Guardião", "CMPBrowser.bard": "Bardo",
"CMPBrowser.sorcerer":"Geiticeiro", "CMPBrowser.cleric": "Clérigo",
"CMPBrowser.warlock":"Bruxo", "CMPBrowser.druid": "Druida",
"CMPBrowser.wizard":"Mago", "CMPBrowser.fighter": "Guerreiro",
"CMPBrowser.general":"Geral", "CMPBrowser.monk": "Monge",
"CMPBrowser.components":"Componentes", "CMPBrowser.paladin": "Paladino",
"CMPBrowser.hasSpells":"Tem Magias", "CMPBrowser.ranger": "Guardião",
"CMPBrowser.hasLegAct":"Tem Ações Lendárias", "CMPBrowser.rogue": "Ladino",
"CMPBrowser.hasLegRes":"Tem Resistência Lendária", "CMPBrowser.sorcerer": "Feiticeiro",
"CMPBrowser.creatureType":"Tipo de Criatura", "CMPBrowser.warlock": "Bruxo",
"CMPBrowser.aberration": "Aberração", "CMPBrowser.wizard": "Mago",
"CMPBrowser.beast": "Besta", "CMPBrowser.general": "Geral",
"CMPBrowser.celestial": "Celestial", "CMPBrowser.hasSpells": "Tem Magias",
"CMPBrowser.construct": "Constructo", "CMPBrowser.hasLegAct": "Tem Ações Lendárias",
"CMPBrowser.dragon": "Dragão", "CMPBrowser.hasLegRes": "Tem Resistência Lendária",
"CMPBrowser.elemental": "Elemental",
"CMPBrowser.fey": "Feérico",
"CMPBrowser.fiend": "Ínfero",
"CMPBrowser.giant": "Giante",
"CMPBrowser.humanoid": "Humanoide",
"CMPBrowser.monstrosity": "Monstruosidade",
"CMPBrowser.ooze": "Gosma",
"CMPBrowser.plant": "Planta",
"CMPBrowser.undead": "Morto-Vivo",
"CMPBrowser.abilities": "Atributos",
"CMPBrowser.dmgInteraction": "Interação do Dano", "CMPBrowser.dmgInteraction": "Interação do Dano",
"CMPBrowser.dmgDealt": "Dano Causado", "CMPBrowser.dmgDealt": "Dano Causado",
"CMPBrowser.size": "Tamanho", "CMPBrowser.Tab.SpellBrowser": "Navegador de Magias",
"CMPBrowser.spellBrowser":"Navegador de Magias", "CMPBrowser.Tab.FeatBrowser": "Navegador de Características",
"CMPBrowser.npcBrowser":"Navegador de NPC", "CMPBrowser.Tab.ItemBrowser": "Navegador de Itens",
"CMPBrowser.settings":"Configurações" "CMPBrowser.Tab.NPCBrowser": "Navegador de NPC",
"CMPBrowser.Tab.Settings": "Configurações",
"CMPBrowser.SETTING.Maxload.NAME": "Capacidade máxima",
"CMPBrowser.SETTING.Maxload.HINT": "Número máximo de magias, características, itens ou NPCs a serem exibidos; para ver mais use os filtros. Essa configuração é usada para gerenciar memória e capacidade do servidor.",
"CMPBrowser.LOADING.Message": "Carregando...{numLoaded} {itemType}s",
"CMPBrowser.LOADED.Message": "{numLoaded} {itemType}s carregados(as)",
"CMPBrowser.LOADED.MaxLoaded": "(máximo exibido; para ver mais, use os filtros)",
"CMPBrowser.Filters.ResetFilters": "Redefinir Filtros"
} }

View File

@ -12,6 +12,7 @@
</select></dd> </select></dd>
</dl> </dl>
<button id="reset-feat-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button> <button id="reset-feat-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button>
<button id="copy-search-feat">Export to JS</button>
</div> </div>
{{> "modules/compendium-browser/template/filter-container.html" filters=featFilters}} {{> "modules/compendium-browser/template/filter-container.html" filters=featFilters}}
</div> </div>

View File

@ -3,7 +3,7 @@
<h3>{{cat.label}}</h3> <h3>{{cat.label}}</h3>
<div class="filters"> <div class="filters">
{{#each cat.filters as |filter key|}} {{#each cat.filters as |filter key|}}
<div class="filter" data-path="{{filter.path}}" data-type="{{filter.type}}" data-valIsArray="{{filter.valIsArray}}"> <div class="filter" id="{{cat.labelId}}-{{filter.labelId}}" data-path="{{filter.path}}" data-type="{{filter.type}}" data-valIsArray="{{filter.valIsArray}}">
{{#if filter.istext}} {{#if filter.istext}}
<dt>{{filter.label}}</dt> <dt>{{filter.label}}</dt>
<dd> <dd>

View File

@ -12,6 +12,7 @@
</select></dd> </select></dd>
</dl> </dl>
<button id="reset-item-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button> <button id="reset-item-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button>
<button id="copy-search-item">Export to JS</button>
</div> </div>
{{> "modules/compendium-browser/template/filter-container.html" filters=itemFilters}} {{> "modules/compendium-browser/template/filter-container.html" filters=itemFilters}}
</div> </div>

View File

@ -8,11 +8,12 @@
<dt>{{localize "CMPBrowser.sortBy"}}:</dt> <dt>{{localize "CMPBrowser.sortBy"}}:</dt>
<dd><select name="sortorder"> <dd><select name="sortorder">
<option value="name" selected>{{localize "Name"}}</option> <option value="name" selected>{{localize "Name"}}</option>
<option value="cr">{{localize "CMPBrowser.cr"}}</option> <option value="cr">{{localize "DND5E.ChallengeRating"}}</option>
<option value="size">{{localize "DND5E.Size"}}</option> <option value="size">{{localize "DND5E.Size"}}</option>
</select></dd> </select></dd>
</dl> </dl>
<button id="reset-npc-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button> <button id="reset-npc-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button>
<button id="copy-search-npc">Export to JS</button>
</div> </div>
{{> "modules/compendium-browser/template/filter-container.html" filters=npcFilters}} {{> "modules/compendium-browser/template/filter-container.html" filters=npcFilters}}
</div> </div>

View File

@ -7,11 +7,11 @@
</label> </label>
<label> <label>
<input data-setting="allow-feat-browser" type="checkbox" {{#if settings.allowFeatBrowser}}checked{{/if}}> <input data-setting="allow-feat-browser" type="checkbox" {{#if settings.allowFeatBrowser}}checked{{/if}}>
<h4>Allow Players Access to the feat browser</h4> <h4>{{localize "CMPBrowser.allowFeatAcc"}}</h4>
</label> </label>
<label> <label>
<input data-setting="allow-item-browser" type="checkbox" {{#if settings.allowItemBrowser}}checked{{/if}}> <input data-setting="allow-item-browser" type="checkbox" {{#if settings.allowItemBrowser}}checked{{/if}}>
<h4>Allow Players Access to the item browser</h4> <h4>{{localize "CMPBrowser.allowItemAcc"}}</h4>
</label> </label>
<label> <label>
<input data-setting="allow-npc-browser" type="checkbox" {{#if settings.allowNpcBrowser}}checked{{/if}}> <input data-setting="allow-npc-browser" type="checkbox" {{#if settings.allowNpcBrowser}}checked{{/if}}>

View File

@ -10,12 +10,12 @@
<div class="spell-tags"> <div class="spell-tags">
<span title="Spell level">{{#if spell.data.level}}{{spell.data.level}}{{else}}C{{/if}}</span> <span title="Spell level">{{#if spell.data.level}}{{spell.data.level}}{{else}}C{{/if}}</span>
<div class="spacer-large"></div> <div class="spacer-large"></div>
<span {{#unless spell.data.components.ritual}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.ritual"}}"{{else}} title="{{localize "CMPBrowser.ritual"}}"{{/unless}}>R</span> <span {{#unless spell.data.components.ritual}}style="color:#bbb;" title="{{localize "No"}} {{localize "DND5E.Ritual"}}"{{else}} title="{{localize "DND5E.Ritual"}}"{{/unless}}>R</span>
<span {{#unless spell.data.components.concentration}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.concentration"}}"{{else}} title="{{localize "CMPBrowser.concentration"}}"{{/unless}}>C</span> <span {{#unless spell.data.components.concentration}}style="color:#bbb;" title="{{localize "No"}} {{localize "DND5E.Concentration"}}"{{else}} title="{{localize "DND5E.Concentration"}}"{{/unless}}>C</span>
<div class="spacer"></div> <div class="spacer"></div>
<span {{#unless spell.data.components.vocal}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.verbal"}}"{{else}} title="{{localize "CMPBrowser.verbal"}}"{{/unless}}>V</span> <span {{#unless spell.data.components.vocal}}style="color:#bbb;" title="{{localize "No"}} {{localize "DND5E.ComponentVerbal"}}"{{else}} title="{{localize "DND5E.ComponentVerbal"}}"{{/unless}}>V</span>
<span {{#unless spell.data.components.somatic}}style="color:#bbb;" title="{{localize "No"}} {{localize "CMPBrowser.somatic"}}"{{else}} title="{{localize "CMPBrowser.somatic"}}"{{/unless}}>S</span> <span {{#unless spell.data.components.somatic}}style="color:#bbb;" title="{{localize "No"}} {{localize "DND5E.ComponentSomatic"}}"{{else}} title="{{localize "DND5E.ComponentSomatic"}}"{{/unless}}>S</span>
<span {{#unless spell.data.components.material}}style="color:#bbb;" title="no{{localize "No"}} {{localize "CMPBrowser.material"}}"{{else}} title="{{localize "CMPBrowser.material"}}"{{/unless}}>M</span> <span {{#unless spell.data.components.material}}style="color:#bbb;" title="no{{localize "No"}} {{localize "DND5E.ComponentMaterial"}}"{{else}} title="{{localize "DND5E.ComponentMaterial"}}"{{/unless}}>M</span>
</div> </div>
<div class="filter-tags"> <div class="filter-tags">
<input type="hidden" name="level" value="{{spell.data.level}}"> <input type="hidden" name="level" value="{{spell.data.level}}">

View File

@ -8,10 +8,11 @@
<dt>{{localize "CMPBrowser.sortBy"}}:</dt> <dt>{{localize "CMPBrowser.sortBy"}}:</dt>
<dd><select class="null" name="sortorder"> <dd><select class="null" name="sortorder">
<option value="true" selected>{{localize "Name"}}</option> <option value="true" selected>{{localize "Name"}}</option>
<option value="false">{{localize "CMPBrowser.lvl"}}</option> <option value="false">{{localize "DND5E.Level"}}</option>
</select></dd> </select></dd>
</dl> </dl>
<button id="reset-spell-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button> <button id="reset-spell-filter">{{localize "CMPBrowser.Filters.ResetFilters"}}</button>
<button id="copy-search-spell">Export to JS</button>
</div> </div>
{{> "modules/compendium-browser/template/filter-container.html" filters=spellFilters}} {{> "modules/compendium-browser/template/filter-container.html" filters=spellFilters}}
</div> </div>