Module:Item2/config/sandbox: Difference between revisions

From Path of Exile Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(98 intermediate revisions by 2 users not shown)
Line 25: Line 25:
     status_icon = 'File:%s status icon.png',
     status_icon = 'File:%s status icon.png',
     divination_card_art = 'File:%s card art.png',
     divination_card_art = 'File:%s card art.png',
    divination_card_background = 'File:Divination card bg %s.webm',
}
cfg.i18n.templates = {
    cargo_attach = 'Template:Item/cargo/%s/attach',
}
}


cfg.i18n.gem_tag_category = '[[:Category:%s (gem tag)|%s]]'
cfg.i18n.gem_tag_category = '[[:Category:%s (gem tag)|%s]]'
cfg.i18n.misc = {
    -- used to identify betrayal map series to avoid showing area infobox.
    betrayal = 'Betrayal',
}


cfg.i18n.categories = {
cfg.i18n.categories = {
Line 45: Line 45:
     sell_prices_override = 'Items with sell prices overrides',
     sell_prices_override = 'Items with sell prices overrides',
     automatic_recipes_disabled = 'Items with automatic recipes disabled',
     automatic_recipes_disabled = 'Items with automatic recipes disabled',
    legacy_drop_areas = 'Items using legacy map areas as drop restrictions',
    deprecated_parameters = 'Pages using deprecated parameters for item module',
     deprecated_skill_parameters = 'Pages using deprecated parameters for skill data',
     deprecated_skill_parameters = 'Pages using deprecated parameters for skill data',


Line 50: Line 52:
     alternate_artwork = 'Items with alternate artwork',
     alternate_artwork = 'Items with alternate artwork',
     implicit_modifier_override = 'Items with implicit modifier overrides',
     implicit_modifier_override = 'Items with implicit modifier overrides',
 
   
     -- misc
     -- subcategories
    gem_tag_affix = '%s (gem tag)',
     unique_affix = 'Unique %s',
     unique_affix = 'Unique %s',
   
     prophecies = 'Prophecies',
     prophecies = 'Prophecies',
     blight_item = 'Oils',
     oils = 'Oils',
     talismans = 'Talismans',
     talismans = 'Talismans',
     essences = 'Essences',
     essences = 'Essences',
    fossils = 'Fossils',
    scarabs = 'Scarabs',
    tattoos = 'Tattoos',
    delirium_orbs = 'Delirium orbs',
    catalysts = 'Catalysts',
    maps_by_series = '%s series maps',
    -- misc
    gem_tag_affix = '%s (gem tag)',
}
}


Line 75: Line 84:
         'Jewel has a radius of %d+ %(Hidden%)',
         'Jewel has a radius of %d+ %(Hidden%)',
     },
     },
}
cfg.i18n.help_text_defaults = {
    active_gem = 'Place into an item socket of the right colour to gain this skill. Right click to remove from a socket.',
    support_gem = 'This is a Support Gem. It does not grant a bonus to your character, but skills in sockets connected to it. Place into an item socket connected to a socket containing the Active Skill Gem you wish to augment. Right click to remove from a socket.',
    jewel = 'Place into an allocated Jewel Socket on the Passive Skill Tree. Right click to remove from the Socket.',
    watchstone = 'Socket this into a Citadel on your Atlas to increase the Tier of Maps and reveal hidden Maps in that Citadel\'s Region. You can only socket one Crimson, Viridian, Cobalt or Golden Watchstone into each Citadel.',
}
}


-- Used by the item info box
-- Used by the item info box
cfg.i18n.tooltips = {
cfg.i18n.tooltips = {
     corrupted = m_util.html.poe_color('corrupted', 'Corrupted'),
     corrupted = 'Corrupted',
    mirrored = 'Mirrored',
    unmodifiable = 'Unmodifiable',
     support_icon = 'Icon: %s',
     support_icon = 'Icon: %s',
     radius = 'Radius: %s',
     radius = 'Radius: %s',
     cost = 'Cost: %s',
     cost = 'Cost: %s',
     reservation = 'Reservation: %s',
     reservation = 'Reservation: %s',
     mana_multiplier = 'Cost & Reservation Multiplier: %s',
     cost_multiplier = 'Cost & Reservation Multiplier: %s',
     vaal_souls_per_use = 'Souls Per Use: %s',
     vaal_souls_per_use = 'Souls Per Use: %s',
     stored_uses = 'Can Store %s Use(s)',
     stored_uses = 'Can Store %s Use(s)',
Line 98: Line 102:
     vaal_soul_gain_prevention_time = 'Soul Gain Prevention: %s',
     vaal_soul_gain_prevention_time = 'Soul Gain Prevention: %s',
     cooldown_time = 'Cooldown Time: %s',
     cooldown_time = 'Cooldown Time: %s',
    uses_quantity = 'uses',
     cast_time = 'Cast Time: %s',
     cast_time = 'Cast Time: %s',
     use_time = 'Use Time: %s',
     use_time = 'Use Time: %s',
     instant_cast_time = 'Instant',
     instant_cast_time = 'Instant',
    attack_time = 'Attack Time: %s',
     critical_strike_chance = 'Critical Strike Chance: %s',
     critical_strike_chance = 'Critical Strike Chance: %s',
     attack_speed_multiplier = 'Attack Speed: %s',
     attack_speed_multiplier = 'Attack Speed: %s',
Line 108: Line 112:
     damage_effectiveness = 'Effectiveness of Added Damage: %s',
     damage_effectiveness = 'Effectiveness of Added Damage: %s',
     projectile_speed = 'Projectile Speed: %s',
     projectile_speed = 'Projectile Speed: %s',
    aoe_radius = 'AoE Radius: %s',
     quality = 'Quality: %s',
     quality = 'Quality: %s',
     physical_damage = 'Physical Damage: %s',
     physical_damage = 'Physical Damage: %s',
Line 121: Line 126:
     monster_pack_size = 'Monster Pack Size: %s',
     monster_pack_size = 'Monster Pack Size: %s',
     limited_to = 'Limited to: %s',
     limited_to = 'Limited to: %s',
     flask_mana_recovery = 'Recovers %s Mana over %s seconds',
     flask_mana_recovery = 'Recovers %s Mana over %s Seconds',
     flask_life_recovery = 'Recovers %s Life over %s seconds',
     flask_life_recovery = 'Recovers %s Life over %s Seconds',
     flask_duration = 'Lasts %s Seconds',
     flask_duration = 'Lasts %s Seconds',
     flask_charges_per_use = 'Consumes %s of %s Charges on use',
     flask_charges_per_use = 'Consumes %s of %s Charges on use',
Line 135: Line 140:
     essence_level = 'Essence Tier: %s',
     essence_level = 'Essence Tier: %s',
     blight_item_tier = 'Oil Tier: %s',
     blight_item_tier = 'Oil Tier: %s',
    monster_category = 'Monster Category: %s',
    pack_size = 'Pack Size: %s Monsters',
    pack_contains_pack_leader = string.format('Pack contains %s', m_util.html.poe_color('value', 'Pack Leader')),
    pack_chance_to_contain_pack_leader = string.format('Pack chance to contain %s: %%s', m_util.html.poe_color('value', 'Pack Leader')),
     requires = 'Requires %s',
     requires = 'Requires %s',
     level_inline = 'Level %s',
     level_inline = 'Level %s',
     level = 'Level: %s',
     level = 'Level: %s',
     gem_quality = 'Per 1% Quality:',
     gem_quality_effect_bonus = 'Additional Effects From 1-20%% Quality: <br> %s',
    gem_quality_1 = 'Superior',
    gem_quality_2 = 'Anomalous',
    gem_quality_3 = 'Divergent',
    gem_quality_4 = 'Phantasmal',
     variations = 'Variations',
     variations = 'Variations',
     cannot_be_traded_or_modified = 'Cannot be traded or modified',
     cannot_be_traded_or_modified = 'Cannot be traded or modified',
    account_bound = 'Account-bound',
    -- Tattoos
    tattoo_target = 'Replaces a %s Passive Skill',
    tattoo_limit = 'Limited to: %s',
    tattoo_min_adjacent = 'Requires %s adjacent Passive Skills Allocated',
    tattoo_max_adjacent = 'Requires %s adjacent Passive Skill Allocated',
    tattoo_maximum = 'maximum',
      
      
     -- harvest seeds
     -- harvest seeds
Line 164: Line 177:
     heist_required_job = 'Requires %s in %s',
     heist_required_job = 'Requires %s in %s',
     heist_any_job = 'Any job',
     heist_any_job = 'Any job',
    -- sentinels
    sentinel_duration = 'Duration: %s seconds',
    sentinel_empowers = 'Empowers: %s enemies',
    sentinel_empowerment = 'Empowerment: %s',
    sentinel_charge = 'Charge: %s uses',
    sentinel_can_only_empower = 'Can only Empower %s (Level %s)',
      
      
     random_mod = '&lt;&lt;random modifier %s&gt;&gt;',
     random_mod = '&lt;&lt;random modifier %s&gt;&gt;',
Line 178: Line 198:
      
      
     acquisition = 'Acquisition',
     acquisition = 'Acquisition',
    not_in_game = 'Not in game',
     drop_level = 'Drop level: %s',
     drop_level = 'Drop level: %s',
     drop_disabled = '[[Drop disabled]]',
     drop_disabled = '[[Drop disabled]]',
Line 206: Line 227:
cfg.i18n.default_inventory_icons = {
cfg.i18n.default_inventory_icons = {
     ['DivinationCard'] = 'Divination card',
     ['DivinationCard'] = 'Divination card',
     ['Prophecy'] = 'Prophecy',
     ['is_prophecy'] = 'Prophecy',
}
}


Line 228: Line 249:
     ['FishingRod'] = 'Fishing Rod',
     ['FishingRod'] = 'Fishing Rod',
     ['HideoutDoodad'] = 'Hideout Item',
     ['HideoutDoodad'] = 'Hideout Item',
}
     ['AbyssJewel'] = 'Abyss',
 
-- Map cosmetic types to wiki categories
cfg.i18n.cosmetic_type_map = {
    ['Consumable'] = {
        category = 'Consumable items',
    },
    ['Apparition'] = {
        category = 'Apparitions',
    },
    ['Armour Attachment'] = {
        category = 'Armour attachments',
    },
    ['Armour Skin'] = {
        category = 'Armour skins',
    },
    ['Boots Skin'] = {
        category = 'Boots skins',
    },
    ['Character Effect'] = {
        category = 'Character effects',
    },
    ['Crafting Bench'] = {
        category = 'Hideout decorations',
    },
     ['Dance'] = {
        category = 'Character animations',
    },
    ['Footprints'] = {
        category = 'Footprints effects',
    },
    ['Gloves Skin'] = {
        category = 'Gloves skins',
    },
    ['Helmet Attachment'] = {
        category = 'Helmet attachments',
    },
    ['Helmet Skin'] = {
        category = 'Helmet skins',
    },
    ['Hideout Decoration Microtransactions'] = {
        category = 'Hideout decorations',
    },
    ['Hideout Decoration'] = {
        category = 'Hideout decorations',
    },
    ['Challenge Trophy'] = {
        category = 'Hideout decorations',
    },
    ['Pet'] = {
        category = 'Pets',
    },
    ['Portal'] = {
        category = 'Portal effects',
    },
    ['Skill Gem Effect'] = {
        category = 'Alternate skill effects',
    },
    ['Social Frame'] = {
        category = 'Portrait frames',
    },
    ['Portrait'] = {
        category = 'Portraits',
    },
    ['Weapon Added Effect'] = {
        category = 'Weapon added effects',
    },
    ['Weapon Effect'] = {
        category = 'Weapon effects',
    },
    ['Weapon Skin'] = {
        category = 'Weapon skins',
    },
    ['Shield Skin'] = {
        category = 'Shield skins',
    },
    ['Miscellaneous'] = {
        category = 'Miscellaneous cosmetic items',
    },
}
}


Line 324: Line 267:
cfg.i18n.errors = {
cfg.i18n.errors = {
     missing_base_item = 'Rarity is set to above normal, but base item is not set. A base item for rarities above normal is required!',
     missing_base_item = 'Rarity is set to above normal, but base item is not set. A base item for rarities above normal is required!',
    missing_rarity = 'Base item parameter is set, but rarity is set to normal. A rarity above normal is required!',
     duplicate_base_items = 'More then one result found for the specified base item. Consider using base_item_page or base_item_id to narrow down the results.',
     duplicate_base_items = 'More then one result found for the specified base item. Consider using base_item_page or base_item_id to narrow down the results.',
     base_item_not_found = 'Base item could not be found in the database. Check for spelling mistakes or whether the base item page exists on the wiki. If the base item page exists on the wiki, but it can not be found please null-edit the page.',
     base_item_not_found = 'Base item could not be found in the database. Check for spelling mistakes or whether the base item page exists on the wiki. If the base item page exists on the wiki, but it can not be found please null-edit the page.',
    base_item_wrong_rarity = 'The specified base item must be normal rarity',
     invalid_acquisition_tag = '%s is not a valid acquisition tag',
     invalid_acquisition_tag = '%s is not a valid acquisition tag',
     invalid_tag = '%s is not a valid tag',
     invalid_tag = '%s is not a valid tag',
     generic_argument_parameter = 'Unrecognized %s parameter "%s"',
     generic_argument_parameter = 'Unrecognized %s parameter "%s"',
     generic_required_parameter = 'Parameter "%s" must be specified for this item type.',
     generic_required_parameter = 'The "%s" parameter is required.',
     non_unique_flag = 'Only unique items can are egible for the flag "%s".',
     non_unique_flag = 'Only unique items can are egible for the flag "%s".',
    duplicate_area_id_from_query = 'Query found duplicate area ids that do not need to be set on the item. Duplicate ids: "%s"',
     duplicate_metadata = 'Duplicate metadata id "%s" on page "%s"',
     duplicate_metadata = 'Duplicate metadata id "%s" on page "%s"',
     invalid_influence = 'The influence "%s" is invalid. Acceptable values are "shaper", "elder", "crusader", "redeemer", "hunter" and "warlord".',
     invalid_influence = 'The influence "%s" is invalid. Acceptable values are "shaper", "elder", "crusader", "redeemer", "hunter" and "warlord".',
Line 341: Line 283:
     invalid_gem_tag = '%s is not a valid gem tag',
     invalid_gem_tag = '%s is not a valid gem tag',
     invalid_cosmetic_type = '%s is not a valid cosmetic type',
     invalid_cosmetic_type = '%s is not a valid cosmetic type',
    invalid_monster_category = '%s is not a valid monster category',
}
}


Line 346: Line 289:
-- Recipes
-- Recipes
--
--
cfg.i18n.recipes = {}


cfg.i18n.recipes = {
cfg.i18n.recipes = {
Line 363: Line 304:
     granite_flask = 'Granite Flask',
     granite_flask = 'Granite Flask',
     precursors_emblem = 'Precursor\'s Emblem',
     precursors_emblem = 'Precursor\'s Emblem',
    grand_spectrum = 'Grand Spectrum',


    ['Colosseum Map'] = 'Colosseum Map',
    ['Wasteland Map'] = 'Wasteland Map',
     ['Forge of the Phoenix Map'] = 'Forge of the Phoenix Map',
     ['Forge of the Phoenix Map'] = 'Forge of the Phoenix Map',
     ['Lair of the Hydra Map'] = 'Lair of the Hydra Map',
     ['Lair of the Hydra Map'] = 'Lair of the Hydra Map',
     ['Maze of the Minotaur Map'] = 'Maze of the Minotaur Map',
     ['Maze of the Minotaur Map'] = 'Maze of the Minotaur Map',
     ['Pit of the Chimera Map'] = 'Pit of the Chimera Map',
     ['Pit of the Chimera Map'] = 'Pit of the Chimera Map',
    ['Strand Map'] = 'Strand Map',
    ['Terrace Map'] = 'Terrace Map',
    ['Chateau Map'] = 'Chateau Map',
     ['Vaal Temple Map'] = 'Vaal Temple Map',
     ['Vaal Temple Map'] = 'Vaal Temple Map',
    ['Synthesised Map'] = 'Synthesised Map',


     -- Namesakes
     -- Namesakes
Line 386: Line 324:
     craiceann = 'Craiceann',
     craiceann = 'Craiceann',
     chayula = 'Chayula',
     chayula = 'Chayula',
    maven = 'Maven',


     -- Strings used in notes
     -- Strings used in notes
Line 411: Line 350:
     bow = 'bow',
     bow = 'bow',
     gloves = 'gloves',
     gloves = 'gloves',
    boots = 'boots',
     jewel = 'jewel',
     jewel = 'jewel',
     talisman = 'talisman',
     talisman = 'talisman',
Line 416: Line 356:
     breachstone_splinter = 'breachstone splinter',
     breachstone_splinter = 'breachstone splinter',
     breachstone = 'breachstone',
     breachstone = 'breachstone',
    pure_breachstone = 'Pure breachstone',
     scarab = 'scarab',
     scarab = 'scarab',
     gilded_scarab = '"Gilded" tier scarab',
     gilded_scarab = '"Gilded" tier scarab',
    winged_scarab = '"Winged" tier scarab',
     essence = 'essence',
     essence = 'essence',
     deafening_essence = '"Deafening" (tier 7) essence',
     deafening_essence = '"Deafening" (tier 7) essence',
Line 428: Line 368:
     two_hand_weapon = 'two-handed weapon',
     two_hand_weapon = 'two-handed weapon',
     league_specific_item = 'league-specific item',
     league_specific_item = 'league-specific item',
    fated_unique_item_prophecy = 'fated unique item prophecy',
     quality_currency = 'quality currency',
     quality_currency = 'quality currency',
     fossil = 'fossil',
     fossil = 'fossil',
    scouting_report = 'scouting report',
     fragment = 'fragment',
     fragment = 'fragment',
     sacrifice_fragment = 'Sacrifice fragment',
     sacrifice_fragment = 'Sacrifice fragment',
Line 439: Line 379:
     shaper_guardian_map = 'Shaper Guardian map',
     shaper_guardian_map = 'Shaper Guardian map',
     vial = 'vial',
     vial = 'vial',
    blueprint = 'blueprint',
    incubator = 'incubator',
    oil = 'oil',
    experimented_base_type = 'experimented base type',
    experimented_two_hand_weapon = 'experimented two-handed weapon',


     corrupted = m_util.html.poe_color('corrupted', 'corrupted'),
     corrupted = m_util.html.poe_color('corrupted', 'corrupted'),
Line 447: Line 392:
     primordial = 'Primordial',
     primordial = 'Primordial',
     fishing = 'fishing',
     fishing = 'fishing',
    replica = 'replica',
    support = 'support',
    awakened_support = 'awakened support',
      
      
     -- used within essences
     -- used within essences
Line 456: Line 404:
}
}


-- formatters  
-- formatters
cfg.i18n.recipes.fmt = {
cfg.i18n.recipes.fmt = {
     item_level_x = 'item level %i %s',
     item_level_x = 'item level %i %s',
Line 469: Line 417:
     random_two_implicit_corrupted_two_influenced_item_level_x = string.format('Random %s level %%i %%s', cfg.i18n.recipes.two_implicit_corrupted),
     random_two_implicit_corrupted_two_influenced_item_level_x = string.format('Random %s level %%i %%s', cfg.i18n.recipes.two_implicit_corrupted),
     random_item_level_x = 'Random item level %i %s',
     random_item_level_x = 'Random item level %i %s',
    random_x_quality = 'Random %s with %i%% quality',
     random_x_link = 'Random %i-link %s',
     random_x_link = 'Random %i-link %s',
     random_x_link_item_level_y = 'Random %i-link item level %i %s',
     random_x_link_item_level_y = 'Random %i-link item level %i %s',
Line 478: Line 427:
     random_shaper_item_level_x = 'Random Shaper influenced item level %i %s',
     random_shaper_item_level_x = 'Random Shaper influenced item level %i %s',
     random_elder_item_level_x = 'Random Elder influenced item level %i %s',
     random_elder_item_level_x = 'Random Elder influenced item level %i %s',
     random_shaper_hunter_item_level_x = 'Random Shaper and Hunter influenced level %i %s',
     random_shaper_hunter_item_level_x = 'Random Shaper and Hunter influenced item level %i %s',
     random_two_influenced_x = 'Random double-influenced %s',
     random_two_influenced_x = 'Random double-influenced %s',
     random_two_influenced_item_level_x = 'Random double-influenced item level %i %s',
     random_two_influenced_item_level_x = 'Random double-influenced item level %i %s',
Line 484: Line 433:
     random_labyrinth_enchantment = string.format('Random %%s with a %s', m_util.html.poe_color('enchanted', 'Labyrinth enchantment')),
     random_labyrinth_enchantment = string.format('Random %%s with a %s', m_util.html.poe_color('enchanted', 'Labyrinth enchantment')),
     random_eternal_labyrinth_enchantment = string.format('Random %%s with an %s', m_util.html.poe_color('enchanted', 'Eternal Labyrinth enchantment')),
     random_eternal_labyrinth_enchantment = string.format('Random %%s with an %s', m_util.html.poe_color('enchanted', 'Eternal Labyrinth enchantment')),
    random_three_synthesised_item_level_x = string.format('Random %s item level %%i %%s', m_util.html.poe_color('enchanted', 'three-implicit synthesised')),
    random_fractured_item_level_x = string.format('Random %s item level %%i %%s', m_util.html.poe_color('fractured', 'fractured')),


     tier_x = 'tier %i %s',
     tier_x = 'tier %i %s',
     tier_x_map = 'tier %i map',
     tier_x_map = 'tier %i map',
     map_watchstone_count = '%s (%i watchstones)',
     tier_x_to_y_map = 'tier %i–%i map',
     map_with_x_modifiers = '%s with %i modifiers',
     tier_x_map_with_y_modifiers = 'tier %i map with %i modifiers',
     map_with_x_percent_delirium = '%s with %i%% delirium',
     map_with_x_percent_delirium = '%s with %i%% delirium',
    the_price_of_protection = '%s with 8 modifiers and occupied by an Elder Guardian',
     triskaidekaphobia = '%s with 8 modifiers, 13%% quality and 100%% delirium',
     triskaidekaphobia = '%s with 8 modifiers, 13%% quality and 100%% delirium',
    fully_revealed_x_area_level_y = '%s with area level %i, fully revealed',
     level_x_gem = 'level %i gem',
     level_x_gem = 'level %i gem',
    level_x_trans_gem = 'level %i transfigured gem',
     level_x_y_gem = 'level %i %s gem',
     level_x_y_gem = 'level %i %s gem',
     superior_gem = 'superior gem',
     gem_quality = 'gem with 1–20% quality',
     superior_gem_q_x = 'superior gem with %i%% quality',
     gem_x_quality = 'gem with %i%% quality',
     superior_x_gem_q_y = 'superior %s gem with %i%% quality',
     x_gem = '%s gem',
     superior_level_x_y_gem_q_z = 'superior level %i %s gem with %i%% quality',
    x_gem_quality = '%s gem with 1–20%% quality',
     any_quality_level_x_y_gem_q_z = 'level %i %s gem with %i%% quality (any quality type)',
     x_gem_y_quality = '%s gem with %i%% quality',
     superior_level_x_support_plus_gem_q_y = 'level %i awakened support gem with %i%% quality',
     level_x_trans_gem_y_quality = 'level %i transfigured gem with %i%% quality',
     alt_level_x_gem_q_y = 'level %i gem with %i%% alternative quality',
     level_x_y_gem_z_quality = 'level %i %s gem with %i%% quality',
     level_x_trans_y_gem_z_quality = 'level %i transfigured %s gem with %i%% quality',
      
      
     x_item = '%s item',
     x_item = '%s item',
Line 522: Line 479:
cfg.image_size_full = cfg.image_size * 2
cfg.image_size_full = cfg.image_size * 2


-- TODO: Second pass for i18n item classes
-- base item is default, but will be validated later
-- Notes:
-- Notes:
--  inventory_icon must always be before alternate_art_inventory_icons  
--  inventory_icon must always be before alternate_art_inventory_icons  
--  drop_areas after tags
--  drop_areas after tags
--  is_relic after rarity
cfg.default_args = {
cfg.default_args = {
     'is_in_game',
     'is_in_game',
     'rarity_id', 'rarity', 'name', 'name_list', 'size_x', 'size_y',
     'rarity_id', 'rarity', 'name', 'name_list', 'size_x', 'size_y',
     'drop_rarities_ids', 'drop_rarities', 'drop_enabled', 'drop_level', 'drop_level_maximum', 'drop_text', 'required_level', 'required_level_final',
     'drop_rarities_ids', 'drop_enabled', 'drop_level', 'drop_level_maximum', 'drop_text', 'required_level', 'required_level_final',
     'inventory_icon', 'alternate_art_inventory_icons', 'flavour_text', 'flavour_text_id',
     'flavour_text', 'flavour_text_id',
     'cannot_be_traded_or_modified', 'help_text', 'tags', 'metadata_id',
     'cannot_be_traded_or_modified', 'help_text', 'is_account_bound', 'tags', 'metadata_id',
     'influences', 'is_fractured', 'is_synthesised', 'is_veiled', 'is_replica', 'is_corrupted', 'is_relic', 'is_fated',
     'influences', 'is_fractured', 'is_synthesised', 'is_searing_exarch_item', 'is_eater_of_worlds_item', 'is_veiled', 'is_replica', 'is_corrupted', 'is_mirrored', 'is_unmodifiable',
     'purchase_costs', 'is_sellable', 'sell_prices_override', 'mods',
     'purchase_costs', 'is_sellable', 'sell_prices_override',
     'drop_areas', 'drop_areas_html', 'drop_monsters',
     'drop_areas', 'drop_monsters',
      
      
     'acquisition_tags', 'disable_automatic_recipes',
     'acquisition_tags', 'disable_automatic_recipes',
     'suppress_improper_modifiers_category',
     'suppress_improper_modifiers_category',
   
    'is_prophecy', 'is_blight_item',
      
      
     'class',
     'class',
     'is_drop_restricted',
}
 
-- Args to process when a particular flag is set
cfg.flagged_args = {
     is_essence = {
        args = {'essence_level_restriction', 'essence_level', 'essence_type', 'essence_category'},
    },
    is_prophecy = {
        args = {'prophecy_id', 'prediction_text', 'seal_cost', 'prophecy_objective', 'prophecy_reward'},
    },
    is_blight_item = {
        args = {'blight_item_tier'},
    },
    is_tattoo = {
        args = {'tattoo_target', 'tattoo_tribe', 'tattoo_limit', 'tattoo_min_adjacent', 'tattoo_max_adjacent', 'tattoo_skill_id'},
    },
}
}


-- frame_type is needed in stat_text
-- frame_type is needed in stat_text
cfg.late_args = {'frame_type', 'implicit_stat_text', 'explicit_stat_text', 'stat_text'}
cfg.late_args = {
 
    'inventory_icon', 'alternate_art_inventory_icons', 'frame_type',
cfg.prophecy_args = {'prophecy_id', 'prediction_text', 'seal_cost', 'prophecy_objective', 'prophecy_reward'}
    'is_drop_restricted', 'drop_areas_html',
    'implicit_stat_text', 'explicit_stat_text', 'stat_text',
}


cfg.tables = {'items'}
cfg.tables = {'items'}


-- Certain item classes are grouped together
cfg.class_groups = {
cfg.class_groups = {
     flasks = {
     flasks = {
        keys = {['LifeFlask'] = true, ['ManaFlask'] = true, ['HybridFlask'] = true, ['UtilityFlask'] = true},
         tables = {'flasks'},
         tables = {'flasks'},
        keys = {['LifeFlask'] = true, ['ManaFlask'] = true, ['HybridFlask'] = true, ['UtilityFlask'] = true, ['UtilityFlaskCritical'] = true},
         args = {'quality', 'flask_duration', 'charges_max', 'charges_per_use'},
         args = {'quality', 'flask_duration', 'charges_max', 'charges_per_use'},
     },
     },
     weapons = {
     weapons = {
        keys = {['Claw'] = true, ['Dagger'] = true, ['Wand'] = true, ['One Hand Sword'] = true, ['Thrusting One Hand Sword'] = true, ['One Hand Axe'] = true, ['One Hand Mace'] = true, ['Bow'] = true, ['Staff'] = true, ['Two Hand Sword'] = true, ['Two Hand Axe'] = true, ['Two Hand Mace'] = true, ['Sceptre'] = true, ['FishingRod'] = true, ['Rune Dagger'] = true, ['Warstaff'] = true},
         tables = {'weapons'},
         tables = {'weapons'},
        keys = {['Claw'] = true, ['Dagger'] = true, ['Wand'] = true, ['One Hand Sword'] = true, ['Thrusting One Hand Sword'] = true, ['One Hand Axe'] = true, ['One Hand Mace'] = true, ['Bow'] = true, ['Staff'] = true, ['Two Hand Sword'] = true, ['Two Hand Axe'] = true, ['Two Hand Mace'] = true, ['Sceptre'] = true, ['FishingRod'] = true, ['Rune Dagger'] = true, ['Warstaff'] = true},
         args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'critical_strike_chance', 'attack_speed', 'physical_damage_min', 'physical_damage_max', 'lightning_damage_min', 'lightning_damage_max', 'cold_damage_min', 'cold_damage_max', 'fire_damage_min', 'fire_damage_max', 'chaos_damage_min', 'chaos_damage_max', 'weapon_range'},
         args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'critical_strike_chance', 'attack_speed', 'physical_damage_min', 'physical_damage_max', 'lightning_damage_min', 'lightning_damage_max', 'cold_damage_min', 'cold_damage_max', 'fire_damage_min', 'fire_damage_max', 'chaos_damage_min', 'chaos_damage_max', 'weapon_range'},
         late_args = {'physical_damage_html', 'fire_damage_html', 'cold_damage_html', 'lightning_damage_html', 'chaos_damage_html', 'damage_avg', 'damage_html'},
         late_args = {'physical_damage_html', 'fire_damage_html', 'cold_damage_html', 'lightning_damage_html', 'chaos_damage_html', 'damage_avg', 'damage_html'},
     },
     },
     gems = {
     gems = {
        keys = {['Active Skill Gem'] = true, ['Support Skill Gem'] = true},
         tables = {'skill_gems'},
         tables = {'skill_gems'},
         keys = {['Active Skill Gem'] = true, ['Support Skill Gem'] = true},
         args = {'gem_description', 'dexterity_percent', 'strength_percent', 'intelligence_percent', 'primary_attribute', 'gem_tags'},
        args = {'dexterity_percent', 'strength_percent', 'intelligence_percent', 'primary_attribute', 'gem_tags'},
        defaults = {
            size_x = 1,
            size_y = 1,
        },
     },
     },
     armor = {
     armor = {
        keys = {['Gloves'] = true, ['Boots'] = true, ['Body Armour'] = true, ['Helmet'] = true, ['Shield'] = true},
         tables = {'armours'},
         tables = {'armours'},
        keys = {['Gloves'] = true, ['Boots'] = true, ['Body Armour'] = true, ['Helmet'] = true, ['Shield'] = true},
         args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'armour_min', 'armour_max', 'evasion_min', 'evasion_max', 'energy_shield_min', 'energy_shield_max', 'ward_min', 'ward_max', 'movement_speed'},
         args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'armour_min', 'armour_max', 'evasion_min', 'evasion_max', 'energy_shield_min', 'energy_shield_max', 'ward_min', 'ward_max', 'movement_speed'},
     },
     },
     stackable = {
     stackable = {
        keys = {['StackableCurrency'] = true, ['DivinationCard'] = true, ['DelveStackableSocketableCurrency'] = true, ['IncubatorStackable'] = true, ['MapFragment'] = true, ['Breachstone'] = true, ['HarvestSeed'] = true, ['HarvestPlantBooster'] = true},
         tables = {'stackables'},
         tables = {'stackables'},
        keys = {['Currency'] = true, ['StackableCurrency'] = true, ['DivinationCard'] = true, ['DelveSocketableCurrency'] = true, ['DelveStackableSocketableCurrency'] = true, ['IncubatorStackable'] = true, ['HarvestSeed'] = true, ['HarvestPlantBooster'] = true},
         args = {'stack_size', 'stack_size_currency_tab', 'description'},
         args = {'stack_size', 'stack_size_currency_tab', 'description'},
     },
     },
     heist_equipment = {
     heist_equipment = {
        keys = {['HeistEquipmentWeapon'] = true, ['HeistEquipmentTool'] = true, ['HeistEquipmentUtility'] = true, ['HeistEquipmentReward'] = true},
         tables = {'heist_equipment'},
         tables = {'heist_equipment'},
        keys = {['HeistEquipmentWeapon'] = true, ['HeistEquipmentTool'] = true, ['HeistEquipmentUtility'] = true, ['HeistEquipmentReward'] = true},
         args = {'heist_required_job_id', 'heist_required_job_level', 'heist_data'},
         args = {'heist_required_job_id', 'heist_required_job_level', 'heist_data'},
     },
     },
     jewellery = {
     jewellery = {
         keys = {['Amulet'] = true, ['Ring'] = true, ['Belt'] = true},
         keys = {['Amulet'] = true, ['Ring'] = true, ['Belt'] = true},
    },
    jewels = {
        keys = {['Jewel'] = true, ['AbyssJewel'] = true},
     },
     },
}
}
Line 611: Line 580:
     },
     },
     ['UtilityFlask'] = {
     ['UtilityFlask'] = {
        tables = {'item_buffs'},
        args = {'buff_id', 'buff_values', 'buff_stat_text', 'buff_icon'},
    },
    ['UtilityFlaskCritical'] = {
         tables = {'item_buffs'},
         tables = {'item_buffs'},
         args = {'buff_id', 'buff_values', 'buff_stat_text', 'buff_icon'},
         args = {'buff_id', 'buff_values', 'buff_stat_text', 'buff_icon'},
     },
     },
     ['Active Skill Gem'] = {
     ['Active Skill Gem'] = {
         defaults = {
         args = {'is_vaal_skill_gem', 'vaal_variant_id'},
            help_text = cfg.i18n.help_text_defaults.active_gem,
        },
         frame_type = 'gem',
         frame_type = 'gem',
     },
     },
     ['Support Skill Gem'] = {
     ['Support Skill Gem'] = {
         args = {'support_gem_letter', 'support_gem_letter_html'},
         args = {
        defaults = {
            'support_gem_letter', 'support_gem_letter_html',
             help_text = cfg.i18n.help_text_defaults.support_gem,
             'is_awakened_support_gem', 'awakened_variant_id',
         },
         },
         frame_type = 'gem',
         frame_type = 'gem',
Line 671: Line 634:
         skip_stat_lines = cfg.i18n.stat_skip_patterns.maps,
         skip_stat_lines = cfg.i18n.stat_skip_patterns.maps,
     },
     },
     ['Currency'] = {
     ['MapFragment'] = {
         frame_type = 'currency',
         args = {'is_scarab'},
     },
     },
     ['StackableCurrency'] = {
     ['StackableCurrency'] = {
         tables = {'essences', 'prophecies', 'blight_items'},
         tables = {'essences', 'prophecies', 'blight_items', 'tattoos'},
         args = {'is_essence', 'essence_level_restriction', 'essence_level', 'essence_type', 'essence_category', 'blight_item_tier'},
         args = {
            'is_essence', 'is_prophecy', 'is_blight_item', 'is_tattoo',
            'is_fossil', 'is_delirium_orb', 'is_catalyst',
        },
         frame_type = 'currency',
         frame_type = 'currency',
     },
     },
     ['Microtransaction'] = {
     ['Microtransaction'] = {
         tables = {'cosmetic_items'},
         tables = {'cosmetic_items'},
         args = {'description', 'cosmetic_type'},
         args = {'description', 'cosmetic_type', 'cosmetic_target'},
         defaults = {
         defaults = {
             is_sellable = false,
             is_sellable = false,
         },
         },
         frame_type = 'currency',      
         frame_type = 'currency',
     },
     },
     ['HideoutDoodad'] = {
     ['HideoutDoodad'] = {
Line 697: Line 663:
     ['Jewel'] = {
     ['Jewel'] = {
         tables = {'jewels'},
         tables = {'jewels'},
         late_args = {'item_limit', 'jewel_radius_html'},
         args = {'jewel_limit'},
         defaults = {
         late_args = {'jewel_radius_html'},
            help_text = cfg.i18n.help_text_defaults.jewel,
        },
         skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
         skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
     },
     },
     ['AbyssJewel'] = {
     ['AbyssJewel'] = {
        tables = {'jewels'},
        late_args = {'item_limit', 'jewel_radius_html'},
         skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
         skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
     },
     },
Line 717: Line 679:
     ['DivinationCard'] = {
     ['DivinationCard'] = {
         tables = {'divination_cards'},
         tables = {'divination_cards'},
         args = {'card_art',},
         args = {'card_art', 'card_background'},
         frame_type = 'divicard',
         frame_type = 'divicard',
     },
     },
Line 729: Line 691:
         tables = {'item_buffs'},
         tables = {'item_buffs'},
         args = {'description', 'buff_icon'},
         args = {'description', 'buff_icon'},
        defaults = {
            is_sellable = false,
        },
         frame_type = 'currency',
         frame_type = 'currency',
     },
     },
Line 734: Line 699:
         defaults = {
         defaults = {
             cannot_be_traded_or_modified = true,
             cannot_be_traded_or_modified = true,
            is_sellable = false,
            is_drop_restricted = true,
         },
         },
        frame_type = 'currency',
     },
     },
     ['IncursionItem'] = {
     ['IncursionItem'] = {
        defaults = {
            is_sellable = false,
        },
        frame_type = 'currency',
    },
    ['DelveStackableSocketableCurrency'] = {
        defaults = {
            is_drop_restricted = true,
        },
         frame_type = 'currency',
         frame_type = 'currency',
     },
     },
     ['IncubatorStackable'] = {
     ['IncubatorStackable'] = {
        tables = {'incubators'},
        args = {'incubator_effect'},
         defaults = {
         defaults = {
             is_drop_restricted = true,
             is_drop_restricted = true,
         },
         },
         frame_type = 'currency',
         frame_type = 'currency',
    },
    ['AtlasUpgradeItem'] ={
        args = {'description'},
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'quest',
    },
    ['HeistContract'] = {
        defaults = {
            is_drop_restricted = true,
        },
    },
    ['HeistBlueprint'] = {
        defaults = {
            is_drop_restricted = true,
        },
    },
    ['MemoryLine'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['Relic'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['SanctumSpecialRelic'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
            is_account_bound = true,
        },
    },
    ['Breachstone'] = {
        defaults = {
            is_drop_restricted = true,
        },
     },
     },
     ['HarvestSeed'] = {
     ['HarvestSeed'] = {
         tables = {'harvest_seeds'},
         tables = {'harvest_seeds'},
         args = {'seed_effect', 'seed_type_id', 'seed_effect', 'seed_type', 'seed_type_html', 'seed_tier', 'seed_growth_cycles', 'seed_required_nearby_seed_tier', 'seed_required_nearby_seed_amount', 'seed_consumed_wild_lifeforce_percentage', 'seed_consumed_vivid_lifeforce_percentage', 'seed_consumed_primal_lifeforce_percentage', 'seed_granted_craft_option_ids'},
         args = {'seed_effect', 'seed_type_id', 'seed_effect', 'seed_type', 'seed_type_html', 'seed_tier', 'seed_growth_cycles', 'seed_required_nearby_seed_tier', 'seed_required_nearby_seed_amount', 'seed_consumed_wild_lifeforce_percentage', 'seed_consumed_vivid_lifeforce_percentage', 'seed_consumed_primal_lifeforce_percentage', 'seed_granted_craft_option_ids'},
        defaults = {
            is_in_game = false,
        },
         frame_type = 'currency',
         frame_type = 'currency',
     },
     },
Line 756: Line 775:
         args = {'plant_booster_radius', 'plant_booster_lifeforce', 'plant_booster_additional_crafting_options', 'plant_booster_extra_chances'},
         args = {'plant_booster_radius', 'plant_booster_lifeforce', 'plant_booster_additional_crafting_options', 'plant_booster_extra_chances'},
         defaults = {
         defaults = {
             is_sellable = false,
             is_in_game = false,
         },
         },
         frame_type = 'currency',
         frame_type = 'currency',
Line 762: Line 781:
     ['AtlasRegionUpgradeItem'] = {
     ['AtlasRegionUpgradeItem'] = {
         defaults = {
         defaults = {
             help_text = cfg.i18n.help_text_defaults.watchstone,
             is_in_game = false,
         },
         },
     },
     },
    ['SentinelDrone'] = {
        tables = {'sentinels'},
        args = {'sentinel_duration', 'sentinel_empowers', 'sentinel_empowerment', 'sentinel_charge', 'sentinel_monster', 'sentinel_monster_level'},
        defaults = {
            is_in_game = false,
            is_unmodifiable = true,
        },
    },
    ['Tincture'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['ItemisedCorpse'] = {
        tables = {'corpse_items'},
        args = {'corpse_tier', 'monster_category', 'monster_category_html', 'monster_abilities'},
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'currency',
    },
    ['AnimalCharm'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['NecropolisPack'] = {
        tables = {'allflame_embers'},
        args = {'description', 'pack_id', 'pack_min_size', 'pack_max_size', 'pack_leader_chance'},
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'necropolis',
    }
}
}


Line 772: Line 827:
         name = 'League-specific',
         name = 'League-specific',
         page = 'League-specific item',
         page = 'League-specific item',
        cat = 'League-specific items',
     },
     },
     ['fishing'] = {
     ['fishing'] = {
Line 780: Line 836:
         name = 'Experimented base type',
         name = 'Experimented base type',
         page = 'Experimented base type',
         page = 'Experimented base type',
        cat = 'Experimented base types',
     },
     },
     ['ritual base type'] = {
     ['ritual base type'] = {
         name = 'Ritual base type',
         name = 'Ritual base type',
         page = 'Ritual base type',
         page = 'Ritual base type',
        cat = 'Ritual base types',
     },
     },
     ['runic base type'] = {
     ['runic base type'] = {
         name = 'Runic base type',
         name = 'Runic base type',
         page = 'Runic base type',
         page = 'Runic base type',
        cat = 'Runic base types',
    },
    ['corruption transformation'] = {
        name = 'Corruption transformation',
        page = 'Corruption transformation',
     },
     },
}
}
Line 796: Line 859:
     }
     }
end
end
-- Prophecy stuff
cfg.prophecy_base_item = 'Prophecy'
cfg.prophecy_base_item_page = 'Prophecy'


--
--
Line 807: Line 866:
-- An item's base level requirement is waived unless it is at least this value.
-- An item's base level requirement is waived unless it is at least this value.
cfg.base_item_required_level_threshold = 5
cfg.base_item_required_level_threshold = 5
-- Item classes that may have their level requirement waived
cfg.base_item_required_level_threshold_classes = m_util.table.merge(
    cfg.class_groups.weapons.keys,
    cfg.class_groups.armor.keys
)


-- Modifiers contribute this much of their level requirement to an item's level requirement.
-- Modifiers contribute this much of their level requirement to an item's level requirement.

Latest revision as of 19:14, 7 April 2024

This is the module sandbox page for Module:Item2/config (diff).

Module documentation[view] [edit] [history] [purge]


Lua logo

This module depends on the following other modules:

This is the configuration file for Module:Item2. This file can be edited to allow easy translation/porting of the module to other wikis.


-------------------------------------------------------------------------------
-- 
-- Configuration for Module:Item2 and submodules
-- 
-------------------------------------------------------------------------------

local m_util = require('Module:Util')

local m_game = mw.loadData('Module:Game')

local cfg = {}

-- ----------------------------------------------------------------------------
-- i18n
-- ----------------------------------------------------------------------------

cfg.i18n = {}

--
-- Main
--

cfg.i18n.files = {
    inventory_icon = 'File:%s inventory icon.png',
    status_icon = 'File:%s status icon.png',
    divination_card_art = 'File:%s card art.png',
    divination_card_background = 'File:Divination card bg %s.webm',
}

cfg.i18n.templates = {
    cargo_attach = 'Template:Item/cargo/%s/attach',
}

cfg.i18n.gem_tag_category = '[[:Category:%s (gem tag)|%s]]'

cfg.i18n.categories = {
    -- maintenance cats
    improper_modifiers = 'Items with improper modifiers',
    missing_release_version = 'Items without a release version',
    invalid_recipe_parts = 'Items with invalid recipe parts', 
    duplicate_recipes = 'Items with duplicate recipes',
    duplicate_query_area_ids = 'Items with duplicate area ids from queries',
    base_items = 'Base items',
    derived_items = 'Derived items',
    sell_prices_override = 'Items with sell prices overrides',
    automatic_recipes_disabled = 'Items with automatic recipes disabled',
    legacy_drop_areas = 'Items using legacy map areas as drop restrictions',
    deprecated_parameters = 'Pages using deprecated parameters for item module',
    deprecated_skill_parameters = 'Pages using deprecated parameters for skill data',

    -- regular cats
    alternate_artwork = 'Items with alternate artwork',
    implicit_modifier_override = 'Items with implicit modifier overrides',
    
    -- subcategories
    unique_affix = 'Unique %s',
    prophecies = 'Prophecies',
    oils = 'Oils',
    talismans = 'Talismans',
    essences = 'Essences',
    fossils = 'Fossils',
    scarabs = 'Scarabs',
    tattoos = 'Tattoos',
    delirium_orbs = 'Delirium orbs',
    catalysts = 'Catalysts',
    maps_by_series = '%s series maps',

    -- misc
    gem_tag_affix = '%s (gem tag)',
}

cfg.i18n.stat_skip_patterns = {
    maps = {
        '%d+%% increased Quantity of Items found in this Area',
        '%d+%% increased Rarity of Items found in this Area',
        '%+%d+%% Monster pack size',
        -- ranges
        '%(%d+%-%d+%)%% increased Quantity of Items found in this Area',
        '%(%d+%-%d+%)%% increased Rarity of Items found in this Area',
        '%+%(%d+%-%d+%)%% Monster pack size',
    },
    jewels = {
        'Limited to %d+ %(Hidden%)',
        'Jewel has a radius of %d+ %(Hidden%)',
    },
}

-- Used by the item info box
cfg.i18n.tooltips = {
    corrupted = 'Corrupted',
    mirrored = 'Mirrored',
    unmodifiable = 'Unmodifiable',
    support_icon = 'Icon: %s',
    radius = 'Radius: %s',
    cost = 'Cost: %s',
    reservation = 'Reservation: %s',
    cost_multiplier = 'Cost &amp; Reservation Multiplier: %s',
    vaal_souls_per_use = 'Souls Per Use: %s',
    stored_uses = 'Can Store %s Use(s)',
    stored_uses_singular = 'Can Store %s Use',
    stored_uses_plural = 'Can Store %s Uses',
    vaal_soul_gain_prevention_time = 'Soul Gain Prevention: %s',
    cooldown_time = 'Cooldown Time: %s',
    cast_time = 'Cast Time: %s',
    use_time = 'Use Time: %s',
    instant_cast_time = 'Instant',
    attack_time = 'Attack Time: %s',
    critical_strike_chance = 'Critical Strike Chance: %s',
    attack_speed_multiplier = 'Attack Speed: %s',
    damage_multiplier = 'Attack Damage: %s',
    of_base_stat = 'of base',
    damage_effectiveness = 'Effectiveness of Added Damage: %s',
    projectile_speed = 'Projectile Speed: %s',
    aoe_radius = 'AoE Radius: %s',
    quality = 'Quality: %s',
    physical_damage = 'Physical Damage: %s',
    elemental_damage = 'Elemental Damage: %s',
    chaos_damage = 'Chaos Damage: %s',
    attacks_per_second = 'Attacks per Second: %s',
    weapon_range = 'Weapon Range: %s',
    map_level = 'Map Level: %s',
    map_tier = 'Map Tier: %s',
    map_guild_character = m_util.html.abbr('Guild Character', 'When used in guild creation, this map can be used for the listed character') .. ': %s',
    item_quantity = 'Item Quantity: %s',
    item_rarity = 'Item Rarity: %s',
    monster_pack_size = 'Monster Pack Size: %s',
    limited_to = 'Limited to: %s',
    flask_mana_recovery = 'Recovers %s Mana over %s Seconds',
    flask_life_recovery = 'Recovers %s Life over %s Seconds',
    flask_duration = 'Lasts %s Seconds',
    flask_charges_per_use = 'Consumes %s of %s Charges on use',
    chance_to_block = 'Chance to Block: %s',
    armour = 'Armour: %s',
    evasion = 'Evasion: %s',
    energy_shield = 'Energy Shield: %s',
    ward = 'Ward: %s',
    movement_speed = 'Movement Speed: %s',
    talisman_tier = 'Talisman Tier: %s',
    stack_size = 'Stack Size: %s',
    essence_level = 'Essence Tier: %s',
    blight_item_tier = 'Oil Tier: %s',
    monster_category = 'Monster Category: %s',
    pack_size = 'Pack Size: %s Monsters',
    pack_contains_pack_leader = string.format('Pack contains %s', m_util.html.poe_color('value', 'Pack Leader')),
    pack_chance_to_contain_pack_leader = string.format('Pack chance to contain %s: %%s', m_util.html.poe_color('value', 'Pack Leader')),
    requires = 'Requires %s',
    level_inline = 'Level %s',
    level = 'Level: %s',
    gem_quality_effect_bonus = 'Additional Effects From 1-20%% Quality: <br> %s',
    variations = 'Variations',
    cannot_be_traded_or_modified = 'Cannot be traded or modified',
    account_bound = 'Account-bound',

    -- Tattoos
    tattoo_target = 'Replaces a %s Passive Skill',
    tattoo_limit = 'Limited to: %s',
    tattoo_min_adjacent = 'Requires %s adjacent Passive Skills Allocated',
    tattoo_max_adjacent = 'Requires %s adjacent Passive Skill Allocated',
    tattoo_maximum = 'maximum',
    
    -- harvest seeds
    seed_tier = 'Seed Tier: %s',
    seed_monster = 'Spawns a level ? Monster when Harvested',
    seed_lifeforce_gained = 'Provides ? Units of Raw %s Lifeforce when Harvested',
    seed_growth_cycles = 'Can be Harvested after %s Growth Cycles',
    
    seed_lifeforce_consumed = 'Consumes (%s%%) %s Units of Condensed Lifeforce per Growth Cycle',
    seed_required_seeds = 'Requires %s Adjacent %s Seeds of at least Tier %s to Grow',
    
    -- harvest plant boosters, not used at the moment
    plant_booster_extra_chances = 'Seeds in radius give the rarest of %s chosen Crafting Options when Harvested',
    plant_booster_lifeforce = 'Seeds in radius produce %s more Lifeforce when Harvested',
    plant_booster_additional_crafting_optioons = 'Seeds in radius have %s chance to generate additional Crafting Options when Harvested',
    
    -- heist
    heist_required_npc = 'This item can be equipped by: %s',
    heist_required_job = 'Requires %s in %s',
    heist_any_job = 'Any job',

    -- sentinels
    sentinel_duration = 'Duration: %s seconds',
    sentinel_empowers = 'Empowers: %s enemies',
    sentinel_empowerment = 'Empowerment: %s',
    sentinel_charge = 'Charge: %s uses',
    sentinel_can_only_empower = 'Can only Empower %s (Level %s)',
    
    random_mod = '&lt;&lt;random modifier %s&gt;&gt;',
    
    --
    -- secondary infobox
    --
    extra_info = 'Additional Information',
    header_overall = 'Region Upgrades Chart',
    header_upgrades = 'Upgrade Level',
    header_map_tier = 'Tier',
    header_map_level = 'Map Level',
    header_connections = 'Connections',
    
    acquisition = 'Acquisition',
    not_in_game = 'Not in game',
    drop_level = 'Drop level: %s',
    drop_disabled = '[[Drop disabled]]',
    drop_restricted = '[[Drop-restricted item|Drop restricted]]',
    seal_cost = 'Seal cost: %s',
    
    purchase_costs = m_util.html.abbr('Vendor Prices', 'Cost of purchasing this item from an NPC vendor when it is available in their inventory'),
    sell_price = m_util.html.abbr('Vendor Offer', 'Offer given by an NPC vendor in exchange for this item when it is not used in a vendor recipe'),
    default_vendor_offer = 'Scroll Fragment',
    
    damage_per_second = 'Weapon DPS',
    physical_dps = 'Physical: %s',
    fire_dps = 'Fire: %s',
    cold_dps = 'Cold: %s',
    lightning_dps = 'Lightning: %s',
    chaos_dps = 'Chaos: %s',
    elemental_dps = 'Elemental: %s',
    poison_dps = 'Phys+Chaos: %s',
    dps = 'Total: %s',
    
    metadata = 'Metadata',
    item_class = 'Item class: %s',
    metadata_id = 'Metadata ID: %s',
}

-- Default inventory icons for certain types of items
-- Used with cfg.i18n.files.inventory_icon
cfg.i18n.default_inventory_icons = {
    ['DivinationCard'] = 'Divination card',
    ['is_prophecy'] = 'Prophecy',
}

-- Keys are item class ids
cfg.i18n.item_class_map = {
    ['Staff'] = 'Staff',
    ['Bow'] = 'Bow',
    ['Wand'] = 'Wand',
    ['Two Hand Axe'] = 'Two Handed Axe',
    ['Two Hand Sword'] = 'Two Hand Sword',
    ['Two Hand Mace'] = 'Two Hand Mace',
    ['Warstaff'] = 'Warstaff',
    ['Sceptre'] = 'Sceptre',
    ['One Hand Mace'] = 'One Handed Mace',
    ['One Hand Axe'] = 'One Handed Axe',
    ['One Hand Sword'] = 'One Handed Sword',
    ['Thrusting One Hand Sword'] = 'One Handed Sword',
    ['Claw'] = 'Claw',
    ['Dagger'] = 'Dagger',
    ['Rune Dagger'] = 'Rune Dagger',
    ['FishingRod'] = 'Fishing Rod',
    ['HideoutDoodad'] = 'Hideout Item',
    ['AbyssJewel'] = 'Abyss',
}

-- Formatting
cfg.i18n.fmt = {
    standard_damage_range = '%s-%s',
    variable_damage_range = '%s&nbsp;to&nbsp;%s',
    item_count = '%d×',
}

cfg.i18n.debug = {
    invalid_argument_key = 'Invalid key or missing data for "%s"',
    base_item_field_not_found = 'Base item property not found: %s.%s',
    field_value_mismatch = 'Value for argument "%s" is set to something else then default: %s',
}

cfg.i18n.errors = {
    missing_base_item = 'Rarity is set to above normal, but base item is not set. A base item for rarities above normal is required!',
    duplicate_base_items = 'More then one result found for the specified base item. Consider using base_item_page or base_item_id to narrow down the results.',
    base_item_not_found = 'Base item could not be found in the database. Check for spelling mistakes or whether the base item page exists on the wiki. If the base item page exists on the wiki, but it can not be found please null-edit the page.',
    base_item_wrong_rarity = 'The specified base item must be normal rarity',
    invalid_acquisition_tag = '%s is not a valid acquisition tag',
    invalid_tag = '%s is not a valid tag',
    generic_argument_parameter = 'Unrecognized %s parameter "%s"',
    generic_required_parameter = 'The "%s" parameter is required.',
    non_unique_flag = 'Only unique items can are egible for the flag "%s".',
    duplicate_metadata = 'Duplicate metadata id "%s" on page "%s"',
    invalid_influence = 'The influence "%s" is invalid. Acceptable values are "shaper", "elder", "crusader", "redeemer", "hunter" and "warlord".',
    invalid_class_id = 'The item class id "%s" is invalid. Using the correct item class id is required for the template to work correctly.',
    invalid_rarity_id = 'The rarity id "%s" is invalid. Acceptable values are "normal", "magic", "rare" and "unique".',
    invalid_region_upgrade_count = 'atlas_connection%s_tier: Invalid amount (%s) of connections, only 5 are allowed',
    no_results_found = 'No results found',
    invalid_gem_tag = '%s is not a valid gem tag',
    invalid_cosmetic_type = '%s is not a valid cosmetic type',
    invalid_monster_category = '%s is not a valid monster category',
}

--
-- Recipes
--

cfg.i18n.recipes = {
    -- Item names
    agate_amulet = 'Agate Amulet',
    unset_ring = 'Unset Ring',
    gold_ring = 'Gold Ring',
    prismatic_ring = 'Prismatic Ring',
    two_stone_ring = 'Two-Stone Ring',
    crystal_sceptre = 'Crystal Sceptre',
    rustic_sash = 'Rustic Sash',
    ['Leather Belt'] = 'Leather Belt',
    nightmare_bascinet = 'Nightmare Bascinet',
    timeless_jewel = 'Timeless Jewel',
    granite_flask = 'Granite Flask',
    precursors_emblem = 'Precursor\'s Emblem',
    grand_spectrum = 'Grand Spectrum',

    ['Forge of the Phoenix Map'] = 'Forge of the Phoenix Map',
    ['Lair of the Hydra Map'] = 'Lair of the Hydra Map',
    ['Maze of the Minotaur Map'] = 'Maze of the Minotaur Map',
    ['Pit of the Chimera Map'] = 'Pit of the Chimera Map',
    ['Vaal Temple Map'] = 'Vaal Temple Map',
    ['Synthesised Map'] = 'Synthesised Map',

    -- Namesakes
    atziri = 'Atziri',
    doedre = 'Doedre',
    shavronne = 'Shavronne',
    rigwald = 'Rigwald',
    lioneye = 'Lioneye',
    farrul = 'Farrul',
    fenumus = 'Fenumus',
    saqawal = 'Saqawal',
    craiceann = 'Craiceann',
    chayula = 'Chayula',
    maven = 'Maven',

    -- Strings used in notes
    divination_card_set_exchange = 'Divination card set exchange: %s',
    incubation = 'Incubation: %s',

    item = 'item',
    shield = 'shield',
    map = 'map',
    gem = 'gem',
    belt = 'belt',
    armour = 'armour',
    weapon = 'weapon',
    sword = 'sword',
    jewellery = 'jewellery',
    axe = 'axe',
    flask = 'flask',
    amulet = 'amulet', 
    ring = 'ring',
    wand = 'wand',
    staff = 'staff',
    claw = 'claw',
    dagger = 'dagger',
    sceptre = 'sceptre',
    bow = 'bow',
    gloves = 'gloves',
    boots = 'boots',
    jewel = 'jewel',
    talisman = 'talisman',
    tier_1_talisman = 'tier 1 talisman',
    breachstone_splinter = 'breachstone splinter',
    breachstone = 'breachstone',
    scarab = 'scarab',
    gilded_scarab = '"Gilded" tier scarab',
    winged_scarab = '"Winged" tier scarab',
    essence = 'essence',
    deafening_essence = '"Deafening" (tier 7) essence',
    shrieking_essence = '"Shrieking" (tier 6) essence',
    harbinger_fragment = 'Harbinger unique item piece',
    divination_card = 'divination card',
    body_armour = 'body armour',
    one_hand_weapon = 'one-handed weapon',
    two_hand_weapon = 'two-handed weapon',
    league_specific_item = 'league-specific item',
    quality_currency = 'quality currency',
    fossil = 'fossil',
    scouting_report = 'scouting report',
    fragment = 'fragment',
    sacrifice_fragment = 'Sacrifice fragment',
    mortal_fragment = 'Mortal fragment',
    uber_elder_fragment = 'Uber Elder fragment',
    helmet = 'helmet',
    delirium_orb = 'delirium orb',
    shaper_guardian_map = 'Shaper Guardian map',
    vial = 'vial',
    blueprint = 'blueprint',
    incubator = 'incubator',
    oil = 'oil',
    experimented_base_type = 'experimented base type',
    experimented_two_hand_weapon = 'experimented two-handed weapon',

    corrupted = m_util.html.poe_color('corrupted', 'corrupted'),
    unidentified_corrupted = m_util.html.poe_color('corrupted', 'unidentified corrupted'),
    two_implicit_corrupted = m_util.html.poe_color('corrupted', 'two-implicit corrupted'),
    one_or_two_implicit_corrupted = m_util.html.poe_color('corrupted', '1-2 implicit corrupted'),
    life = 'life',
    primordial = 'Primordial',
    fishing = 'fishing',
    replica = 'replica',
    support = 'support',
    awakened_support = 'awakened support',
    
    -- used within essences
    essence_plus_one_level = string.format('+1 tier %s outcome', m_util.html.poe_color('corrupted', 'corruption')),
    essence_type_change = string.format('type change %s outcome', m_util.html.poe_color('corrupted', 'corruption')),

    -- The Void
    the_void = 'Random divination card set exchange',
}

-- formatters
cfg.i18n.recipes.fmt = {
    item_level_x = 'item level %i %s',
    corrupted_x = string.format('%s %%s', cfg.i18n.recipes.corrupted),

    random = 'Random %s',
    random_corrupted = string.format('Random %s %%s', cfg.i18n.recipes.corrupted),
    random_unidentified_corrupted = string.format('Random %s %%s', cfg.i18n.recipes.unidentified_corrupted),
    random_corrupted_implicit = string.format('Random %s %%s &ndash; implicit: %%s', cfg.i18n.recipes.corrupted),
    random_two_implicit_corrupted = string.format('Random %s %%s', cfg.i18n.recipes.two_implicit_corrupted),
    random_one_or_two_implicit_corrupted = string.format('Random %s %%s', cfg.i18n.recipes.one_or_two_implicit_corrupted),
    random_two_implicit_corrupted_two_influenced_item_level_x = string.format('Random %s level %%i %%s', cfg.i18n.recipes.two_implicit_corrupted),
    random_item_level_x = 'Random item level %i %s',
    random_x_quality = 'Random %s with %i%% quality',
    random_x_link = 'Random %i-link %s',
    random_x_link_item_level_y = 'Random %i-link item level %i %s',
    random_x_link_item_level_y_random_influenced = 'Random %i-link item level %i influenced %s',
    random_x_amount = 'Random %s x%i',
    random_influenced = 'Random influenced %s',
    random_influenced_x_elevated = 'Random influenced %s with elevated affix',
    random_shaper = 'Random Shaper-influenced %s',
    random_shaper_item_level_x = 'Random Shaper influenced item level %i %s',
    random_elder_item_level_x = 'Random Elder influenced item level %i %s',
    random_shaper_hunter_item_level_x = 'Random Shaper and Hunter influenced item level %i %s',
    random_two_influenced_x = 'Random double-influenced %s',
    random_two_influenced_item_level_x = 'Random double-influenced item level %i %s',
    random_two_veiled = 'Random double-veiled %s',
    random_labyrinth_enchantment = string.format('Random %%s with a %s', m_util.html.poe_color('enchanted', 'Labyrinth enchantment')),
    random_eternal_labyrinth_enchantment = string.format('Random %%s with an %s', m_util.html.poe_color('enchanted', 'Eternal Labyrinth enchantment')),
    random_three_synthesised_item_level_x = string.format('Random %s item level %%i %%s', m_util.html.poe_color('enchanted', 'three-implicit synthesised')),
    random_fractured_item_level_x = string.format('Random %s item level %%i %%s', m_util.html.poe_color('fractured', 'fractured')),

    tier_x = 'tier %i %s',
    tier_x_map = 'tier %i map',
    tier_x_to_y_map = 'tier %i–%i map',
    tier_x_map_with_y_modifiers = 'tier %i map with %i modifiers',
    map_with_x_percent_delirium = '%s with %i%% delirium',
    the_price_of_protection = '%s with 8 modifiers and occupied by an Elder Guardian',
    triskaidekaphobia = '%s with 8 modifiers, 13%% quality and 100%% delirium',

    fully_revealed_x_area_level_y = '%s with area level %i, fully revealed',

    level_x_gem = 'level %i gem',
    level_x_trans_gem = 'level %i transfigured gem',
    level_x_y_gem = 'level %i %s gem',
    gem_quality = 'gem with 1–20% quality',
    gem_x_quality = 'gem with %i%% quality',
    x_gem = '%s gem',
    x_gem_quality = '%s gem with 1–20%% quality',
    x_gem_y_quality = '%s gem with %i%% quality',
    level_x_trans_gem_y_quality = 'level %i transfigured gem with %i%% quality',
    level_x_y_gem_z_quality = 'level %i %s gem with %i%% quality',
    level_x_trans_y_gem_z_quality = 'level %i transfigured %s gem with %i%% quality',
    
    x_item = '%s item',
}

--[[cfg.i18n.recipes.misc = {
    upgraded_from_map = 'Lower tier map upgrades randomly into a directly connected higher tier map.',
}--]]

cfg.i18n.recipes.errors = {
    missing_amount = 'Item amount is missing or not a number (%s)',
    invalid_recipe_parts = 'Item reference in %1$s is broken (value: %2$s)',
    duplicate_recipes = 'Automatic recipe is duplicated on page in recipe%s',
}

-- ----------------------------------------------------------------------------
-- Constants
-- ----------------------------------------------------------------------------

cfg.image_size = 39

cfg.image_size_full = cfg.image_size * 2

-- Notes:
--  inventory_icon must always be before alternate_art_inventory_icons 
--  drop_areas after tags
cfg.default_args = {
    'is_in_game',
    'rarity_id', 'rarity', 'name', 'name_list', 'size_x', 'size_y',
    'drop_rarities_ids', 'drop_enabled', 'drop_level', 'drop_level_maximum', 'drop_text', 'required_level', 'required_level_final',
    'flavour_text', 'flavour_text_id',
    'cannot_be_traded_or_modified', 'help_text', 'is_account_bound', 'tags', 'metadata_id',
    'influences', 'is_fractured', 'is_synthesised', 'is_searing_exarch_item', 'is_eater_of_worlds_item', 'is_veiled', 'is_replica', 'is_corrupted', 'is_mirrored', 'is_unmodifiable',
    'purchase_costs', 'is_sellable', 'sell_prices_override',
    'drop_areas', 'drop_monsters',
    
    'acquisition_tags', 'disable_automatic_recipes',
    'suppress_improper_modifiers_category',
    
    'class',
}

-- Args to process when a particular flag is set
cfg.flagged_args = {
    is_essence = {
        args = {'essence_level_restriction', 'essence_level', 'essence_type', 'essence_category'},
    },
    is_prophecy = {
        args = {'prophecy_id', 'prediction_text', 'seal_cost', 'prophecy_objective', 'prophecy_reward'},
    },
    is_blight_item = {
        args = {'blight_item_tier'},
    },
    is_tattoo = {
        args = {'tattoo_target', 'tattoo_tribe', 'tattoo_limit', 'tattoo_min_adjacent', 'tattoo_max_adjacent', 'tattoo_skill_id'},
    },
}

-- frame_type is needed in stat_text
cfg.late_args = {
    'inventory_icon', 'alternate_art_inventory_icons', 'frame_type',
    'is_drop_restricted', 'drop_areas_html',
    'implicit_stat_text', 'explicit_stat_text', 'stat_text',
}

cfg.tables = {'items'}

-- Certain item classes are grouped together
cfg.class_groups = {
    flasks = {
        keys = {['LifeFlask'] = true, ['ManaFlask'] = true, ['HybridFlask'] = true, ['UtilityFlask'] = true},
        tables = {'flasks'},
        args = {'quality', 'flask_duration', 'charges_max', 'charges_per_use'},
    },
    weapons = {
        keys = {['Claw'] = true, ['Dagger'] = true, ['Wand'] = true, ['One Hand Sword'] = true, ['Thrusting One Hand Sword'] = true, ['One Hand Axe'] = true, ['One Hand Mace'] = true, ['Bow'] = true, ['Staff'] = true, ['Two Hand Sword'] = true, ['Two Hand Axe'] = true, ['Two Hand Mace'] = true, ['Sceptre'] = true, ['FishingRod'] = true, ['Rune Dagger'] = true, ['Warstaff'] = true},
        tables = {'weapons'},
        args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'critical_strike_chance', 'attack_speed', 'physical_damage_min', 'physical_damage_max', 'lightning_damage_min', 'lightning_damage_max', 'cold_damage_min', 'cold_damage_max', 'fire_damage_min', 'fire_damage_max', 'chaos_damage_min', 'chaos_damage_max', 'weapon_range'},
        late_args = {'physical_damage_html', 'fire_damage_html', 'cold_damage_html', 'lightning_damage_html', 'chaos_damage_html', 'damage_avg', 'damage_html'},
    },
    gems = {
        keys = {['Active Skill Gem'] = true, ['Support Skill Gem'] = true},
        tables = {'skill_gems'},
        args = {'gem_description', 'dexterity_percent', 'strength_percent', 'intelligence_percent', 'primary_attribute', 'gem_tags'},
    },
    armor = {
        keys = {['Gloves'] = true, ['Boots'] = true, ['Body Armour'] = true, ['Helmet'] = true, ['Shield'] = true},
        tables = {'armours'},
        args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'armour_min', 'armour_max', 'evasion_min', 'evasion_max', 'energy_shield_min', 'energy_shield_max', 'ward_min', 'ward_max', 'movement_speed'},
    },
    stackable = {
        keys = {['StackableCurrency'] = true, ['DivinationCard'] = true, ['DelveStackableSocketableCurrency'] = true, ['IncubatorStackable'] = true, ['MapFragment'] = true, ['Breachstone'] = true, ['HarvestSeed'] = true, ['HarvestPlantBooster'] = true},
        tables = {'stackables'},
        args = {'stack_size', 'stack_size_currency_tab', 'description'},
    },
    heist_equipment = {
        keys = {['HeistEquipmentWeapon'] = true, ['HeistEquipmentTool'] = true, ['HeistEquipmentUtility'] = true, ['HeistEquipmentReward'] = true},
        tables = {'heist_equipment'},
        args = {'heist_required_job_id', 'heist_required_job_level', 'heist_data'},
    },
    jewellery = {
        keys = {['Amulet'] = true, ['Ring'] = true, ['Belt'] = true},
    },
    jewels = {
        keys = {['Jewel'] = true, ['AbyssJewel'] = true},
    },
}

-- Parameters for specific item classes
cfg.class_specifics = {
    ['Amulet'] = {
        tables = {'amulets'},
        args = {'is_talisman', 'talisman_tier'},
    },
    ['LifeFlask'] = {
        args = {'flask_life'},
    },
    ['ManaFlask'] = {
        args = {'flask_mana'},
    },
    ['HybridFlask'] = {
        args = {'flask_life', 'flask_mana'},
    },
    ['UtilityFlask'] = {
        tables = {'item_buffs'},
        args = {'buff_id', 'buff_values', 'buff_stat_text', 'buff_icon'},
    },
    ['Active Skill Gem'] = {
        args = {'is_vaal_skill_gem', 'vaal_variant_id'},
        frame_type = 'gem',
    },
    ['Support Skill Gem'] = {
        args = {
            'support_gem_letter', 'support_gem_letter_html',
            'is_awakened_support_gem', 'awakened_variant_id',
        },
        frame_type = 'gem',
    },
    ['Shield'] = {
        tables = {'shields'},
        args = {'block'},
    },
    ['Map'] = {
        tables = {'maps', 'atlas_maps'},
        args = {
            'quality', 
            
            'map_tier', 
            'map_guild_character', 
            'map_area_id', 
            'map_area_level', 
            'unique_map_area_id', 
            'unique_map_area_level', 
            'unique_map_guild_character', 
            'map_series', 
            
            'atlas_x', 
            'atlas_y',
            'atlas_region_id',
            'atlas_x0',
            'atlas_x1', 
            'atlas_x2', 
            'atlas_x3', 
            'atlas_x4', 
            'atlas_y0',
            'atlas_y1', 
            'atlas_y2', 
            'atlas_y3', 
            'atlas_y4', 
            'atlas_map_tier0',
            'atlas_map_tier1',
            'atlas_map_tier2',
            'atlas_map_tier3',
            'atlas_map_tier4',
            'atlas_connections', -- pseudo to fill connections table
        },
        skip_stat_lines = cfg.i18n.stat_skip_patterns.maps,
    },
    ['MapFragment'] = {
        args = {'is_scarab'},
    },
    ['StackableCurrency'] = {
        tables = {'essences', 'prophecies', 'blight_items', 'tattoos'},
        args = {
            'is_essence', 'is_prophecy', 'is_blight_item', 'is_tattoo',
            'is_fossil', 'is_delirium_orb', 'is_catalyst',
        },
        frame_type = 'currency',
    },
    ['Microtransaction'] = {
        tables = {'cosmetic_items'},
        args = {'description', 'cosmetic_type', 'cosmetic_target'},
        defaults = {
            is_sellable = false,
        },
        frame_type = 'currency',
    },
    ['HideoutDoodad'] = {
        tables = {'hideout_doodads'},
        args = {'is_master_doodad', 'variation_count', 'description'},
        defaults = {
            is_sellable = false,
        },
        frame_type = 'currency',
    },
    ['Jewel'] = {
        tables = {'jewels'},
        args = {'jewel_limit'},
        late_args = {'jewel_radius_html'},
        skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
    },
    ['AbyssJewel'] = {
        skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
    },
    ['QuestItem'] = {
        args = {'description'},
        defaults = {
            is_sellable = false,
        },
        frame_type = 'quest',
    },
    ['DivinationCard'] = {
        tables = {'divination_cards'},
        args = {'card_art', 'card_background'},
        frame_type = 'divicard',
    },
    ['LabyrinthItem'] = {
        defaults = {
            is_sellable = false,
        },
        frame_type = 'currency',
    },
    ['LabyrinthTrinket'] = {
        tables = {'item_buffs'},
        args = {'description', 'buff_icon'},
        defaults = {
            is_sellable = false,
        },
        frame_type = 'currency',
    },
    ['PantheonSoul'] = {
        defaults = {
            cannot_be_traded_or_modified = true,
            is_sellable = false,
            is_drop_restricted = true,
        },
        frame_type = 'currency',
    },
    ['IncursionItem'] = {
        defaults = {
            is_sellable = false,
        },
        frame_type = 'currency',
    },
    ['DelveStackableSocketableCurrency'] = {
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'currency',
    },
    ['IncubatorStackable'] = {
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'currency',
    },
    ['AtlasUpgradeItem'] ={
        args = {'description'},
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'quest',
    },
    ['HeistContract'] = {
        defaults = {
            is_drop_restricted = true,
        },
    },
    ['HeistBlueprint'] = {
        defaults = {
            is_drop_restricted = true,
        },
    },
    ['MemoryLine'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['Relic'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['SanctumSpecialRelic'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
            is_account_bound = true,
        },
    },
    ['Breachstone'] = {
        defaults = {
            is_drop_restricted = true,
        },
    },
    ['HarvestSeed'] = {
        tables = {'harvest_seeds'},
        args = {'seed_effect', 'seed_type_id', 'seed_effect', 'seed_type', 'seed_type_html', 'seed_tier', 'seed_growth_cycles', 'seed_required_nearby_seed_tier', 'seed_required_nearby_seed_amount', 'seed_consumed_wild_lifeforce_percentage', 'seed_consumed_vivid_lifeforce_percentage', 'seed_consumed_primal_lifeforce_percentage', 'seed_granted_craft_option_ids'},
        defaults = {
            is_in_game = false,
        },
        frame_type = 'currency',
    },
    ['HarvestPlantBooster'] = {
        tables = {'harvest_plant_boosters'},
        args = {'plant_booster_radius', 'plant_booster_lifeforce', 'plant_booster_additional_crafting_options', 'plant_booster_extra_chances'},
        defaults = {
            is_in_game = false,
        },
        frame_type = 'currency',
    },
    ['AtlasRegionUpgradeItem'] = {
        defaults = {
            is_in_game = false,
        },
    },
    ['SentinelDrone'] = {
        tables = {'sentinels'},
        args = {'sentinel_duration', 'sentinel_empowers', 'sentinel_empowerment', 'sentinel_charge', 'sentinel_monster', 'sentinel_monster_level'},
        defaults = {
            is_in_game = false,
            is_unmodifiable = true,
        },
    },
    ['Tincture'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['ItemisedCorpse'] = {
        tables = {'corpse_items'},
        args = {'corpse_tier', 'monster_category', 'monster_category_html', 'monster_abilities'},
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'currency',
    },
    ['AnimalCharm'] = {
        defaults = {
            is_drop_restricted = true,
            is_unmodifiable = true,
        },
    },
    ['NecropolisPack'] = {
        tables = {'allflame_embers'},
        args = {'description', 'pack_id', 'pack_min_size', 'pack_max_size', 'pack_leader_chance'},
        defaults = {
            is_drop_restricted = true,
        },
        frame_type = 'necropolis',
    }
}

-- Acquisition tags
cfg.acquisition_tags = {
    ['league-specific'] = {
        name = 'League-specific',
        page = 'League-specific item',
        cat = 'League-specific items',
    },
    ['fishing'] = {
        name = 'Fishing',
        page = 'Fishing',
    },
    ['experimented base type'] = {
        name = 'Experimented base type',
        page = 'Experimented base type',
        cat = 'Experimented base types',
    },
    ['ritual base type'] = {
        name = 'Ritual base type',
        page = 'Ritual base type',
        cat = 'Ritual base types',
    },
    ['runic base type'] = {
        name = 'Runic base type',
        page = 'Runic base type',
        cat = 'Runic base types',
    },
    ['corruption transformation'] = {
        name = 'Corruption transformation',
        page = 'Corruption transformation',
    },
}
for k, v in pairs(m_game.constants.leagues) do
    cfg.acquisition_tags[k] = {
        name = v.name,
        page = string.format('%s league', v.name),
    }
end

--
-- Required level
--

-- An item's base level requirement is waived unless it is at least this value.
cfg.base_item_required_level_threshold = 5

-- Item classes that may have their level requirement waived
cfg.base_item_required_level_threshold_classes = m_util.table.merge(
    cfg.class_groups.weapons.keys,
    cfg.class_groups.armor.keys
)

-- Modifiers contribute this much of their level requirement to an item's level requirement.
cfg.item_required_level_modifier_contribution = 0.8

return cfg