Welcome to the Umamusume Wiki! If you want to contribute, please read the guidelines.
Module:Game/Supports/Data/Unique
Documentation for this module may be created at Module:Game/Supports/Data/Unique/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 Unique = {}
local Game = require("Module:Game")
local Utils = require("Module:Utils")
local Effects = require("Module:Game/Supports/Data/Effects")
---@class SupportDataEffectUnique
---@field nameJP string
---@field descriptionJP string[]
---@field nameEN string|nil
---@field descriptionEN string[]|nil
---@field level number
---@field bonuses SupportDataEffectUniqueBonus[]
---@class SupportDataEffectUniqueBonus
---@field typeId string
---@field value number
---@field hint string|nil
---@param support_datas table[]
---@return SupportDataEffectUnique[]
function Unique.getUniqueEffects(support_datas)
local supportIds = {}
local uniqueEffectIds = {}
for _, support_data in ipairs(support_datas) do
table.insert(supportIds, support_data.id)
table.insert(uniqueEffectIds, support_data.unique_effect_id)
end
local uniqueEffectIdsInsert = table.concat(uniqueEffectIds, ',')
local uniqueEffectMap = {}
local support_card_unique_effects = Game.queryMaster {
from = "support_card_unique_effect",
where = string.format("id IN (%s)", uniqueEffectIdsInsert),
}
for _, support_card_unique_effect in ipairs(support_card_unique_effects) do
uniqueEffectMap[support_card_unique_effect.id] = support_card_unique_effect
end
local namesJP = Game.getJPText(150, supportIds)
local descriptionsJP = Game.getJPText(155, supportIds)
local namesEN = Game.getENText(150, supportIds)
local descriptionsEN = Game.getENText(155, supportIds)
local datas = {}
for _, support_data in ipairs(support_datas) do
local uniqueEffect = uniqueEffectMap[support_data.unique_effect_id]
if uniqueEffect ~= nil then
local nameJP = namesJP[support_data.id] or ''
local descriptionRawJP = descriptionsJP[support_data.id] or ''
local descriptionJP = Utils.splitLines(descriptionRawJP)
local nameEN = namesEN[support_data.id]
local descriptionRawEN = descriptionsEN[support_data.id]
local descriptionEN = descriptionRawEN and Utils.splitLines(descriptionRawEN) or nil
local bonuses = {}
for i = 0, 1 do
local typeId = uniqueEffect[string.format("type_%s", i)]
local value = tonumber(uniqueEffect[string.format("value_%s", i)]) or 0
local values = {}
for j = 1, 4 do
values[j] = tonumber(uniqueEffect[string.format("value_%s_%s", i, j)]) or 0
end
local mapped = Effects.getUniqueBonuses(typeId, value, values)
for _, bonus in ipairs(mapped) do
table.insert(bonuses, bonus)
end
end
local data = { ---@type SupportDataEffectUnique
nameJP = nameJP,
descriptionJP = descriptionJP,
nameEN = nameEN,
descriptionEN = descriptionEN,
level = tonumber(uniqueEffect.lv) or -1,
bonuses = bonuses
}
datas[support_data.id] = data
end
end
return datas
end
return Unique