Editing
Module
:
Abilities
Give feedback
Jump to navigation
Jump to search
Warning:
You are not logged in. Once you make an edit, a temporary account will be created for you.
Learn more
.
Log in
or
create an account
to continue receiving notifications after this account expires, and to access other features.
Anti-spam check. Do
not
fill this in!
local data = mw.loadJsonData("Data:AbilityCards.json") local raw_ability_data = mw.loadJsonData("Data:AbilityData.json") local Lang = require('Module:Lang') local p = {} -- returns the table of a specific ability from Data:AbilityCards.json function get_ability(hero_key, ability_num) local ui_data = data[hero_key] if(ui_data == nil) then return "Hero Not Found" end return ui_data[tonumber(ability_num)] end -- Returns the table of a specific ability from Data:AbilityData.json by its Key or Name -- It first attempts a direct lookup by key for efficiency. If that fails, it iterates -- through the data to find a matching Name property. -- @function find_json_ability -- @param {string} identifier - The ability's key or name -- @return {table} or nil local function find_json_ability(identifier) -- First, try a direct lookup by key (most efficient method) if raw_ability_data[identifier] then return raw_ability_data[identifier] end -- If not found by key, search for key by ability name local resource_lookup = mw.loadJsonData("Data:ResourceLookup.json") local ability_resource = resource_lookup[identifier:lower()] if (ability_resource) then return raw_ability_data[ability_resource.key] end -- If not found by either method, return nil return nil end --{{#invoke:Abilities|get_ability_name|HERO_NAME|ABILITY_NUM|lang=LANG_CODE}}-- p.get_ability_name = function(frame) local hero_name = frame.args[1] local ability_num = frame.args[2] local lang = frame.args.lang local ability = get_ability(hero_name, ability_num) if(ability == nil) then return "Ability Not Found" end if lang and lang ~= "" then return Lang.get_string(ability.Key, tostring(lang)) end return Lang.get_string(ability.Key) end -- Reverse function of get_ability_name --{{#invoke:Abilities|get_ability_number|HERO_NAME|ABILITY_NAME}}-- p.get_ability_number = function(frame) local hero_name = frame.args[1] local ability_name = frame.args[2] local ui_data = data[hero_name] if(ui_data == nil) then return "Hero Not Found" end -- Normalize input for case-insensitive comparison local normalized_input = string.lower(ability_name) -- Iterate through the hero's abilities to find matching name for ability_num, ability in pairs(ui_data) do local current_name = Lang.get_string(ability.Key) if string.lower(current_name) == normalized_input then return ability_num end end return "Ability Not Found" end --{{#invoke:Abilities|get_ability_prop|ability_key_or_name|prop}}-- p.get_ability_prop = function(frame) local ability_identifier = frame.args[1] local prop = frame.args[2] -- Use the new, more flexible lookup function local ability = find_json_ability(ability_identifier) if(ability == nil) then return "Ability Not Found" end -- Handle nested properties via dot notation (e.g., "MaxRage.Scale.Value") local element = ability if prop and prop ~= "" then for segment in string.gmatch(prop, "[^%.]+") do if type(element) ~= "table" then return "" -- Can't traverse further end element = element[segment] if element == nil then return "" end end end if element == nil then return "" end -- if the property is a table, return its Value field if type(element) == "table" then return element.Value or "" end -- otherwise return the scalar value return element end --{{#invoke:Abilities|get_ability_upgrade_prop|ability_key_or_name|upgrade_num|prop}}-- -- Gets a specific property from a specific upgrade of an ability. -- @param {string} frame.args[1] - The ability's key (e.g., "ability_afterburn") or name (e.g., "Afterburn"). -- @param {string|number} frame.args[2] - The upgrade number (1, 2, or 3). -- @param {string} frame.args[3] - The name of the property to retrieve. p.get_ability_upgrade_prop = function(frame) local ability_identifier = frame.args[1] local upgrade_num_str = frame.args[2] local prop = frame.args[3] -- Check for missing arguments if not (ability_identifier and upgrade_num_str and prop) then return "Missing Arguments" -- Or return "" end -- Find the base ability data local ability = find_json_ability(ability_identifier) if not ability then return "Ability Not Found" end -- Get the list of upgrades for this ability local upgrades = ability.Upgrades if not upgrades or type(upgrades) ~= "table" then return "No Upgrades Found" end -- Convert the upgrade number from a string to an integer local upgrade_num = tonumber(upgrade_num_str) if not upgrade_num then return "Invalid Upgrade Number" end -- Get the specific upgrade table from the list (Lua tables are 1-indexed) local upgrade = upgrades[upgrade_num] if not upgrade or type(upgrade) ~= "table" then return "Upgrade Not Found" end -- Get the desired property from the specific upgrade local element = upgrade[prop] if prop and prop ~= "" then for segment in string.gmatch(prop, "[^%.]+") do -- If upgrade is not a table, return value. If it is, check for segments if type(element) ~= "table" then return element or "" end element = element[segment] if element == nil then return "" end end end -- Otherwise, return the direct value return element end return p
Summary:
Please note that all contributions to The Deadlock Wiki are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
Deadlock:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Preview page with this template
Pages included on this page:
Module:Abilities
(
edit
)
Module:Abilities/doc
(
edit
)
Module:Abilities/doc/submodules
(
edit
)
Module:Dictionary
(
edit
)
Module:Lang
(
edit
)
Module:Utilities
(
edit
)
Data:AbilityCards.json
(
view source
) (⧼restriction-level-bot+⧽)
Data:AbilityData.json
(
view source
) (⧼restriction-level-bot+⧽)
Data:Dictionary
(
edit
)
Data:LangCodes.json
(
view source
) (⧼restriction-level-bot+⧽)
Data:Lang en.json
(
view source
) (⧼restriction-level-bot+⧽)
Data:Lang ru.json
(
edit
)
Data:ResourceLookup.json
(
edit
)
Navigation menu
Personal tools
Create account
Log in
associated-pages
Module
Discussion
English
Views
Read
Edit source
History
Tools
Search
Discord
Discord
Navigation
Main page
About us
Random page
Special pages
Recent changes
Unstable Rift
3h ago
·
~2026-IvyGankStone1157
Haze/Sounds
4h ago
·
Gammaton32
Haze/Voice lines
4h ago
·
Gammaton32
Grey Talon/Voice lines
5h ago
·
Gammaton32
Show more...
Interface Admin
Common CSS
Vector CSS
Minerva CSS
Citizen CSS
Brown theme CSS
Gadgets
Gadgets definition
Editing
How to edit
Style guide
All guides
New files
Unresolved feedback
Tools
What links here
Related changes
Page information