Welcome to the Umamusume Wiki! If you want to contribute, please read the guidelines.
Module:Game/Skills/Data/Evolved
Documentation for this module may be created at Module:Game/Skills/Data/Evolved/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 Evolved = {}
local Game = require("Module:Game")
---Get the card IDs and skill IDs the given skill IDs evolve from
---@param skillIds string[]
---@return (string|nil)[] sourceSkillIds, (string|nil)[] cardIds maps keyed with skill ID
function Evolved.getEvolvedFromSkillAndCard(skillIds)
local skillIdsInsert = table.concat(skillIds, ",")
local sourceSkillIdMap = {}
local cardIdMap = {}
-- Card upgrades
local skill_upgrade_descriptions = Game.queryMaster {
from = "skill_upgrade_description",
where = string.format("skill_id IN (%s)", skillIdsInsert),
}
local cardIds = {}
for _, skill_upgrade_description in ipairs(skill_upgrade_descriptions) do
table.insert(cardIds, skill_upgrade_description.card_id)
end
local cardIdsInsert = table.concat(cardIds, ",")
local card_datas = Game.queryMaster {
from = "card_data",
where = string.format("id IN (%s)", cardIdsInsert)
}
local availableSkillSetIds = {}
for _, card_data in ipairs(card_datas) do
table.insert(availableSkillSetIds, card_data.available_skill_set_id)
end
local availableSkillSetIdsInsert = table.concat(availableSkillSetIds, ",")
local available_skill_sets = Game.queryMaster {
from = "available_skill_set",
where = string.format("available_skill_set_id IN (%s)", availableSkillSetIdsInsert),
}
for _, skill_upgrade_description in ipairs(skill_upgrade_descriptions) do
local cardId = skill_upgrade_description.card_id
-- find source skill for rank of the given card id
-- if a card eventually has two (or more) skills of a given rank, would need to refactor this to add both
for _, card_data in ipairs(card_datas) do
if card_data.id == cardId then
for _, available_skill_set in ipairs(available_skill_sets) do
if available_skill_set.need_rank == skill_upgrade_description.rank then
sourceSkillIdMap[skill_upgrade_description.skill_id] = available_skill_set.skill_id
break
end
end
end
end
cardIdMap[skill_upgrade_description.skill_id] = cardId
end
-- Scenario upgrades
local skill_upgrade_specialties = Game.queryMaster {
from = "skill_upgrade_speciality",
where = string.format("skill_id IN (%s)", skillIdsInsert),
}
for _, skill_upgrade_specialty in ipairs(skill_upgrade_specialties) do
sourceSkillIdMap[skill_upgrade_specialty.skill_id] = skill_upgrade_specialty.base_skill_id
end
return sourceSkillIdMap, cardIdMap
end
---@class CardEvolvedSkill
---@field rank string
---@field skillId string
---@field conditions CardEvolvedSkillCondition[][]
---@class CardEvolvedSkillCondition
---@field text string
---Get a list of evolved skills, ranks, and conditions for each card ID in the given list
---@param cardIds string[]
---@return CardEvolvedSkill[][] evolvedSkills keyed by card ID
function Evolved.getEvolvedSkillsForCards(cardIds)
local cardIdsInsert = table.concat(cardIds, ",")
local skill_upgrade_descriptions = Game.queryMaster {
from = "skill_upgrade_description",
where = string.format("card_id IN (%s)", cardIdsInsert),
}
local descriptionIds = {}
for _, skill_upgrade_description in ipairs(skill_upgrade_descriptions) do
table.insert(descriptionIds, skill_upgrade_description.id)
end
local descriptionIdsInsert = table.concat(descriptionIds, ",")
local skill_upgrade_conditions = Game.queryMaster {
from = "skill_upgrade_condition",
where = string.format("description_id IN (%s)", descriptionIdsInsert),
order_by = "num ASC, sub_num ASC"
}
local conditionIds = {}
local descriptionConditionMap = {}
for _, skill_upgrade_condition in ipairs(skill_upgrade_conditions) do
local key = skill_upgrade_condition.description_id
if descriptionConditionMap[key] == nil then descriptionConditionMap[key] = {} end
table.insert(conditionIds, skill_upgrade_condition.id)
table.insert(descriptionConditionMap[key], skill_upgrade_condition)
end
local conditionTexts = Game.getJPText(290, conditionIds)
local datas = {}
for _, skill_upgrade_description in ipairs(skill_upgrade_descriptions) do
local key = skill_upgrade_description.card_id
if datas[key] == nil then datas[key] = {} end
local descriptionConditions = descriptionConditionMap[skill_upgrade_description.id]
local conditions = {}
for _, skill_upgrade_condition in ipairs(descriptionConditions) do
local num = tonumber(skill_upgrade_condition.num) or 0
if conditions[num] == nil then conditions[num] = {} end
local condition = { ---@type CardEvolvedSkillCondition
text = conditionTexts[skill_upgrade_condition.id]
}
table.insert(conditions[num], condition)
end
local data = { ---@type CardEvolvedSkill
rank = skill_upgrade_description.rank,
skillId = skill_upgrade_description.skill_id,
conditions = conditions,
}
table.insert(datas[key], data)
end
return datas
end
return Evolved