diff --git a/compendium-browser.css b/compendium-browser.css index 783741b..317e7bb 100644 --- a/compendium-browser.css +++ b/compendium-browser.css @@ -44,6 +44,7 @@ position: sticky; display: block; min-width: 250px; + max-width: 400px; width: 300px; height: 100%; padding-right: 5px; @@ -79,12 +80,18 @@ .compendium-browser .control-area .filtercontainer .multiselect { border: 1px solid #bbb; border-radius: 3px; + vertical-align: middle; + line-height: 32px; + margin: 2px 0; } .compendium-browser .control-area .filtercontainer .multiselect label { padding: 5px; } +.compendium-browser .control-area .filtercontainer .multiselect input { + vertical-align: middle; +} .compendium-browser .control-area .filtercontainer .small-input { - width: 144px; + width: calc(100% - 44px); height: 27px; background: rgba(255, 255, 255, 0.8); border: 1px solid #444; @@ -111,6 +118,10 @@ .compendium-browser .browser ul .filter-tags { display: none; } +.compendium-browser .browser ul li span { + white-space: nowrap; + overflow: hidden; +} .compendium-browser .browser .spacer { display: inline-block; min-width: 5px; diff --git a/compendium-browser.js b/compendium-browser.js index 962893d..3e413be 100644 --- a/compendium-browser.js +++ b/compendium-browser.js @@ -1,6 +1,6 @@ /** * @author Felix Müller aka syl3r86 - * @version 0.1.2 + * @version 0.1.3 */ class SpellBrowser extends Application { @@ -43,7 +43,7 @@ class SpellBrowser extends Application { const options = super.defaultOptions; options.classes = options.classes.concat('compendium-browser'); options.template = "modules/compendium-browser/template/template.html"; - options.width = 700; + options.width = 800; options.height = 700; options.resizable = true; options.minimizable = true; @@ -90,6 +90,15 @@ class SpellBrowser extends Application { async loadSpells() { console.log('Spell Browser | Started loading spells'); + + if (this.classList === undefined) { + this.classList = await fetch('modules/compendium-browser/spell-classes.json').then(result => { + return result.json(); + }).then(obj => { + return this.classList = obj; + }); + } + this.spellsLoaded = false; this.spellsLoading = true; @@ -108,8 +117,8 @@ class SpellBrowser extends Application { // determining classes that can use the spell let cleanSpellName = spell.name.toLowerCase().replace(/[^a-zA-Z0-9\s:]/g, '').replace("'", '').replace(/ /g, ''); - if (spellClassList[cleanSpellName] !== undefined) { - let classes = spellClassList[cleanSpellName]; + if (this.classList[cleanSpellName] !== undefined) { + let classes = this.classList[cleanSpellName]; spell.data.classes = classes.split(','); } else { unfoundSpells += cleanSpellName + ','; @@ -724,8 +733,6 @@ Hooks.on('init', () => { } }); -//game.i18n.localize("FRIEND"); - Hooks.on('ready', () => { game.compendiumBrowser.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]); game.compendiumBrowser.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.school"), 'data.school', 'select', CONFIG.DND5E.spellSchools); @@ -737,7 +744,7 @@ Hooks.on('ready', () => { minute: game.i18n.localize("DND5E.TimeMinute"), hour: game.i18n.localize("DND5E.TimeHour"), day: game.i18n.localize("DND5E.TimeDay") - }); + }); game.compendiumBrowser.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.spellType"), 'data.actionType', 'select', CONFIG.DND5E.itemActionTypes); game.compendiumBrowser.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.damageType"), 'damageTypes', 'select', CONFIG.DND5E.damageTypes); game.compendiumBrowser.addSpellFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.class"), 'data.classes', 'select', @@ -758,8 +765,8 @@ Hooks.on('ready', () => { game.compendiumBrowser.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.somatic"), 'data.components.somatic', 'bool'); game.compendiumBrowser.addSpellFilter(game.i18n.localize("CMPBrowser.components"), game.i18n.localize("CMPBrowser.material"), 'data.components.material', 'bool'); - game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasSpells"), 'data.traits.size', 'select', CONFIG.DND5E.actorSizes); - game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.ritual"), 'hasSpells', 'bool'); + game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.size"), 'data.traits.size', 'select', CONFIG.DND5E.actorSizes); + game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasSpells"), 'hasSpells', 'bool'); game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasLegAct"), 'data.resources.legact.max', 'bool'); game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.hasLegRes"), 'data.resources.legres.max', 'bool'); game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.general"), game.i18n.localize("CMPBrowser.cr"), 'data.details.cr', 'numberCompare'); @@ -792,480 +799,4 @@ Hooks.on('ready', () => { game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.DamVuln"), 'data.traits.dv.value', 'multiSelect', CONFIG.DND5E.damageTypes, true); game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("DND5E.ConImm"), 'data.traits.ci.value', 'multiSelect', CONFIG.DND5E.conditionTypes, true); game.compendiumBrowser.addNpcFilter(game.i18n.localize("CMPBrowser.dmgInteraction"), game.i18n.localize("CMPBrowser.dmgDealt"), 'damageDealt', 'multiSelect', CONFIG.DND5E.damageTypes, true); -}) - - -spellClassList = { - "abidalzimshorridwilting": "sorcerer,wizard", - "absorbelements": "druid,ranger,sorcerer,wizard", - "aganazzarsscorcher": "sorcerer,wizard", - "beastbond": "druid,ranger", - "bonesoftheearth": "druid", - "catapult": "sorcerer,wizard", - "catnap": "bard,sorcerer,wizard", - "causefear": "warlock,wizard", - "ceremony": "cleric,paladin", - "chaosbolt": "sorcerer", - "charmmonster": "bard,druid,sorcerer,warlock,wizard", - "controlflames": "druid,sorcerer,wizard", - "controlwinds": "druid,sorcerer,wizard", - "createbonfire": "druid,sorcerer,warlock,wizard", - "createhomunculus": "wizard", - "crownofstars": "sorcerer,warlock,wizard", - "dansemacabre": "warlock,wizard", - "dawn": "cleric,wizard", - "dragonsbreath": "sorcerer,wizard", - "druidgrove": "druid", - "dustdevil": "druid,sorcerer,wizard", - "earthtremor": "bard,druid,sorcerer,wizard", - "earthbind": "druid,sorcerer,warlock,wizard", - "elementalbane": "druid,warlock,wizard", - "enemiesabound": "bard,sorcerer,warlock,wizard", - "enervation": "sorcerer,warlock,wizard", - "eruptingearth": "druid,sorcerer,wizard", - "farstep": "sorcerer,warlock,wizard", - "findgreatersteed": "paladin", - "flamearrows": "druid,ranger,sorcerer,wizard", - "frostbite": "druid,sorcerer,warlock,wizard", - "guardianofnature": "druid,ranger", - "gust": "druid,sorcerer,wizard", - "healingspirit": "druid,ranger", - "holyweapon": "cleric,paladin", - "iceknife": "druid,sorcerer,wizard", - "illusorydragon": "wizard", - "immolation": "sorcerer,wizard", - "infernalcalling": "warlock,wizard", - "infestation": "druid,sorcerer,warlock,wizard", - "investitureofflame": "druid,sorcerer,warlock,wizard", - "investitureofice": "druid,sorcerer,warlock,wizard", - "investitureofstone": "druid,sorcerer,warlock,wizard", - "investitureofwind": "druid,sorcerer,warlock,wizard", - "invulnerability": "wizard", - "lifetransference": "cleric,wizard", - "maddeningdarkness": "warlock,wizard", - "maelstrom": "druid", - "magicstone": "druid,warlock", - "masspolymorph": "bard,sorcerer,wizard", - "maximiliansearthengrasp": "sorcerer,wizard", - "melfsminutemeteors": "sorcerer,wizard", - "mentalprison": "sorcerer,warlock,wizard", - "mightyfortress": "wizard", - "mindspike": "sorcerer,warlock,wizard", - "moldearth": "druid,sorcerer,wizard", - "negativeenergyflood": "warlock,wizard", - "powerwordpain": "sorcerer,warlock,wizard", - "primalsavagery": "druid", - "primordialward": "druid", - "psychicscream": "bard,sorcerer,warlock,wizard", - "pyrotechnics": "bard,sorcerer,wizard", - "scatter": "sorcerer,warlock,wizard", - "shadowblade": "sorcerer,warlock,wizard", - "shadowofmoil": "warlock", - "shapewater": "druid,sorcerer,wizard", - "sickeningradiance": "sorcerer,warlock,wizard", - "skillempowerment": "bard,sorcerer,wizard", - "skywrite": "bard,druid,wizard", - "snare": "druid,ranger,wizard", - "snillocssnowballswarm": "sorcerer,wizard", - "soulcage": "warlock,wizard", - "steelwindstrike": "ranger,wizard", - "stormsphere": "sorcerer,wizard", - "summongreaterdemon": "warlock,wizard", - "summonlesserdemons": "warlock,wizard", - "synapticstatic": "bard,sorcerer,warlock,wizard", - "templeofthegods": "cleric", - "tenserstransformation": "wizard", - "thunderstep": "sorcerer,warlock,wizard", - "thunderclap": "bard,druid,sorcerer,warlock,wizard", - "tidalwave": "druid,sorcerer,wizard", - "tinyservant": "wizard", - "tollthedead": "cleric,warlock,wizard", - "transmuterock": "druid,wizard", - "vitriolicsphere": "sorcerer,wizard", - "walloflight": "sorcerer,warlock,wizard", - "wallofsand": "wizard", - "wallofwater": "druid,sorcerer,wizard", - "wardingwind": "bard,druid,sorcerer,wizard", - "waterysphere": "druid,sorcerer,wizard", - "whirlwind": "druid,sorcerer,wizard", - "wordofradiance": "cleric", - "wrathofnature": "druid,ranger", - "zephyrstrike": "ranger", - "boomingblade": "sorcerer,warlock,wizard", - "greenflameblade": "sorcerer,warlock,wizard", - "lightninglure": "sorcerer,warlock,wizard", - "swordburst": "sorcerer,warlock,wizard", - "arcaneweapon": "artificerrevisited", - "acidsplash": "sorcerer,wizard,artificerrevisited", - "aid": "cleric,paladin,artificer,artificerrevisited", - "alarm": "ranger,wizard,artificer,artificerrevisited", - "alterself": "sorcerer,wizard,artificer,artificerrevisited", - "animalfriendship": "bard,druid,ranger", - "animalmessenger": "bard,druid,ranger", - "animalshapes": "druid", - "animatedead": "cleric,wizard", - "animateobjects": "bard,sorcerer,wizard,artificerrevisited", - "antilifeshell": "druid", - "antimagicfield": "cleric,wizard", - "antipathysympathy": "druid,wizard", - "arcaneeye": "wizard,artificer,artificerrevisited", - "arcanegate": "sorcerer,warlock,wizard", - "arcanelock": "wizard,artificer,artificerrevisited", - "armorofagathys": "warlock", - "armsofhadar": "warlock", - "astralprojection": "cleric,warlock,wizard", - "augury": "cleric", - "auraoflife": "paladin", - "auraofpurity": "paladin", - "auraofvitality": "paladin", - "awaken": "bard,druid", - "bane": "bard,cleric", - "banishingsmite": "paladin", - "banishment": "cleric,paladin,sorcerer,warlock,wizard", - "barkskin": "druid,ranger", - "beaconofhope": "cleric", - "beastsense": "druid,ranger", - "bestowcurse": "bard,cleric,wizard", - "bigbyshand": "wizard,artificerrevisited", - "arcanehand": "wizard,artificerrevisited", - "bladebarrier": "cleric", - "bladeward": "bard,sorcerer,warlock,wizard", - "bless": "cleric,paladin", - "blight": "druid,sorcerer,warlock,wizard", - "blindingsmite": "paladin", - "blindnessdeafness": "bard,cleric,sorcerer,wizard", - "blink": "sorcerer,wizard,artificer,artificerrevisited", - "blur": "sorcerer,wizard,artificer,artificerrevisited", - "brandingsmite": "paladin", - "burninghands": "sorcerer,wizard", - "calllightning": "druid", - "calmemotions": "bard,cleric", - "chainlightning": "sorcerer,wizard", - "charmperson": "bard,druid,sorcerer,warlock,wizard", - "chilltouch": "sorcerer,warlock,wizard", - "chromaticorb": "sorcerer,wizard", - "circleofdeath": "sorcerer,warlock,wizard", - "circleofpower": "paladin", - "clairvoyance": "bard,cleric,sorcerer,wizard", - "clone": "wizard", - "cloudofdaggers": "bard,sorcerer,warlock,wizard", - "cloudkill": "sorcerer,wizard", - "colorspray": "sorcerer,wizard", - "command": "cleric,paladin", - "commune": "cleric", - "communewithnature": "druid,ranger", - "compelledduel": "paladin", - "comprehendlanguages": "bard,sorcerer,warlock,wizard", - "compulsion": "bard", - "coneofcold": "sorcerer,wizard", - "confusion": "bard,druid,sorcerer,wizard", - "conjureanimals": "druid,ranger", - "conjurebarrage": "ranger", - "conjurecelestial": "cleric", - "conjureelemental": "druid,wizard", - "conjurefey": "druid,warlock", - "conjureminorelementals": "druid,wizard", - "conjurevolley": "ranger", - "conjurewoodlandbeings": "druid,ranger", - "contactotherplane": "warlock,wizard", - "contagion": "cleric,druid", - "contingency": "wizard", - "continualflame": "cleric,wizard,artificer,artificerrevisited", - "controlwater": "cleric,druid,wizard", - "controlweather": "cleric,druid,wizard", - "cordonofarrows": "ranger", - "counterspell": "sorcerer,warlock,wizard", - "createfoodandwater": "cleric,paladin", - "createundead": "cleric,warlock,wizard", - "createordestroywater": "cleric,druid", - "creation": "sorcerer,wizard,artificerrevisited", - "crownofmadness": "bard,sorcerer,warlock,wizard", - "crusadersmantle": "paladin", - "curewounds": "bard,cleric,druid,paladin,ranger,artificer,artificerrevisited", - "dancinglights": "bard,sorcerer,wizard,artificerrevisited", - "darkness": "sorcerer,warlock,wizard", - "darkvision": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", - "daylight": "cleric,druid,paladin,ranger,sorcerer", - "deathward": "cleric,paladin,artificer", - "delayedblastfireball": "sorcerer,wizard", - "demiplane": "warlock,wizard", - "destructivewave": "paladin", - "detectevilandgood": "cleric,paladin", - "detectmagic": "bard,cleric,druid,paladin,ranger,sorcerer,wizard,artificerrevisited", - "detectpoisonanddisease": "cleric,druid,paladin,ranger", - "detectthoughts": "bard,sorcerer,wizard", - "dimensiondoor": "bard,sorcerer,warlock,wizard", - "disguiseself": "bard,sorcerer,wizard,artificer,artificerrevisited", - "disintegrate": "sorcerer,wizard", - "dispelevilandgood": "cleric,paladin", - "dispelmagic": "bard,cleric,druid,paladin,sorcerer,warlock,wizard,artificerrevisited", - "dissonantwhispers": "bard", - "divination": "cleric", - "divinefavor": "paladin", - "divineword": "cleric", - "dominatebeast": "druid,sorcerer", - "dominatemonster": "bard,sorcerer,warlock,wizard", - "dominateperson": "bard,sorcerer,wizard", - "drawmijsinstantsummons": "wizard", - "instantsummons": "wizard", - "dream": "bard,warlock,wizard", - "druidcraft": "druid", - "earthquake": "cleric,druid,sorcerer", - "eldritchblast": "warlock", - "elementalweapon": "paladin,artificerrevisited", - "enhanceability": "bard,cleric,druid,sorcerer,artificer,artificerrevisited", - "enlargereduce": "sorcerer,wizard,artificer,artificerrevisited", - "ensnaringstrike": "ranger", - "entangle": "druid", - "enthrall": "bard,warlock", - "etherealness": "bard,cleric,sorcerer,warlock,wizard", - "evardsblacktentacles": "wizard", - "blacktentacles": "wizard", - "expeditiousretreat": "sorcerer,warlock,wizard,artificer,artificerrevisited", - "eyebite": "bard,sorcerer,warlock,wizard", - "fabricate": "wizard,artificer,artificerrevisited", - "faeriefire": "bard,druid", - "falselife": "sorcerer,wizard,artificer,artificerrevisited", - "fear": "bard,sorcerer,warlock,wizard", - "featherfall": "bard,sorcerer,wizard", - "feeblemind": "bard,druid,warlock,wizard", - "feigndeath": "bard,cleric,druid,wizard", - "findfamiliar": "wizard", - "findsteed": "paladin", - "findtraps": "cleric,druid,ranger", - "findthepath": "bard,cleric,druid", - "fingerofdeath": "sorcerer,warlock,wizard", - "firebolt": "sorcerer,wizard,artificerrevisited", - "fireshield": "wizard", - "firestorm": "cleric,druid,sorcerer", - "fireball": "sorcerer,wizard", - "flameblade": "druid", - "flamestrike": "cleric", - "flamingsphere": "druid,wizard", - "fleshtostone": "warlock,wizard", - "fly": "sorcerer,warlock,wizard,artificer,artificerrevisited", - "fogcloud": "druid,ranger,sorcerer,wizard", - "forbiddance": "cleric", - "forcecage": "bard,warlock,wizard", - "foresight": "bard,druid,warlock,wizard", - "freedomofmovement": "bard,cleric,druid,ranger,artificer,artificerrevisited", - "friends": "bard,sorcerer,warlock,wizard", - "gaseousform": "sorcerer,warlock,wizard,artificer,artificerrevisited", - "gate": "cleric,sorcerer,wizard", - "geas": "bard,cleric,druid,paladin,wizard", - "gentlerepose": "cleric,wizard", - "giantinsect": "druid", - "glibness": "bard,warlock", - "globeofinvulnerability": "sorcerer,wizard", - "glyphofwarding": "bard,cleric,wizard,artificer,artificerrevisited", - "goodberry": "druid,ranger", - "graspingvine": "druid,ranger", - "grease": "wizard,artificerrevisited", - "greaterinvisibility": "bard,sorcerer,wizard", - "greaterrestoration": "bard,cleric,druid,artificerrevisited", - "guardianoffaith": "cleric", - "guardsandwards": "bard,wizard", - "guidance": "cleric,druid,artificerrevisited", - "guidingbolt": "cleric", - "gustofwind": "druid,sorcerer,wizard", - "hailofthorns": "ranger", - "hallow": "cleric", - "hallucinatoryterrain": "bard,druid,warlock,wizard", - "harm": "cleric", - "haste": "sorcerer,wizard,artificer,artificerrevisited", - "heal": "cleric,druid", - "healingword": "bard,cleric,druid", - "heatmetal": "bard,druid,artificerrevisited", - "hellishrebuke": "warlock", - "heroesfeast": "cleric,druid", - "heroism": "bard,paladin", - "hex": "warlock", - "holdmonster": "bard,sorcerer,warlock,wizard", - "holdperson": "bard,cleric,druid,sorcerer,warlock,wizard", - "holyaura": "cleric", - "hungerofhadar": "warlock", - "huntersmark": "ranger", - "hypnoticpattern": "bard,sorcerer,warlock,wizard", - "icestorm": "druid,sorcerer,wizard", - "identify": "bard,wizard,artificerrevisited", - "illusoryscript": "bard,warlock,wizard", - "imprisonment": "warlock,wizard", - "incendiarycloud": "sorcerer,wizard", - "inflictwounds": "cleric", - "insectplague": "cleric,druid,sorcerer", - "invisibility": "bard,sorcerer,warlock,wizard,artificer,artificerrevisited", - "jump": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", - "knock": "bard,sorcerer,wizard", - "legendlore": "bard,cleric,wizard", - "leomundssecretchest": "wizard,artificer,artificerrevisited", - "leomundstinyhut": "bard,wizard", - "lesserrestoration": "bard,cleric,druid,paladin,ranger,artificer,artificerrevisited", - "levitate": "sorcerer,wizard,artificerrevisited", - "light": "bard,cleric,sorcerer,wizard,artificerrevisited", - "lightningarrow": "ranger", - "lightningbolt": "sorcerer,wizard", - "locateanimalsorplants": "bard,druid,ranger", - "locatecreature": "bard,cleric,druid,paladin,ranger,wizard", - "locateobject": "bard,cleric,druid,paladin,ranger,wizard", - "longstrider": "bard,druid,ranger,wizard,artificer,artificerrevisited", - "magearmor": "sorcerer,wizard", - "magehand": "bard,sorcerer,warlock,wizard,artificerrevisited", - "magiccircle": "cleric,paladin,warlock,wizard", - "magicjar": "wizard", - "magicmissile": "sorcerer,wizard", - "magicmouth": "bard,wizard,artificerrevisited", - "magicweapon": "paladin,wizard,artificer,artificerrevisited", - "majorimage": "bard,sorcerer,warlock,wizard", - "masscurewounds": "bard,cleric,druid", - "massheal": "cleric", - "masshealingword": "cleric", - "masssuggestion": "bard,sorcerer,warlock,wizard", - "maze": "wizard", - "meldintostone": "cleric,druid", - "melfsacidarrow": "wizard", - "acidarrow": "wizard", - "mending": "bard,cleric,druid,sorcerer,wizard,artificerrevisited", - "message": "bard,sorcerer,wizard,artificerrevisited", - "meteorswarm": "sorcerer,wizard", - "mindblank": "bard,wizard", - "minorillusion": "bard,sorcerer,warlock,wizard", - "miragearcane": "bard,druid,wizard", - "mirrorimage": "sorcerer,warlock,wizard", - "mislead": "bard,wizard", - "mistystep": "sorcerer,warlock,wizard", - "modifymemory": "bard,wizard", - "moonbeam": "druid", - "mordenkainensfaithfulhound": "wizard,artificer,artificerrevisited", - "faithfulhound": "wizard,artificer,artificerrevisited", - "mordenkainensmagnificentmansion": "bard,wizard", - "magnificentmansion": "bard,wizard", - "mordenkainensprivatesanctum": "wizard,artificer,artificerrevisited", - "mordenkainenssword": "bard,wizard", - "arcanesword": "bard,wizard", - "moveearth": "druid,sorcerer,wizard", - "nondetection": "bard,ranger,wizard", - "nystulsmagicaura": "wizard", - "arcanistsmagicaura": "wizard", - "otilukesfreezingsphere": "wizard", - "otilukesresilientsphere": "wizard,artificer,artificerrevisited", - "ottosirresistibledance": "bard,wizard", - "passwithouttrace": "druid,ranger", - "passwall": "wizard", - "phantasmalforce": "bard,sorcerer,wizard", - "phantasmalkiller": "wizard", - "phantomsteed": "wizard", - "planarally": "cleric", - "planarbinding": "bard,cleric,druid,wizard", - "planeshift": "cleric,druid,sorcerer,warlock,wizard", - "plantgrowth": "bard,druid,ranger", - "poisonspray": "druid,sorcerer,warlock,wizard,artificerrevisited", - "polymorph": "bard,druid,sorcerer,wizard", - "powerwordheal": "bard", - "powerwordkill": "bard,sorcerer,warlock,wizard", - "powerwordstun": "bard,sorcerer,warlock,wizard", - "prayerofhealing": "cleric", - "prestidigitation": "bard,sorcerer,warlock,wizard,artificerrevisited", - "prismaticspray": "sorcerer,wizard", - "prismaticwall": "wizard", - "produceflame": "druid", - "programmedillusion": "bard,wizard", - "projectimage": "bard,wizard", - "protectionfromenergy": "cleric,druid,ranger,sorcerer,wizard,artificer,artificerrevisited", - "protectionfromevilandgood": "cleric,paladin,warlock,wizard", - "protectionfrompoison": "cleric,druid,paladin,ranger,artificer,artificerrevisited", - "purifyfoodanddrink": "cleric,druid,paladin", - "raisedead": "bard,cleric,paladin", - "rarystelepathicbond": "wizard", - "rayofenfeeblement": "warlock,wizard", - "rayoffrost": "sorcerer,wizard,artificerrevisited", - "rayofsickness": "sorcerer,wizard", - "regenerate": "bard,cleric,druid", - "reincarnate": "druid", - "removecurse": "cleric,paladin,warlock,wizard", - "resistance": "cleric,druid,artificerrevisited", - "resurrection": "bard,cleric", - "reversegravity": "druid,sorcerer,wizard", - "revivify": "cleric,paladin,artificer,artificerrevisited", - "ropetrick": "wizard,artificer,artificerrevisited", - "sacredflame": "cleric", - "sanctuary": "cleric,artificer,artificerrevisited", - "scorchingray": "sorcerer,wizard", - "scrying": "bard,cleric,druid,warlock,wizard", - "searingsmite": "paladin", - "seeinvisibility": "bard,sorcerer,wizard,artificerrevisited", - "seeming": "bard,sorcerer,wizard", - "sending": "bard,cleric,wizard", - "sequester": "wizard", - "shapechange": "druid,wizard", - "shatter": "bard,sorcerer,warlock,wizard", - "shield": "sorcerer,wizard", - "shieldoffaith": "cleric,paladin,artificer,artificerrevisited", - "shillelagh": "druid", - "shockinggrasp": "sorcerer,wizard,artificerrevisited", - "silence": "bard,cleric,ranger", - "silentimage": "bard,sorcerer,wizard", - "simulacrum": "wizard", - "sleep": "bard,sorcerer,wizard", - "sleetstorm": "druid,sorcerer,wizard", - "slow": "sorcerer,wizard", - "sparethedying": "cleric,artificerrevisited", - "speakwithanimals": "bard,druid,ranger", - "speakwithdead": "bard,cleric", - "speakwithplants": "bard,druid,ranger", - "spiderclimb": "sorcerer,warlock,wizard,artificer,artificerrevisited", - "spikegrowth": "druid,ranger", - "spiritguardians": "cleric", - "spiritualweapon": "cleric", - "staggeringsmite": "paladin", - "stinkingcloud": "bard,sorcerer,wizard", - "stoneshape": "cleric,druid,wizard,artificer,artificerrevisited", - "stoneskin": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", - "stormofvengeance": "druid", - "suggestion": "bard,sorcerer,warlock,wizard", - "sunbeam": "druid,sorcerer,wizard", - "sunburst": "druid,sorcerer,wizard", - "swiftquiver": "ranger", - "symbol": "bard,cleric,wizard", - "tashashideouslaughter": "bard,wizard", - "hideouslaughter": "bard,wizard", - "telekinesis": "sorcerer,wizard", - "telepathy": "wizard", - "teleport": "bard,sorcerer,wizard", - "teleportationcircle": "bard,sorcerer,wizard", - "tensersfloatingdisk": "wizard", - "tensersfloatingdisc": "wizard", - "floatingdisc": "wizard", - "thaumaturgy": "cleric", - "thornwhip": "druid,artificerrevisited", - "thunderoussmite": "paladin", - "thunderwave": "bard,druid,sorcerer,wizard", - "timestop": "sorcerer,wizard", - "tongues": "bard,cleric,sorcerer,warlock,wizard", - "transportviaplants": "druid", - "treestride": "druid,ranger", - "truepolymorph": "bard,warlock,wizard", - "trueresurrection": "cleric,druid", - "trueseeing": "bard,cleric,sorcerer,warlock,wizard", - "truestrike": "bard,sorcerer,warlock,wizard", - "tsunami": "druid", - "unseenservant": "bard,warlock,wizard", - "vampirictouch": "warlock,wizard", - "viciousmockery": "bard", - "walloffire": "druid,sorcerer,wizard", - "wallofforce": "wizard", - "wallofice": "wizard", - "wallofstone": "druid,sorcerer,wizard,artificerrevisited", - "wallofthorns": "druid", - "wardingbond": "cleric", - "waterbreathing": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", - "waterwalk": "cleric,druid,ranger,sorcerer,artificer,artificerrevisited", - "web": "sorcerer,wizard", - "weird": "wizard", - "windwalk": "druid", - "windwall": "druid,ranger", - "wish": "sorcerer,wizard", - "witchbolt": "sorcerer,warlock,wizard", - "wordofrecall": "cleric", - "wrathfulsmite": "paladin", - "zoneoftruth": "bard,cleric,paladin" -} \ No newline at end of file +}); \ No newline at end of file diff --git a/compendium-browser.less b/compendium-browser.less index 1d9a9b5..192ee03 100644 --- a/compendium-browser.less +++ b/compendium-browser.less @@ -49,6 +49,7 @@ position:sticky; display: block; min-width: 250px; + max-width: 400px; width: 300px; height:100%; padding-right:5px; @@ -87,13 +88,19 @@ .multiselect { border: 1px solid #bbb; border-radius: 3px; + vertical-align: middle; + line-height:32px; + margin:2px 0; label { padding:5px; } + input { + vertical-align: middle; + } } .small-input { - width: 144px; + width: calc(100% - 44px); height: 27px; background: rgba(255, 255, 255, 0.8); border: 1px solid #444; @@ -127,6 +134,13 @@ display:none; } + li { + span { + white-space: nowrap; + overflow:hidden; + } + } + } .spacer { diff --git a/lang/en.json b/lang/en.json index 29cb339..aa31ab5 100644 --- a/lang/en.json +++ b/lang/en.json @@ -12,7 +12,7 @@ "CMPBrowser.verbal":"Verbal", "CMPBrowser.somatic":"Somatic", "CMPBrowser.material":"Material", - "CMPBrowser.cantip":"Cantip", + "CMPBrowser.cantip":"Cantrip", "CMPBrowser.school":"School", "CMPBrowser.castingTime":"Casting Time", "CMPBrowser.bonusAction":"Bonus Action", @@ -51,5 +51,6 @@ "CMPBrowser.abilities": "Abilities", "CMPBrowser.dmgInteraction": "Damage Interaction", "CMPBrowser.dmgDealt": "Damage Dealt", + "CMPBrowser.size": "Size", "CMPBrowser.cmpBrowser": "Compendium Browser" } \ No newline at end of file diff --git a/lang/ja.json b/lang/ja.json new file mode 100644 index 0000000..cb09acf --- /dev/null +++ b/lang/ja.json @@ -0,0 +1,57 @@ +{ + "CMPBrowser.sortBy":"並ã³æ›¿ãˆ", + "CMPBrowser.cr":"難易度", + "CMPBrowser.generalSettings":"一般設定", + "CMPBrowser.allowSpellAcc":"プレイヤーã«å‘ªæ–‡è¾žå…¸ã®ä½¿ç”¨ã‚’許å¯ã™ã‚‹ã€‚", + "CMPBrowser.allowNpcAcc":"プレイヤーã«NPC辞典ã®ä½¿ç”¨ã‚’許å¯ã™ã‚‹ã€‚", + "CMPBrowser.compSettings":"呪文辞典設定", + "CMPBrowser.load":"追加", + "CMPBrowser.lvl":"レベル", + "CMPBrowser.ritual":"å„€å¼", + "CMPBrowser.concentration":"集中", + "CMPBrowser.verbal":"音声", + "CMPBrowser.somatic":"動作", + "CMPBrowser.material":"物質", + "CMPBrowser.cantip":"åˆç´š", + "CMPBrowser.school":"系統", + "CMPBrowser.castingTime":"発動時間", + "CMPBrowser.bonusAction":"ボーナスアクション", + "CMPBrowser.reaction":"リアクション", + "CMPBrowser.spellType":"呪文種別", + "CMPBrowser.damageType":"ダメージ種別", + "CMPBrowser.class":"クラス", + "CMPBrowser.bard":"ãƒãƒ¼ãƒ‰", + "CMPBrowser.cleric":"クレリック", + "CMPBrowser.druid":"ドルイド", + "CMPBrowser.paladin":"パラディン", + "CMPBrowser.ranger":"レンジャー", + "CMPBrowser.sorcerer":"ソーサラー", + "CMPBrowser.warlock":"ウォーロック", + "CMPBrowser.wizard":"ウィザード", + "CMPBrowser.general":"一般", + "CMPBrowser.components":"物質構æˆè¦ç´ ", + "CMPBrowser.hasSpells":"術者", + "CMPBrowser.hasLegAct":"ä¼èª¬çš„アクション所æŒ", + "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.dmgDealt": "与ãˆã‚‹ãƒ€ãƒ¡ãƒ¼ã‚¸ç¨®åˆ¥", + "CMPBrowser.size": "サイズ", + "CMPBrowser.cmpBrowser": "辞典ブラウザ" + +} \ No newline at end of file diff --git a/module.json b/module.json index 810f3de..8cbb984 100644 --- a/module.json +++ b/module.json @@ -2,7 +2,7 @@ "name": "compendium-browser", "title": "Compendium Browser", "description": "A module to easily browse and filter spells as well as npcs loaded from compendie.", - "version": "0.1.2", + "version": "0.1.3", "author": "Felix#6196", "systems": ["dnd5e"], "scripts": ["./compendium-browser.js"], @@ -14,6 +14,11 @@ "lang": "en", "name": "English", "path": "lang/en.json" + }, + { + "lang": "ja", + "name": "Japanese", + "path": "lang/ja.json" } ], "url": "https://github.com/syl3r86/compendium-browser", diff --git a/spell-classes.json b/spell-classes.json new file mode 100644 index 0000000..a0f065b --- /dev/null +++ b/spell-classes.json @@ -0,0 +1,475 @@ + +{ + "abidalzimshorridwilting": "sorcerer,wizard", + "absorbelements": "druid,ranger,sorcerer,wizard", + "aganazzarsscorcher": "sorcerer,wizard", + "beastbond": "druid,ranger", + "bonesoftheearth": "druid", + "catapult": "sorcerer,wizard", + "catnap": "bard,sorcerer,wizard", + "causefear": "warlock,wizard", + "ceremony": "cleric,paladin", + "chaosbolt": "sorcerer", + "charmmonster": "bard,druid,sorcerer,warlock,wizard", + "controlflames": "druid,sorcerer,wizard", + "controlwinds": "druid,sorcerer,wizard", + "createbonfire": "druid,sorcerer,warlock,wizard", + "createhomunculus": "wizard", + "crownofstars": "sorcerer,warlock,wizard", + "dansemacabre": "warlock,wizard", + "dawn": "cleric,wizard", + "dragonsbreath": "sorcerer,wizard", + "druidgrove": "druid", + "dustdevil": "druid,sorcerer,wizard", + "earthtremor": "bard,druid,sorcerer,wizard", + "earthbind": "druid,sorcerer,warlock,wizard", + "elementalbane": "druid,warlock,wizard", + "enemiesabound": "bard,sorcerer,warlock,wizard", + "enervation": "sorcerer,warlock,wizard", + "eruptingearth": "druid,sorcerer,wizard", + "farstep": "sorcerer,warlock,wizard", + "findgreatersteed": "paladin", + "flamearrows": "druid,ranger,sorcerer,wizard", + "frostbite": "druid,sorcerer,warlock,wizard", + "guardianofnature": "druid,ranger", + "gust": "druid,sorcerer,wizard", + "healingspirit": "druid,ranger", + "holyweapon": "cleric,paladin", + "iceknife": "druid,sorcerer,wizard", + "illusorydragon": "wizard", + "immolation": "sorcerer,wizard", + "infernalcalling": "warlock,wizard", + "infestation": "druid,sorcerer,warlock,wizard", + "investitureofflame": "druid,sorcerer,warlock,wizard", + "investitureofice": "druid,sorcerer,warlock,wizard", + "investitureofstone": "druid,sorcerer,warlock,wizard", + "investitureofwind": "druid,sorcerer,warlock,wizard", + "invulnerability": "wizard", + "lifetransference": "cleric,wizard", + "maddeningdarkness": "warlock,wizard", + "maelstrom": "druid", + "magicstone": "druid,warlock", + "masspolymorph": "bard,sorcerer,wizard", + "maximiliansearthengrasp": "sorcerer,wizard", + "melfsminutemeteors": "sorcerer,wizard", + "mentalprison": "sorcerer,warlock,wizard", + "mightyfortress": "wizard", + "mindspike": "sorcerer,warlock,wizard", + "moldearth": "druid,sorcerer,wizard", + "negativeenergyflood": "warlock,wizard", + "powerwordpain": "sorcerer,warlock,wizard", + "primalsavagery": "druid", + "primordialward": "druid", + "psychicscream": "bard,sorcerer,warlock,wizard", + "pyrotechnics": "bard,sorcerer,wizard", + "scatter": "sorcerer,warlock,wizard", + "shadowblade": "sorcerer,warlock,wizard", + "shadowofmoil": "warlock", + "shapewater": "druid,sorcerer,wizard", + "sickeningradiance": "sorcerer,warlock,wizard", + "skillempowerment": "bard,sorcerer,wizard", + "skywrite": "bard,druid,wizard", + "snare": "druid,ranger,wizard", + "snillocssnowballswarm": "sorcerer,wizard", + "soulcage": "warlock,wizard", + "steelwindstrike": "ranger,wizard", + "stormsphere": "sorcerer,wizard", + "summongreaterdemon": "warlock,wizard", + "summonlesserdemons": "warlock,wizard", + "synapticstatic": "bard,sorcerer,warlock,wizard", + "templeofthegods": "cleric", + "tenserstransformation": "wizard", + "thunderstep": "sorcerer,warlock,wizard", + "thunderclap": "bard,druid,sorcerer,warlock,wizard", + "tidalwave": "druid,sorcerer,wizard", + "tinyservant": "wizard", + "tollthedead": "cleric,warlock,wizard", + "transmuterock": "druid,wizard", + "vitriolicsphere": "sorcerer,wizard", + "walloflight": "sorcerer,warlock,wizard", + "wallofsand": "wizard", + "wallofwater": "druid,sorcerer,wizard", + "wardingwind": "bard,druid,sorcerer,wizard", + "waterysphere": "druid,sorcerer,wizard", + "whirlwind": "druid,sorcerer,wizard", + "wordofradiance": "cleric", + "wrathofnature": "druid,ranger", + "zephyrstrike": "ranger", + "boomingblade": "sorcerer,warlock,wizard", + "greenflameblade": "sorcerer,warlock,wizard", + "lightninglure": "sorcerer,warlock,wizard", + "swordburst": "sorcerer,warlock,wizard", + "arcaneweapon": "artificerrevisited", + "acidsplash": "sorcerer,wizard,artificerrevisited", + "aid": "cleric,paladin,artificer,artificerrevisited", + "alarm": "ranger,wizard,artificer,artificerrevisited", + "alterself": "sorcerer,wizard,artificer,artificerrevisited", + "animalfriendship": "bard,druid,ranger", + "animalmessenger": "bard,druid,ranger", + "animalshapes": "druid", + "animatedead": "cleric,wizard", + "animateobjects": "bard,sorcerer,wizard,artificerrevisited", + "antilifeshell": "druid", + "antimagicfield": "cleric,wizard", + "antipathysympathy": "druid,wizard", + "arcaneeye": "wizard,artificer,artificerrevisited", + "arcanegate": "sorcerer,warlock,wizard", + "arcanelock": "wizard,artificer,artificerrevisited", + "armorofagathys": "warlock", + "armsofhadar": "warlock", + "astralprojection": "cleric,warlock,wizard", + "augury": "cleric", + "auraoflife": "paladin", + "auraofpurity": "paladin", + "auraofvitality": "paladin", + "awaken": "bard,druid", + "bane": "bard,cleric", + "banishingsmite": "paladin", + "banishment": "cleric,paladin,sorcerer,warlock,wizard", + "barkskin": "druid,ranger", + "beaconofhope": "cleric", + "beastsense": "druid,ranger", + "bestowcurse": "bard,cleric,wizard", + "bigbyshand": "wizard,artificerrevisited", + "arcanehand": "wizard,artificerrevisited", + "bladebarrier": "cleric", + "bladeward": "bard,sorcerer,warlock,wizard", + "bless": "cleric,paladin", + "blight": "druid,sorcerer,warlock,wizard", + "blindingsmite": "paladin", + "blindnessdeafness": "bard,cleric,sorcerer,wizard", + "blink": "sorcerer,wizard,artificer,artificerrevisited", + "blur": "sorcerer,wizard,artificer,artificerrevisited", + "brandingsmite": "paladin", + "burninghands": "sorcerer,wizard", + "calllightning": "druid", + "calmemotions": "bard,cleric", + "chainlightning": "sorcerer,wizard", + "charmperson": "bard,druid,sorcerer,warlock,wizard", + "chilltouch": "sorcerer,warlock,wizard", + "chromaticorb": "sorcerer,wizard", + "circleofdeath": "sorcerer,warlock,wizard", + "circleofpower": "paladin", + "clairvoyance": "bard,cleric,sorcerer,wizard", + "clone": "wizard", + "cloudofdaggers": "bard,sorcerer,warlock,wizard", + "cloudkill": "sorcerer,wizard", + "colorspray": "sorcerer,wizard", + "command": "cleric,paladin", + "commune": "cleric", + "communewithnature": "druid,ranger", + "compelledduel": "paladin", + "comprehendlanguages": "bard,sorcerer,warlock,wizard", + "compulsion": "bard", + "coneofcold": "sorcerer,wizard", + "confusion": "bard,druid,sorcerer,wizard", + "conjureanimals": "druid,ranger", + "conjurebarrage": "ranger", + "conjurecelestial": "cleric", + "conjureelemental": "druid,wizard", + "conjurefey": "druid,warlock", + "conjureminorelementals": "druid,wizard", + "conjurevolley": "ranger", + "conjurewoodlandbeings": "druid,ranger", + "contactotherplane": "warlock,wizard", + "contagion": "cleric,druid", + "contingency": "wizard", + "continualflame": "cleric,wizard,artificer,artificerrevisited", + "controlwater": "cleric,druid,wizard", + "controlweather": "cleric,druid,wizard", + "cordonofarrows": "ranger", + "counterspell": "sorcerer,warlock,wizard", + "createfoodandwater": "cleric,paladin", + "createundead": "cleric,warlock,wizard", + "createordestroywater": "cleric,druid", + "creation": "sorcerer,wizard,artificerrevisited", + "crownofmadness": "bard,sorcerer,warlock,wizard", + "crusadersmantle": "paladin", + "curewounds": "bard,cleric,druid,paladin,ranger,artificer,artificerrevisited", + "dancinglights": "bard,sorcerer,wizard,artificerrevisited", + "darkness": "sorcerer,warlock,wizard", + "darkvision": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", + "daylight": "cleric,druid,paladin,ranger,sorcerer", + "deathward": "cleric,paladin,artificer", + "delayedblastfireball": "sorcerer,wizard", + "demiplane": "warlock,wizard", + "destructivewave": "paladin", + "detectevilandgood": "cleric,paladin", + "detectmagic": "bard,cleric,druid,paladin,ranger,sorcerer,wizard,artificerrevisited", + "detectpoisonanddisease": "cleric,druid,paladin,ranger", + "detectthoughts": "bard,sorcerer,wizard", + "dimensiondoor": "bard,sorcerer,warlock,wizard", + "disguiseself": "bard,sorcerer,wizard,artificer,artificerrevisited", + "disintegrate": "sorcerer,wizard", + "dispelevilandgood": "cleric,paladin", + "dispelmagic": "bard,cleric,druid,paladin,sorcerer,warlock,wizard,artificerrevisited", + "dissonantwhispers": "bard", + "divination": "cleric", + "divinefavor": "paladin", + "divineword": "cleric", + "dominatebeast": "druid,sorcerer", + "dominatemonster": "bard,sorcerer,warlock,wizard", + "dominateperson": "bard,sorcerer,wizard", + "drawmijsinstantsummons": "wizard", + "instantsummons": "wizard", + "dream": "bard,warlock,wizard", + "druidcraft": "druid", + "earthquake": "cleric,druid,sorcerer", + "eldritchblast": "warlock", + "elementalweapon": "paladin,artificerrevisited", + "enhanceability": "bard,cleric,druid,sorcerer,artificer,artificerrevisited", + "enlargereduce": "sorcerer,wizard,artificer,artificerrevisited", + "ensnaringstrike": "ranger", + "entangle": "druid", + "enthrall": "bard,warlock", + "etherealness": "bard,cleric,sorcerer,warlock,wizard", + "evardsblacktentacles": "wizard", + "blacktentacles": "wizard", + "expeditiousretreat": "sorcerer,warlock,wizard,artificer,artificerrevisited", + "eyebite": "bard,sorcerer,warlock,wizard", + "fabricate": "wizard,artificer,artificerrevisited", + "faeriefire": "bard,druid", + "falselife": "sorcerer,wizard,artificer,artificerrevisited", + "fear": "bard,sorcerer,warlock,wizard", + "featherfall": "bard,sorcerer,wizard", + "feeblemind": "bard,druid,warlock,wizard", + "feigndeath": "bard,cleric,druid,wizard", + "findfamiliar": "wizard", + "findsteed": "paladin", + "findtraps": "cleric,druid,ranger", + "findthepath": "bard,cleric,druid", + "fingerofdeath": "sorcerer,warlock,wizard", + "firebolt": "sorcerer,wizard,artificerrevisited", + "fireshield": "wizard", + "firestorm": "cleric,druid,sorcerer", + "fireball": "sorcerer,wizard", + "flameblade": "druid", + "flamestrike": "cleric", + "flamingsphere": "druid,wizard", + "fleshtostone": "warlock,wizard", + "fly": "sorcerer,warlock,wizard,artificer,artificerrevisited", + "fogcloud": "druid,ranger,sorcerer,wizard", + "forbiddance": "cleric", + "forcecage": "bard,warlock,wizard", + "foresight": "bard,druid,warlock,wizard", + "freedomofmovement": "bard,cleric,druid,ranger,artificer,artificerrevisited", + "friends": "bard,sorcerer,warlock,wizard", + "gaseousform": "sorcerer,warlock,wizard,artificer,artificerrevisited", + "gate": "cleric,sorcerer,wizard", + "geas": "bard,cleric,druid,paladin,wizard", + "gentlerepose": "cleric,wizard", + "giantinsect": "druid", + "glibness": "bard,warlock", + "globeofinvulnerability": "sorcerer,wizard", + "glyphofwarding": "bard,cleric,wizard,artificer,artificerrevisited", + "goodberry": "druid,ranger", + "graspingvine": "druid,ranger", + "grease": "wizard,artificerrevisited", + "greaterinvisibility": "bard,sorcerer,wizard", + "greaterrestoration": "bard,cleric,druid,artificerrevisited", + "guardianoffaith": "cleric", + "guardsandwards": "bard,wizard", + "guidance": "cleric,druid,artificerrevisited", + "guidingbolt": "cleric", + "gustofwind": "druid,sorcerer,wizard", + "hailofthorns": "ranger", + "hallow": "cleric", + "hallucinatoryterrain": "bard,druid,warlock,wizard", + "harm": "cleric", + "haste": "sorcerer,wizard,artificer,artificerrevisited", + "heal": "cleric,druid", + "healingword": "bard,cleric,druid", + "heatmetal": "bard,druid,artificerrevisited", + "hellishrebuke": "warlock", + "heroesfeast": "cleric,druid", + "heroism": "bard,paladin", + "hex": "warlock", + "holdmonster": "bard,sorcerer,warlock,wizard", + "holdperson": "bard,cleric,druid,sorcerer,warlock,wizard", + "holyaura": "cleric", + "hungerofhadar": "warlock", + "huntersmark": "ranger", + "hypnoticpattern": "bard,sorcerer,warlock,wizard", + "icestorm": "druid,sorcerer,wizard", + "identify": "bard,wizard,artificerrevisited", + "illusoryscript": "bard,warlock,wizard", + "imprisonment": "warlock,wizard", + "incendiarycloud": "sorcerer,wizard", + "inflictwounds": "cleric", + "insectplague": "cleric,druid,sorcerer", + "invisibility": "bard,sorcerer,warlock,wizard,artificer,artificerrevisited", + "jump": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", + "knock": "bard,sorcerer,wizard", + "legendlore": "bard,cleric,wizard", + "leomundssecretchest": "wizard,artificer,artificerrevisited", + "leomundstinyhut": "bard,wizard", + "lesserrestoration": "bard,cleric,druid,paladin,ranger,artificer,artificerrevisited", + "levitate": "sorcerer,wizard,artificerrevisited", + "light": "bard,cleric,sorcerer,wizard,artificerrevisited", + "lightningarrow": "ranger", + "lightningbolt": "sorcerer,wizard", + "locateanimalsorplants": "bard,druid,ranger", + "locatecreature": "bard,cleric,druid,paladin,ranger,wizard", + "locateobject": "bard,cleric,druid,paladin,ranger,wizard", + "longstrider": "bard,druid,ranger,wizard,artificer,artificerrevisited", + "magearmor": "sorcerer,wizard", + "magehand": "bard,sorcerer,warlock,wizard,artificerrevisited", + "magiccircle": "cleric,paladin,warlock,wizard", + "magicjar": "wizard", + "magicmissile": "sorcerer,wizard", + "magicmouth": "bard,wizard,artificerrevisited", + "magicweapon": "paladin,wizard,artificer,artificerrevisited", + "majorimage": "bard,sorcerer,warlock,wizard", + "masscurewounds": "bard,cleric,druid", + "massheal": "cleric", + "masshealingword": "cleric", + "masssuggestion": "bard,sorcerer,warlock,wizard", + "maze": "wizard", + "meldintostone": "cleric,druid", + "melfsacidarrow": "wizard", + "acidarrow": "wizard", + "mending": "bard,cleric,druid,sorcerer,wizard,artificerrevisited", + "message": "bard,sorcerer,wizard,artificerrevisited", + "meteorswarm": "sorcerer,wizard", + "mindblank": "bard,wizard", + "minorillusion": "bard,sorcerer,warlock,wizard", + "miragearcane": "bard,druid,wizard", + "mirrorimage": "sorcerer,warlock,wizard", + "mislead": "bard,wizard", + "mistystep": "sorcerer,warlock,wizard", + "modifymemory": "bard,wizard", + "moonbeam": "druid", + "mordenkainensfaithfulhound": "wizard,artificer,artificerrevisited", + "faithfulhound": "wizard,artificer,artificerrevisited", + "mordenkainensmagnificentmansion": "bard,wizard", + "magnificentmansion": "bard,wizard", + "mordenkainensprivatesanctum": "wizard,artificer,artificerrevisited", + "mordenkainenssword": "bard,wizard", + "arcanesword": "bard,wizard", + "moveearth": "druid,sorcerer,wizard", + "nondetection": "bard,ranger,wizard", + "nystulsmagicaura": "wizard", + "arcanistsmagicaura": "wizard", + "otilukesfreezingsphere": "wizard", + "otilukesresilientsphere": "wizard,artificer,artificerrevisited", + "ottosirresistibledance": "bard,wizard", + "passwithouttrace": "druid,ranger", + "passwall": "wizard", + "phantasmalforce": "bard,sorcerer,wizard", + "phantasmalkiller": "wizard", + "phantomsteed": "wizard", + "planarally": "cleric", + "planarbinding": "bard,cleric,druid,wizard", + "planeshift": "cleric,druid,sorcerer,warlock,wizard", + "plantgrowth": "bard,druid,ranger", + "poisonspray": "druid,sorcerer,warlock,wizard,artificerrevisited", + "polymorph": "bard,druid,sorcerer,wizard", + "powerwordheal": "bard", + "powerwordkill": "bard,sorcerer,warlock,wizard", + "powerwordstun": "bard,sorcerer,warlock,wizard", + "prayerofhealing": "cleric", + "prestidigitation": "bard,sorcerer,warlock,wizard,artificerrevisited", + "prismaticspray": "sorcerer,wizard", + "prismaticwall": "wizard", + "produceflame": "druid", + "programmedillusion": "bard,wizard", + "projectimage": "bard,wizard", + "protectionfromenergy": "cleric,druid,ranger,sorcerer,wizard,artificer,artificerrevisited", + "protectionfromevilandgood": "cleric,paladin,warlock,wizard", + "protectionfrompoison": "cleric,druid,paladin,ranger,artificer,artificerrevisited", + "purifyfoodanddrink": "cleric,druid,paladin", + "raisedead": "bard,cleric,paladin", + "rarystelepathicbond": "wizard", + "rayofenfeeblement": "warlock,wizard", + "rayoffrost": "sorcerer,wizard,artificerrevisited", + "rayofsickness": "sorcerer,wizard", + "regenerate": "bard,cleric,druid", + "reincarnate": "druid", + "removecurse": "cleric,paladin,warlock,wizard", + "resistance": "cleric,druid,artificerrevisited", + "resurrection": "bard,cleric", + "reversegravity": "druid,sorcerer,wizard", + "revivify": "cleric,paladin,artificer,artificerrevisited", + "ropetrick": "wizard,artificer,artificerrevisited", + "sacredflame": "cleric", + "sanctuary": "cleric,artificer,artificerrevisited", + "scorchingray": "sorcerer,wizard", + "scrying": "bard,cleric,druid,warlock,wizard", + "searingsmite": "paladin", + "seeinvisibility": "bard,sorcerer,wizard,artificerrevisited", + "seeming": "bard,sorcerer,wizard", + "sending": "bard,cleric,wizard", + "sequester": "wizard", + "shapechange": "druid,wizard", + "shatter": "bard,sorcerer,warlock,wizard", + "shield": "sorcerer,wizard", + "shieldoffaith": "cleric,paladin,artificer,artificerrevisited", + "shillelagh": "druid", + "shockinggrasp": "sorcerer,wizard,artificerrevisited", + "silence": "bard,cleric,ranger", + "silentimage": "bard,sorcerer,wizard", + "simulacrum": "wizard", + "sleep": "bard,sorcerer,wizard", + "sleetstorm": "druid,sorcerer,wizard", + "slow": "sorcerer,wizard", + "sparethedying": "cleric,artificerrevisited", + "speakwithanimals": "bard,druid,ranger", + "speakwithdead": "bard,cleric", + "speakwithplants": "bard,druid,ranger", + "spiderclimb": "sorcerer,warlock,wizard,artificer,artificerrevisited", + "spikegrowth": "druid,ranger", + "spiritguardians": "cleric", + "spiritualweapon": "cleric", + "staggeringsmite": "paladin", + "stinkingcloud": "bard,sorcerer,wizard", + "stoneshape": "cleric,druid,wizard,artificer,artificerrevisited", + "stoneskin": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", + "stormofvengeance": "druid", + "suggestion": "bard,sorcerer,warlock,wizard", + "sunbeam": "druid,sorcerer,wizard", + "sunburst": "druid,sorcerer,wizard", + "swiftquiver": "ranger", + "symbol": "bard,cleric,wizard", + "tashashideouslaughter": "bard,wizard", + "hideouslaughter": "bard,wizard", + "telekinesis": "sorcerer,wizard", + "telepathy": "wizard", + "teleport": "bard,sorcerer,wizard", + "teleportationcircle": "bard,sorcerer,wizard", + "tensersfloatingdisk": "wizard", + "tensersfloatingdisc": "wizard", + "floatingdisc": "wizard", + "thaumaturgy": "cleric", + "thornwhip": "druid,artificerrevisited", + "thunderoussmite": "paladin", + "thunderwave": "bard,druid,sorcerer,wizard", + "timestop": "sorcerer,wizard", + "tongues": "bard,cleric,sorcerer,warlock,wizard", + "transportviaplants": "druid", + "treestride": "druid,ranger", + "truepolymorph": "bard,warlock,wizard", + "trueresurrection": "cleric,druid", + "trueseeing": "bard,cleric,sorcerer,warlock,wizard", + "truestrike": "bard,sorcerer,warlock,wizard", + "tsunami": "druid", + "unseenservant": "bard,warlock,wizard", + "vampirictouch": "warlock,wizard", + "viciousmockery": "bard", + "walloffire": "druid,sorcerer,wizard", + "wallofforce": "wizard", + "wallofice": "wizard", + "wallofstone": "druid,sorcerer,wizard,artificerrevisited", + "wallofthorns": "druid", + "wardingbond": "cleric", + "waterbreathing": "druid,ranger,sorcerer,wizard,artificer,artificerrevisited", + "waterwalk": "cleric,druid,ranger,sorcerer,artificer,artificerrevisited", + "web": "sorcerer,wizard", + "weird": "wizard", + "windwalk": "druid", + "windwall": "druid,ranger", + "wish": "sorcerer,wizard", + "witchbolt": "sorcerer,warlock,wizard", + "wordofrecall": "cleric", + "wrathfulsmite": "paladin", + "zoneoftruth": "bard,cleric,paladin" +} \ No newline at end of file