Welcome to the Umamusume Wiki! If you want to contribute, please read the guidelines.
Module:Game/Characters
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Game/Characters/doc
--[[
!! THIS PAGE IS MANAGED BY GITLAB !!
ANY EDITS TO PAGE CONTENT WILL BE OVERWRITTEN
TO MAKE CHANGES, PLEASE SUBMIT A MERGE REQUEST AT https://gitlab.com/umamusume-wiki/lua-modules
]]
local Characters = {}
local Game = require("Module:Game")
local Cargo = require("Module:Cargo")
local Utils = require("Module:Utils")
local BannerUtils = require("Module:Game/Banners/Utils")
---@class CharacterInfo
---@field id string
---@field nameJP string
---@field nameEN string
---@field pageName string
---@field releaseDateJP string|nil
---@field releaseDateEN string|nil
---Get character info by their game ID
---@param charId string
---@return CharacterInfo|nil
function Characters.getCharacterInfo(charId)
return Characters.getCharacterInfos({ charId })[Utils.normalString(charId)]
end
---Get bulk character info by a list of game IDs
---@param charIds string[]
---@return CharacterInfo[]
function Characters.getCharacterInfos(charIds)
if #charIds == 0 then return {} end
local normalIds = {}
for _, charId in ipairs(charIds) do
table.insert(normalIds, Utils.normalString(charId))
end
local charIdsInsert = table.concat(normalIds, ",")
local namesJP = Game.getJPText(6, normalIds)
local namesEN = Game.getENText(6, normalIds)
-- Get release dates for characters (uses base card IDs with "01" appended)
local releaseDatesJP = BannerUtils.getReleaseDates(normalIds, "character", "JP")
local releaseDatesEN = BannerUtils.getReleaseDates(normalIds, "character", "EN")
local cargoResults = Cargo.query {
from = 'Characters',
fields = { '_pageName=charPage', 'game_id', 'name_en' },
where = string.format('game_id IN (%s)', charIdsInsert),
limit = 9999
}
local cargoMap = {}
for _, result in ipairs(cargoResults) do
cargoMap[result.game_id] = result
end
local datas = {}
for _, charId in ipairs(normalIds) do
local cargoData = cargoMap[charId]
if cargoData ~= nil then
local data = { ---@type CharacterInfo
id = charId,
nameJP = namesJP[charId],
nameEN = namesEN[charId] or cargoData.name_en,
pageName = cargoData.charPage,
releaseDateJP = releaseDatesJP[charId],
releaseDateEN = releaseDatesEN[charId],
}
datas[charId] = data
end
end
return datas
end
return Characters