Path of Exile Wiki

Please consider helping keep the wiki up to date. Check the to-do list of updates needed for version 3.14.0.

Game data exports will becoming later as the technical changes in addition to regular changes take some more time.

READ MORE

Path of Exile Wiki
(Created page with "------------------------------------------------------------------------------- -- Configuration for Module:Item2 and submodules ----------------------------------------------...")
 
No edit summary
Line 1: Line 1:
 
-------------------------------------------------------------------------------
 
-------------------------------------------------------------------------------
  +
--
 
-- Configuration for Module:Item2 and submodules
 
-- Configuration for Module:Item2 and submodules
  +
--
 
-------------------------------------------------------------------------------
 
-------------------------------------------------------------------------------
   
Line 159: Line 161:
 
heist_required_job = 'Requires %s in %s',
 
heist_required_job = 'Requires %s in %s',
 
heist_any_job = 'Any job',
 
heist_any_job = 'Any job',
 
-- ClientStrings.dat -> WeaponClassDisplayName.*
 
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',
 
},
 
 
 
 
random_mod = '<<random modifier %s>>',
 
random_mod = '<<random modifier %s>>',
Line 201: Line 182:
 
 
 
damage_per_second = 'Weapon DPS',
 
damage_per_second = 'Weapon DPS',
physical_dps = m_game.constants.damage_types.physical.short_upper,
+
physical_dps = 'Physical',
fire_dps = m_game.constants.damage_types.fire.short_upper,
+
fire_dps = 'Fire',
cold_dps = m_game.constants.damage_types.cold.short_upper,
+
cold_dps = 'Cold',
lightning_dps = m_game.constants.damage_types.lightning.short_upper,
+
lightning_dps = 'Lightning',
chaos_dps = m_game.constants.damage_types.chaos.short_upper,
+
chaos_dps = 'Chaos',
 
elemental_dps = 'Elemental',
 
elemental_dps = 'Elemental',
 
poison_dps = 'Phys+Chaos',
 
poison_dps = 'Phys+Chaos',
Line 213: Line 194:
 
item_class = 'Item class: %s',
 
item_class = 'Item class: %s',
 
metadata_id = 'Metadata ID: %s',
 
metadata_id = 'Metadata ID: %s',
  +
}
  +
  +
-- 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',
 
}
 
}
   
Line 219: Line 221:
 
standard_damage_range = '%s-%s',
 
standard_damage_range = '%s-%s',
 
variable_damage_range = '%s to %s',
 
variable_damage_range = '%s to %s',
}
 
 
cfg.i18n.item_class_infobox = {
 
page = '[[Item class]]',
 
info = m_util.html.abbr('(?)', 'Item classes categorize items. Classes are often used to restrict items or skill gems to a specific class or by item filters'),
 
also_referred_to_as = 'Also referred to as:',
 
 
}
 
}
   
Line 348: Line 344:
   
 
cfg.image_size_full = c.image_size * 2
 
cfg.image_size_full = c.image_size * 2
  +
  +
-- TODO: Second pass for i18n item classes
  +
-- base item is default, but will be validated later
  +
-- Notes:
  +
-- inventory_icon must always be before alternate_art_inventory_icons
  +
-- drop_areas after tags
  +
-- is_relic after rarity
  +
cfg.default_args = {
  +
'rarity_id', 'rarity', 'name', 'name_list', 'size_x', 'size_y',
  +
'drop_rarities_ids', 'drop_rarities', 'drop_enabled', 'drop_level', 'drop_level_maximum', 'drop_leagues', 'drop_text', 'required_level', 'required_level_final',
  +
'inventory_icon', 'alternate_art_inventory_icons', 'flavour_text', 'flavour_text_id',
  +
'cannot_be_traded_or_modified', 'help_text', 'tags', 'metadata_id', 'influences', 'is_fractured', 'is_synthesised', 'is_veiled', 'is_replica', 'is_corrupted', 'is_relic', 'is_fated', 'purchase_costs', 'sell_prices_override', 'mods',
  +
'drop_areas', 'drop_areas_html', 'drop_monsters',
  +
  +
'upgraded_from_disabled',
  +
'suppress_improper_modifiers_category',
  +
  +
'is_prophecy', 'is_blight_item',
  +
  +
'class',
  +
'is_drop_restricted',
  +
}
  +
  +
-- frame_type is needed in stat_text
  +
cfg.late_args = {'frame_type', 'implicit_stat_text', 'explicit_stat_text', 'stat_text'}
  +
  +
cfg.prophecy_args = {'prophecy_id', 'prediction_text', 'seal_cost', 'prophecy_objective', 'prophecy_reward'}
  +
  +
cfg.tables = {'items'}
  +
  +
cfg.class_groups = {
  +
flasks = {
  +
tables = {'flasks'},
  +
keys = {['LifeFlask'] = true, ['ManaFlask'] = true, ['HybridFlask'] = true, ['UtilityFlask'] = true, ['UtilityFlaskCritical'] = true},
  +
args = {'quality', 'flask_duration', 'charges_max', 'charges_per_use'},
  +
},
  +
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'},
  +
late_args = {'physical_damage_html', 'fire_damage_html', 'cold_damage_html', 'lightning_damage_html', 'chaos_damage_html', 'damage_avg', 'damage_html'},
  +
},
  +
gems = {
  +
tables = {'skill_gems'},
  +
keys = {['Active Skill Gem'] = true, ['Support Skill Gem'] = true},
  +
args = {'dexterity_percent', 'strength_percent', 'intelligence_percent', 'primary_attribute', 'gem_tags'},
  +
},
  +
armor = {
  +
tables = {'armours'},
  +
keys = {['Gloves'] = true, ['Boots'] = true, ['Body Armour'] = true, ['Helmet'] = true, ['Shield'] = true},
  +
args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'armour', 'energy_shield', 'evasion', 'movement_speed'},
  +
},
  +
stackable = {
  +
tables = {'stackables'},
  +
keys = {['Currency'] = true, ['StackableCurrency'] = true, ['HideoutDoodad'] = true, ['Microtransaction'] = true, ['DivinationCard'] = true, ['DelveSocketableCurrency'] = true, ['DelveStackableSocketableCurrency'] = true, ['Incubator'] = true, ['HarvestSeed'] = true, ['HarvestPlantBooster'] = true},
  +
args = {'stack_size', 'stack_size_currency_tab', 'description', 'cosmetic_type'},
  +
},
  +
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'},
  +
},
  +
}
  +
  +
-- 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'},
  +
},
  +
['UtilityFlaskCritical'] = {
  +
tables = {'item_buffs'},
  +
args = {'buff_id', 'buff_values', 'buff_stat_text', 'buff_icon'},
  +
},
  +
['Active Skill Gem'] = {
  +
defaults = {
  +
help_text = cfg.i18n.help_text_defaults.active_gem,
  +
size_x = 1,
  +
size_y = 1,
  +
},
  +
frame_type = 'gem',
  +
},
  +
['Support Skill Gem'] = {
  +
args = {'support_gem_letter', 'support_gem_letter_html'},
  +
defaults = {
  +
help_text = cfg.i18n.help_text_defaults.support_gem,
  +
size_x = 1,
  +
size_y = 1,
  +
},
  +
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,
  +
},
  +
['Currency'] = {
  +
frame_type = 'currency',
  +
},
  +
['StackableCurrency'] = {
  +
tables = {'essences', 'prophecies', 'blight_items'},
  +
args = {'is_essence', 'essence_level_restriction', 'essence_level', 'essence_type', 'essence_category', 'blight_item_tier'},
  +
frame_type = 'currency',
  +
},
  +
['Microtransaction'] = {
  +
frame_type = 'currency',
  +
},
  +
['HideoutDoodad'] = {
  +
tables = {'hideout_doodads'},
  +
args = {'is_master_doodad', 'master', 'master_level_requirement', 'master_favour_cost', 'variation_count'},
  +
frame_type = 'currency',
  +
},
  +
['Jewel'] = {
  +
tables = {'jewels'},
  +
late_args = {'item_limit', 'jewel_radius_html'},
  +
defaults = {
  +
help_text = cfg.i18n.help_text_defaults.jewel,
  +
},
  +
skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
  +
},
  +
['AbyssJewel'] = {
  +
tables = {'jewels'},
  +
late_args = {'item_limit', 'jewel_radius_html'},
  +
skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
  +
},
  +
['QuestItem'] = {
  +
args = {'description'},
  +
frame_type = 'quest',
  +
},
  +
['DivinationCard'] = {
  +
tables = {'divination_cards'},
  +
args = {'card_art',},
  +
frame_type = 'divicard',
  +
},
  +
['LabyrinthItem'] = {
  +
frame_type = 'currency',
  +
},
  +
['LabyrinthTrinket'] = {
  +
tables = {'item_buffs'},
  +
args = {'description', 'buff_icon'},
  +
frame_type = 'currency',
  +
},
  +
['PantheonSoul'] = {
  +
defaults = {
  +
cannot_be_traded_or_modified = true,
  +
},
  +
},
  +
['IncursionItem'] = {
  +
frame_type = 'currency',
  +
},
  +
['Incubator'] = {
  +
tables = {'incubators'},
  +
args = {'incubator_effect'},
  +
frame_type = 'currency',
  +
},
  +
['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'},
  +
frame_type = 'currency',
  +
},
  +
['HarvestPlantBooster'] = {
  +
tables = {'harvest_plant_boosters'},
  +
args = {'plant_booster_radius', 'plant_booster_lifeforce', 'plant_booster_additional_crafting_options', 'plant_booster_extra_chances'},
  +
frame_type = 'currency',
  +
},
  +
}
   
 
return cfg
 
return cfg

Revision as of 22:16, 23 May 2021

Template info icon Module documentation[view] [edit] [history] [purge]

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 cfg = {}

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

cfg.i18n = {}

--
-- Main
--

cfg.i18n.inventory_icon = 'File:%s inventory icon.png'

cfg.i18n.status_icon = 'File:%s status icon.png'

cfg.i18n.divination_card_art = 'File:%s card art.png'

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 = {
    -- maintenance cats
    improper_modifiers = 'Items with improper modifiers',
    missing_release_version = 'Items without a release version',
    broken_upgraded_from_reference = 'Items with broken item references in upgraded from parameters', 
    duplicate_upgraded_from_reference = 'Items with duplicate sets in upgraded from parameters',
    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',

    -- regular cats
    alternate_artwork = 'Items with alternate artwork',

    -- misc
    gem_tag_affix = '%s (gem tag)',
    unique_affix = 'Unique %s',
    
    prophecies = 'Prophecies',
    blight_item = 'Oils',
    talismans = 'Talismans',
    essences = 'Essences',
}

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%)',
    },
}

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.',
}

-- Used by the item info box
cfg.i18n.tooltips = {
    corrupted = m_util.html.poe_color('corrupted', 'Corrupted'),
    support_icon = 'Icon: %s',
    radius = 'Radius: %s',
    mana_cost = 'Mana Cost: %s',
    mana_reserved = 'Mana Reserved: %s',
    cost = 'Cost: %s',
    reservation = 'Reservation: %s',
    mana_multiplier = 'Cost & 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',
    uses_quantity = 'uses',
    cast_time = 'Cast Time: %s',
    instant_cast_time = 'Instant',
    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',
    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',
    movement_speed = 'Movement Speed: %s',
    talisman_tier = 'Talisman Tier: %s',
    stack_size = 'Stack Size: %s',
    essence_level = 'Essence Level: %s',
    blight_item_tier = 'Oil Tier: %s',
    requires = 'Requires %s',
    level_inline = 'Level %s',
    level = 'Level: %s',
    gem_quality = 'Per 1% Quality:',
    gem_quality_1 = 'Superior',
    gem_quality_2 = 'Anomalous',
    gem_quality_3 = 'Divergent',
    gem_quality_4 = 'Phantasmal',
    variation_singular = 'Variation',
    variation_plural = 'Variations',
    favour_cost = 'Favour cost: %s',
    seal_cost = 'Seal Cost: <br>%s',
    cannot_be_traded_or_modified = 'Cannot be traded or modified',
    
    -- 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',
    
    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',
    
    drop_restrictions = 'Acquisition',
    league_restriction = m_util.html.abbr('League(s):', 'Item can be obtained in relation to these league(s)') .. ' %s',
    drop_disabled = 'DROP DISABLED',
    
    purchase_costs = m_util.html.abbr('Purchase Costs', 'Cost of purchasing an item of this type at NPC vendors. This does not indicate whether NPCs actually sell the item.'),
    sell_price = m_util.html.abbr('Sell Price', 'Items or currency received when selling this item at NPC vendors. Certain vendor recipes may override this value.'),
    
    damage_per_second = 'Weapon DPS',
    physical_dps = 'Physical',
    fire_dps = 'Fire',
    cold_dps = 'Cold',
    lightning_dps = 'Lightning',
    chaos_dps = 'Chaos',
    elemental_dps = 'Elemental',
    poison_dps = 'Phys+Chaos',
    dps = 'Total',
    
    misc = 'Miscellaneous',
    item_class = 'Item class: %s',
    metadata_id = 'Metadata ID: %s',
}

-- 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',
}

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

cfg.i18n.debug = {
    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!',
    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.',
    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.',
    invalid_league = '%s is not a recognized league',
    invalid_tag = '%s is not a valid tag',
    generic_argument_parameter = 'Unrecognized %s parameter "%s"',
    generic_required_parameter = 'Parameter "%s" must be specified for this item type.',
    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"',
    invalid_influence = 'The influence "%s" is invalid. Acceptable values are "shaper", "elder", "crusader", "redeemer", "hunter" and "warlord".',
    invalid_class = 'The item class name "%s" is invalid.',
    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',
}

--
-- Upgrade paths
--

cfg.i18n.upgrade_paths = {}

cfg.i18n.upgrade_paths = {
    -- items / rewards not covered by module game
    agate_amulet = 'Agate Amulet',
    unset_ring = 'Unset Ring',
    gold_ring = 'Gold Ring',
    prismatic_ring = 'Prismatic Ring',
    two_stone_ring = 'Two-Stone Ring',
    talisman = 'Talisman',
    tier_1_talisman = 'tier 1 talisman',
    breachstone = 'Breachstone',
    scarab = 'Scarab',
    gilded_scarab = 'Gilded Scarab',
    divination_card = 'divination card',
    deafening_essence = 'Deafening Essence',
    shrieking_essence = 'Shrieking Essence',
    essence = 'Essence',
    harbinger_fragment = 'Harbinger Fragment',
    body_armour = 'body armour',
    shield = 'Shield',
    map = 'Map',
    belt = 'Belt',
    armour = 'Armour',
    weapon = 'Weapon',
    jewellery = 'Jewellery',
    one_hand_weapon = 'one-handed weapon',
    two_hand_weapon = 'two-handed weapon',
    sword = 'Sword',
    axe = 'Axe',
    flask = 'Flask',
    amulet = 'Amulet', 
    ring = 'Ring',
    league_specific_item = 'league-specific item',
    item = 'item',
    fated_item = 'fated unique item',
    wand = 'Wand',
    staff = 'Staff',
    claw = 'Claw',
    dagger = 'Dagger',
    sceptre = 'Sceptre',
    bow = 'Bow',
    gloves = 'Gloves',
    jewel = 'Jewel',
    
    -- prefix
    life = 'Life',
    
    -- used within essences
    essence_plus_one_level = string.format('+1 level %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')),
}

-- formatters 
cfg.i18n.upgrade_paths.fmt = {
    random = 'random %s',
    random_corrupted = string.format('random %s %%s', m_util.html.poe_color('corrupted', 'corrupted')),
    random_unidentified_corrupted = string.format('random %s %%s', m_util.html.poe_color('corrupted', 'unidentified corrupted')),
    random_two_implicit_corrupted = string.format('random %s %%s', m_util.html.poe_color('corrupted', 'two-implicit corrupted')),
    random_item_level_x = 'random item level %s %s',
    random_x_link = 'random %s-link %s',
    random_x_link_item_level_y = 'random %s-link item level %s %s',
    random_x_amount = 'random %s (%sx)',
    random_shaper = 'random shaper %s',
    random_shaper_item_level_x = 'random shaper item level %s %s',
    random_elder_item_level_x = 'random elder item level %s %s',

    tier_x_map = 'tier %s map',
    level_x_gem = 'level %s gem',
    level_x_y_gem = 'level %s %s gem',
    superior_gem_q_x = 'superior gem (Q%s)',
    superior_x_gem_q_y = 'superior %s gem (Q%s)',
    
    x_item = '%s item',
}

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

cfg.i18n.upgrade_paths.errors = {
    missing_amount = 'Item amount is missing or not a number (%s)',
    upgraded_from_broken_reference = 'Item reference in %s is broken (value: %s)',
    upgraded_from_duplicate = 'Automatic upgraded from entry is duplicated on page in upgraded_from_set%s',
}

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

cfg.image_size = 39

cfg.image_size_full = c.image_size * 2

-- TODO: Second pass for i18n item classes
-- base item is default, but will be validated later
-- Notes:
--  inventory_icon must always be before alternate_art_inventory_icons 
--  drop_areas after tags
--  is_relic after rarity
cfg.default_args = {
    'rarity_id', 'rarity', 'name', 'name_list', 'size_x', 'size_y', 
    'drop_rarities_ids', 'drop_rarities', 'drop_enabled', 'drop_level', 'drop_level_maximum', 'drop_leagues',  'drop_text', 'required_level', 'required_level_final', 
    'inventory_icon', 'alternate_art_inventory_icons', 'flavour_text', 'flavour_text_id',
    'cannot_be_traded_or_modified', 'help_text', 'tags', 'metadata_id', 'influences', 'is_fractured', 'is_synthesised', 'is_veiled', 'is_replica', 'is_corrupted', 'is_relic', 'is_fated', 'purchase_costs', 'sell_prices_override', 'mods',
    'drop_areas', 'drop_areas_html', 'drop_monsters',
    
    'upgraded_from_disabled',
    'suppress_improper_modifiers_category',
    
    'is_prophecy', 'is_blight_item',
    
    'class',
    'is_drop_restricted',
}

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

cfg.prophecy_args = {'prophecy_id', 'prediction_text', 'seal_cost', 'prophecy_objective', 'prophecy_reward'}

cfg.tables = {'items'}

cfg.class_groups = {
    flasks = {
        tables = {'flasks'},
        keys = {['LifeFlask'] = true, ['ManaFlask'] = true, ['HybridFlask'] = true, ['UtilityFlask'] = true, ['UtilityFlaskCritical'] = true},
        args = {'quality', 'flask_duration', 'charges_max', 'charges_per_use'},
    },
    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'},
        late_args = {'physical_damage_html', 'fire_damage_html', 'cold_damage_html', 'lightning_damage_html', 'chaos_damage_html', 'damage_avg', 'damage_html'},
    },
    gems = {
        tables = {'skill_gems'},
        keys = {['Active Skill Gem'] = true, ['Support Skill Gem'] = true},
        args = {'dexterity_percent', 'strength_percent', 'intelligence_percent', 'primary_attribute', 'gem_tags'},
    },
    armor = {
        tables = {'armours'},
        keys = {['Gloves'] = true, ['Boots'] = true, ['Body Armour'] = true, ['Helmet'] = true, ['Shield'] = true},
        args = {'quality', 'required_dexterity', 'required_intelligence', 'required_strength', 'armour', 'energy_shield', 'evasion', 'movement_speed'},
    },
    stackable = {
        tables = {'stackables'},
        keys = {['Currency'] = true, ['StackableCurrency'] = true, ['HideoutDoodad'] = true, ['Microtransaction'] = true, ['DivinationCard'] = true, ['DelveSocketableCurrency'] = true, ['DelveStackableSocketableCurrency'] = true, ['Incubator'] = true, ['HarvestSeed'] = true, ['HarvestPlantBooster'] = true},
        args = {'stack_size', 'stack_size_currency_tab', 'description', 'cosmetic_type'},
    },
    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'},
    },
}

-- 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'},
    },
    ['UtilityFlaskCritical'] = {
        tables = {'item_buffs'},
        args = {'buff_id', 'buff_values', 'buff_stat_text', 'buff_icon'},
    },
    ['Active Skill Gem'] = {
        defaults = {
            help_text = cfg.i18n.help_text_defaults.active_gem,
            size_x = 1,
            size_y = 1,
        },
        frame_type = 'gem',
    },
    ['Support Skill Gem'] = {
        args = {'support_gem_letter', 'support_gem_letter_html'},
        defaults = {
            help_text = cfg.i18n.help_text_defaults.support_gem,
            size_x = 1,
            size_y = 1,
        },
        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,
    },
    ['Currency'] = {
        frame_type = 'currency',
    },
    ['StackableCurrency'] = {
        tables = {'essences', 'prophecies', 'blight_items'},
        args = {'is_essence', 'essence_level_restriction', 'essence_level', 'essence_type', 'essence_category', 'blight_item_tier'},
        frame_type = 'currency',
    },
    ['Microtransaction'] = {
        frame_type = 'currency',
    },
    ['HideoutDoodad'] = {
        tables = {'hideout_doodads'},
        args = {'is_master_doodad', 'master', 'master_level_requirement', 'master_favour_cost', 'variation_count'},
        frame_type = 'currency',
    },
    ['Jewel'] = {
        tables = {'jewels'},
        late_args = {'item_limit', 'jewel_radius_html'},
        defaults = {
            help_text = cfg.i18n.help_text_defaults.jewel,
        },
        skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
    },
    ['AbyssJewel'] = {
        tables = {'jewels'},
        late_args = {'item_limit', 'jewel_radius_html'},
        skip_stat_lines = cfg.i18n.stat_skip_patterns.jewels,
    },
    ['QuestItem'] = {
        args = {'description'},
        frame_type = 'quest',
    },
    ['DivinationCard'] = {
        tables = {'divination_cards'},
        args = {'card_art',},
        frame_type = 'divicard',
    },
    ['LabyrinthItem'] = {
        frame_type = 'currency',
    },
    ['LabyrinthTrinket'] = {
        tables = {'item_buffs'},
        args = {'description', 'buff_icon'},
        frame_type = 'currency',
    },
    ['PantheonSoul'] = {
        defaults = {
            cannot_be_traded_or_modified = true,
        },
    },
    ['IncursionItem'] = {
        frame_type = 'currency',
    },
    ['Incubator'] = {
        tables = {'incubators'},
        args = {'incubator_effect'},
        frame_type = 'currency',
    },
    ['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'},
        frame_type = 'currency',
    },
    ['HarvestPlantBooster'] = {
        tables = {'harvest_plant_boosters'},
        args = {'plant_booster_radius', 'plant_booster_lifeforce', 'plant_booster_additional_crafting_options', 'plant_booster_extra_chances'},
        frame_type = 'currency',
    },
}

return cfg