Module:WeaponsData: Difference between revisions
From MENACE Official Wiki
joljaycups (talk | contribs) No edit summary |
joljaycups (talk | contribs) No edit summary |
||
| Line 12: | Line 12: | ||
local DATA_FILE = "Module:Data/Weapons.json" | local DATA_FILE = "Module:Data/Weapons.json" | ||
local SCHEMA = { | --[[local SCHEMA = { | ||
NAME = "Name", | NAME = "Name", | ||
SHORTNAME = "ShortName", | SHORTNAME = "ShortName", | ||
| Line 42: | Line 42: | ||
DAMAGETOARMORDURABILITYDROPOFFMULT = "DamageToArmorDurabilityDropoffMult", | DAMAGETOARMORDURABILITYDROPOFFMULT = "DamageToArmorDurabilityDropoffMult", | ||
SUPPRESSION = "Suppression" | SUPPRESSION = "Suppression" | ||
} | }]] | ||
--endregion | --endregion | ||
| Line 56: | Line 56: | ||
local function loadData() | local function loadData() | ||
if not weaponsData then | if not weaponsData then | ||
weaponsData = JsonUtils.convertJSONToLuaTable(DATA_FILE) | |||
end | end | ||
end | end | ||
local function getTitle(NAME) | --[[local function getTitle(NAME) | ||
loadDate() | loadDate() | ||
return SCHEMA.TITLE | return SCHEMA.TITLE | ||
end]] | |||
---Formats a single weapon as a wiki table row | |||
---@param weapon table The weapon data | |||
---@return string The formatted table row | |||
local function formatWeaponRow(weapon) | |||
local row = {} | |||
-- Add table row start | |||
table.insert(row, "|-") | |||
-- Name/Title with link | |||
table.insert(row, string.format("| [[%s]]", weapon.Title or "")) | |||
-- ShortName | |||
table.insert(row, string.format("| %s", weapon.ShortName or "")) | |||
-- Range (using MaxRange) | |||
table.insert(row, string.format("| %d", weapon.MaxRange or 0)) | |||
-- Damage | |||
table.insert(row, string.format("| %.1f", weapon.Damage or 0)) | |||
-- Armor Damage (DamageToArmorDurability) | |||
table.insert(row, string.format("| %.1f", weapon.DamageToArmorDurability or 0)) | |||
-- Armor Penetration | |||
table.insert(row, string.format("| %.1f", weapon.ArmorPenetration or 0)) | |||
-- Suppression | |||
table.insert(row, string.format("| %.1f", weapon.Suppression or 0)) | |||
-- Trade Value | |||
table.insert(row, string.format("| %d", weapon.TradeValue or 0)) | |||
-- Accuracy Modifier (AccuracyBonus) | |||
table.insert(row, string.format("| %.1f", weapon.AccuracyBonus or 0)) | |||
return table.concat(row, "\n") | |||
end | end | ||
--endregion | --endregion | ||
| Line 96: | Line 128: | ||
local tableRow = weaponNames[weapon[SCHEMA.TITLE]] .. "|" .. weaponNames[weapon[SCHEMA.SHORTNAME]] .. "|" .. weaponsNames[weapon[SCHEMA.DAMAGE]] .. "|" .. weaponNames[weapon[SCHEMA.TRADEVALUE]] | local tableRow = weaponNames[weapon[SCHEMA.TITLE]] .. "|" .. weaponNames[weapon[SCHEMA.SHORTNAME]] .. "|" .. weaponsNames[weapon[SCHEMA.DAMAGE]] .. "|" .. weaponNames[weapon[SCHEMA.TRADEVALUE]] | ||
return tableRow | return tableRow | ||
end | |||
---Returns a wiki table row for a weapon by name | |||
---@param weaponName string The name identifier of the weapon | |||
---@return string The formatted wiki table row | |||
function WeaponsData.getWeaponRow(weaponName) | |||
loadData() | |||
-- Find the weapon by name | |||
for _, weapon in ipairs(weaponsData) do | |||
if weapon.Name == weaponName then | |||
return formatWeaponRow(weapon) | |||
end | |||
end | |||
return "Weapon not found: " .. (weaponName or "nil") | |||
end | end | ||
Revision as of 05:56, 3 October 2025
Documentation for this module may be created at Module:WeaponsData/doc
---@class WeaponsData
local WeaponsData = {}
--region Dependencies
local JsonUtils = require("Module:JsonUtils")
--endregion
--region Private constants
local DATA_FILE = "Module:Data/Weapons.json"
--[[local SCHEMA = {
NAME = "Name",
SHORTNAME = "ShortName",
DESCRIPTION = "Description",
ICON = "Icon",
TAGS = "Tags",
RARITY = "Rarity",
TRADEVALUE = "TradeValue",
APEN = "IconEquipment",
SUPPRESS = "IconSkillBar",
NUM_HITS = "DeployCosts",
ROF = "SkillsGranted",
COST = "MinRange",
IDEALRANGE = "IdealRange",
IMAGE = "MaxRange",
ACCURACYBONUS = "AccuracyBonus",
ACCURACYDROPOFF = "AccuracyDropoff",
DAMAGE = "Damage",
DAMAGEDROPOFF = "DamageDropoff",
DAMAGEPCTCURRENTHITPOINTS = "DamagePctCurrentHitpoints",
DAMAGEPCTCURRENTHITPOINTSMIN = "DamagePctCurrentHitpointsMin",
DAMAGEPCTMAXHITPOINTS = "DamagePctMaxHitpoints",
DAMAGEPCTMAXHITPOINTSMIN = "DamagePctMaxHitpointsMin",
ARMORPENETRATION = "ArmorPenetration",
ARMORPENETRATIONDROPOFF = "ArmorPenetrationDropoff",
DAMAGETOARMORDURABILITY = "DamageToArmorDurability",
DAMAGETOARMORDURABILITYMULT = "DamageToArmorDurabilityMult",
DAMAGETOARMORDURABILITY_DROPOFF = "DamageToArmorDurabilityDropoff",
DAMAGETOARMORDURABILITYDROPOFFMULT = "DamageToArmorDurabilityDropoffMult",
SUPPRESSION = "Suppression"
}]]
--endregion
--region Private member variables
local weaponsData
--endregion
--region Private methods
local function loadData()
if not weaponsData then
weaponsData = JsonUtils.convertJSONToLuaTable(DATA_FILE)
end
end
--[[local function getTitle(NAME)
loadDate()
return SCHEMA.TITLE
end]]
---Formats a single weapon as a wiki table row
---@param weapon table The weapon data
---@return string The formatted table row
local function formatWeaponRow(weapon)
local row = {}
-- Add table row start
table.insert(row, "|-")
-- Name/Title with link
table.insert(row, string.format("| [[%s]]", weapon.Title or ""))
-- ShortName
table.insert(row, string.format("| %s", weapon.ShortName or ""))
-- Range (using MaxRange)
table.insert(row, string.format("| %d", weapon.MaxRange or 0))
-- Damage
table.insert(row, string.format("| %.1f", weapon.Damage or 0))
-- Armor Damage (DamageToArmorDurability)
table.insert(row, string.format("| %.1f", weapon.DamageToArmorDurability or 0))
-- Armor Penetration
table.insert(row, string.format("| %.1f", weapon.ArmorPenetration or 0))
-- Suppression
table.insert(row, string.format("| %.1f", weapon.Suppression or 0))
-- Trade Value
table.insert(row, string.format("| %d", weapon.TradeValue or 0))
-- Accuracy Modifier (AccuracyBonus)
table.insert(row, string.format("| %.1f", weapon.AccuracyBonus or 0))
return table.concat(row, "\n")
end
--endregion
--region Public Methods
---@public
---gets a table of all weapons
---
---@return table of weapons
function WeaponsData.getAllWeapons()
loadData()
local weaponNames = {}
for name, _ in pairs(weaponsData) do
table.insert(weaponNames, name)
end
return weaponNames
end
---@public
---prints a row of the table given a name
---
---@return string of table row
function WeaponsData.printRow(weapon)
local weaponNames = WeaponsData.getAllWeapons()
local tableRow = weaponNames[weapon[SCHEMA.TITLE]] .. "|" .. weaponNames[weapon[SCHEMA.SHORTNAME]] .. "|" .. weaponsNames[weapon[SCHEMA.DAMAGE]] .. "|" .. weaponNames[weapon[SCHEMA.TRADEVALUE]]
return tableRow
end
---Returns a wiki table row for a weapon by name
---@param weaponName string The name identifier of the weapon
---@return string The formatted wiki table row
function WeaponsData.getWeaponRow(weaponName)
loadData()
-- Find the weapon by name
for _, weapon in ipairs(weaponsData) do
if weapon.Name == weaponName then
return formatWeaponRow(weapon)
end
end
return "Weapon not found: " .. (weaponName or "nil")
end
--endregion
return WeaponsData


