PGRData/Script/matrix/xconfig/xconfigdlc/XDlcHuntChipConfigs.lua

448 lines
14 KiB
Lua
Raw Normal View History

2024-09-01 22:49:41 +02:00
XDlcHuntChipConfigs = XDlcHuntChipConfigs or {}
local XDlcHuntChipConfigs = XDlcHuntChipConfigs
XDlcHuntChipConfigs.CHIP_GROUP_AMOUNT = 0
-- 一个芯片组可以装多少芯片
XDlcHuntChipConfigs.CHIP_GROUP_CHIP_AMOUNT = 9
XDlcHuntChipConfigs.CHIP_STAR_AMOUNT = 6
XDlcHuntChipConfigs.CHIP_MAIN_AMOUNT = 1
XDlcHuntChipConfigs.CHIP_SUB_AMOUNT = 8
XDlcHuntChipConfigs.CHIP_MAIN_CAPACITY = 9999
XDlcHuntChipConfigs.CHIP_SUB_CAPACITY = 9999
XDlcHuntChipConfigs.ITEM_CAPACITY = 9999
XDlcHuntChipConfigs.CHIP_DECOMPOSE_AMOUNT = 30
XDlcHuntChipConfigs.CHIP_DECOMPOSE_DURATION = 0.2 * XScheduleManager.SECOND
XDlcHuntChipConfigs.STAR = {
FOUR = 1 << 4,
FIVE = 1 << 5,
ALL = 0xffff,
}
-- 下拉框中的筛选条件包括:星级,等级,突破,最近
XDlcHuntChipConfigs.CHIP_FILTER_TYPE = {
STAR = 1,
BREAKTHROUGH = 2,
LEVEL = 3,
RECENTLY = 4,
EXP = 5,
COST_BREAKTHROUGH = 6,
End = 7,
}
-- 升序,降序
XDlcHuntChipConfigs.CHIP_FILTER_ORDER = {
ASC = 1, -- 升序 ascending order
DESC = 2, -- 降序 descending order
}
-- 忽略
XDlcHuntChipConfigs.CHIP_FILTER_IGNORE = {
NONE = 0,
EQUIP = 1 << 0, --已装备
MAIN = 1 << 1, --主芯片
SUB = 1 << 2, --从属芯片
LOCK = 1 << 3, --上锁
IN_USE = 1 << 4, --未使用在芯片组里
}
-- 芯片类型
XDlcHuntChipConfigs.CHIP_TYPE = {
MAIN = 1, -- 主芯片
SUB = 2, -- 从属芯片
}
XDlcHuntChipConfigs.COST_TYPE = {
SAME_CHIP = 0, -- 相同芯片
MAIN_CHIP = 1, -- 主芯片
SUB_CHIP = 2, -- 副芯片
ALL = 3, -- 任意芯片
}
XDlcHuntChipConfigs.UI_DETAIL_TAB = {
None = 0,
DETAIL = 1,
LEVEL_UP = 2,
BREAKTHROUGH = 3
}
--突破消耗的材料类型
XDlcHuntChipConfigs.BREAKTHROUGH_COST_TYPE = {
-- 相同芯片templateId、突破等级相同
SameChipTemplateId = 0;
-- 任意主控
AnyMainChip = 1;
-- 任意从属
AnySubChip = 2;
-- 任意芯片
AnyChip = 3;
}
XDlcHuntChipConfigs.UI_BATCH_TAB = {
MAIN = 1,
SUB = 2,
}
XDlcHuntChipConfigs.ASSISTANT_CHIP_FROM = {
FRIEND = 1,
TEAMMATE = 2,
RANDOM = 3,
CONFIG = 4,
}
---@type XConfig
local _ConfigChipShare
---@type XConfig
local _ConfigChipClient
---@type XConfig
local _ConfigChipBreakthrough
---@type XConfig
local _ConfigLevelUpTemplate
---@type XConfig
local _ConfigMagic
---@type XConfig
local _ConfigChipAssistant
function XDlcHuntChipConfigs.Init()
_ConfigChipShare = XConfig.New("Share/DlcHunt/Chip/DlcHuntChip.tab", XTable.XTableDlcHuntChip, "Id")
_ConfigChipClient = XConfig.New("Client/DlcHunt/Chip/DlcHuntChipClient.tab", XTable.XTableDlcHuntChipClient, "Id")
_ConfigChipBreakthrough = XConfig.New("Share/DlcHunt/Chip/DlcHuntChipBreakthrough.tab", XTable.XTableDlcHuntChipBreakThrough, "Id")
_ConfigLevelUpTemplate = XConfig.New("Share/DlcHunt/Chip/DlcHuntChipLevelUpTemplate.tab", XTable.XTableDlcHuntChipLevelUpTemplate, "Id")
_ConfigMagic = XConfig.New("Client/DlcHunt/Chip/DlcHuntChipMagic.tab", XTable.XTableDlcHuntChipMagic, "Id")
_ConfigChipAssistant = XConfig.New("Share/DlcHunt/Chip/DlcHuntChipAssist.tab", XTable.XTableDlcHuntChipAssist, "Id")
XDlcHuntChipConfigs.CHIP_GROUP_AMOUNT = XDlcHuntConfigs.GetChipGroupAmount()
XDlcHuntChipConfigs.CHIP_MAIN_CAPACITY = XDlcHuntConfigs.GetChipCapacity()
XDlcHuntChipConfigs.CHIP_SUB_CAPACITY = XDlcHuntConfigs.GetChipCapacity()
end
function XDlcHuntChipConfigs.IsExist(chipId)
return _ConfigChipShare:TryGetConfig(chipId) ~= nil
end
function XDlcHuntChipConfigs.GetChipQuality(chipId)
return _ConfigChipShare:GetProperty(chipId, "Quality")
end
function XDlcHuntChipConfigs.IsMainChip(chipId)
return _ConfigChipShare:GetProperty(chipId, "Type") == XDlcHuntChipConfigs.CHIP_TYPE.MAIN
end
function XDlcHuntChipConfigs.IsSubChip(chipId)
return _ConfigChipShare:GetProperty(chipId, "Type") == XDlcHuntChipConfigs.CHIP_TYPE.SUB
end
function XDlcHuntChipConfigs.GetChipType(chipId)
return _ConfigChipShare:GetProperty(chipId, "Type")
end
function XDlcHuntChipConfigs.GetChipModel(chipId)
return _ConfigChipClient:GetProperty(chipId, "Model")
end
function XDlcHuntChipConfigs.GetChipName(chipId)
return _ConfigChipClient:GetProperty(chipId, "Name")
end
function XDlcHuntChipConfigs.GetChipIcon(chipId)
return _ConfigChipClient:GetProperty(chipId, "IconPath")
end
function XDlcHuntChipConfigs.GetChipPriority(chipId)
return _ConfigChipClient:GetProperty(chipId, "Priority")
end
---@param chip XDlcHuntChip
function XDlcHuntChipConfigs.GetTextBreakthrough(chip)
local config = XDlcHuntChipConfigs.GetChipBreakthroughConfig(chip:GetId(), chip:GetBreakthroughTimes())
if not config then
return ""
end
return config.ConsumeDes or ""
end
---@return DlcHuntChipBreakthroughCost[]
function XDlcHuntChipConfigs.GetCostBreakthrough(chip)
local result = {}
local config = XDlcHuntChipConfigs.GetChipBreakthroughConfig(chip:GetId(), chip:GetBreakthroughTimes())
if not config then
return result
end
for i = 1, config.CostCount do
---@class DlcHuntChipBreakthroughCost
local cost = {
Type = config.CostType,
BreakthroughTimes = config.CostChipBreakTime,
Star = config.CostChipQuality,
Quality = config.CostChipQuality,
Amount = 1, -- 数量总是1
}
result[#result + 1] = cost
end
return result
end
function XDlcHuntChipConfigs.GetChipBreakthroughConfig(chipId, breakthroughTimes)
local configsBreakthrough = _ConfigChipBreakthrough:GetConfigs()
for i, config in pairs(configsBreakthrough) do
if config.ChipId == chipId and config.BreakTimes == breakthroughTimes then
return config
end
end
return false
end
local _ChipMaxBreakthroughTimes = {}
function XDlcHuntChipConfigs.GetChipMaxBreakthroughTimes(chipId)
if _ChipMaxBreakthroughTimes[chipId] then
return _ChipMaxBreakthroughTimes[chipId]
end
local allConfig = XDlcHuntChipConfigs.GetChipAllBreakthroughConfig(chipId)
local lastConfig = allConfig[#allConfig]
local value = lastConfig and lastConfig.BreakTimes or 0
_ChipMaxBreakthroughTimes[chipId] = value
return value
end
function XDlcHuntChipConfigs.GetChipAllBreakthroughConfig(chipId)
local result = {}
local configsBreakthrough = _ConfigChipBreakthrough:GetConfigs()
for i, config in pairs(configsBreakthrough) do
if config.ChipId == chipId then
result[config.BreakTimes] = config
end
end
return result
end
-- 所有突破属性的和
function XDlcHuntChipConfigs.GetChipAttrTableBreakthrough(chipId)
local result = {}
local configsBreakthrough = _ConfigChipBreakthrough:GetConfigs()
for i, config in pairs(configsBreakthrough) do
if config.ChipId == chipId then
local attribId = config.AttribId
local attrTable = XDlcHuntAttrConfigs.GetAttrTable(attribId)
result[config.BreakTimes] = attrTable
end
end
return result
end
function XDlcHuntChipConfigs.GetChipAttrTable(chipId, level, breakthroughTimes)
local attribId, attribLvUp
local result = {}
local configsBreakthrough = _ConfigChipBreakthrough:GetConfigs()
for i, config in pairs(configsBreakthrough) do
if config.ChipId == chipId and config.BreakTimes == breakthroughTimes then
attribId = config.AttribId
attribLvUp = config.AttribPromotedId
break
end
end
if not attribId or not attribLvUp then
return result
end
local attrTableBase = XDlcHuntAttrConfigs.GetAttrTable(attribId)
local attrTableLvUp = XDlcHuntAttrConfigs.GetAttrTable(attribLvUp)
for attrId, attrValue in pairs(attrTableBase) do
result[attrId] = (result[attrId] or 0) + (attrValue or 0)
end
local ratio = level - 1
for attrId, attrValue in pairs(attrTableLvUp) do
result[attrId] = (result[attrId] or 0) + (attrValue or 0) * ratio
end
--result = attrTableBase + attrTableLvUp * (level - 1)
return result
end
-- 属性成长值
function XDlcHuntChipConfigs.GetChipAttrTableLvUp(chipId, level, breakthroughTimes)
local attribId, attribLvUp
local configsBreakthrough = _ConfigChipBreakthrough:GetConfigs()
for i, config in pairs(configsBreakthrough) do
if config.ChipId == chipId and config.BreakTimes == breakthroughTimes then
attribId = config.AttribId
attribLvUp = config.AttribPromotedId
break
end
end
if not attribId or not attribLvUp then
return {}
end
local attrTableLvUp = XDlcHuntAttrConfigs.GetAttrTable(attribLvUp)
return attrTableLvUp
end
function XDlcHuntChipConfigs.GetChipLevelUpConfig(chipId, breakthroughTimes)
local result = {}
local configsBreakthrough = _ConfigChipBreakthrough:GetConfigs()
local levelUpTemplateId
for i, config in pairs(configsBreakthrough) do
if config.ChipId == chipId and config.BreakTimes == breakthroughTimes then
levelUpTemplateId = config.LevelUpTemplateId
break
end
end
if levelUpTemplateId then
local configsLvUpTemplate = _ConfigLevelUpTemplate:GetConfigs()
for i, config in pairs(configsLvUpTemplate) do
if config.TemplateId == levelUpTemplateId then
result[#result + 1] = config
end
end
end
return result
end
function XDlcHuntChipConfigs.GetChipMaxLevel(chipId, breakthroughTimes)
local config = XDlcHuntChipConfigs.GetChipBreakthroughConfig(chipId, breakthroughTimes)
return config and config.LevelLimit or 0
end
function XDlcHuntChipConfigs.GetChipLevelUpExp(chipId, level, breakthroughTimes)
-- 取下一级
level = level + 1
local maxLevel = XDlcHuntChipConfigs.GetChipMaxLevel(chipId, breakthroughTimes)
if level > maxLevel then
level = maxLevel
end
local exp, allExp = 0, 0
local configsBreakthrough = _ConfigChipBreakthrough:GetConfigs()
local levelUpTemplateId
for i, config in pairs(configsBreakthrough) do
if config.ChipId == chipId and config.BreakTimes == breakthroughTimes then
levelUpTemplateId = config.LevelUpTemplateId
break
end
end
if levelUpTemplateId then
local configsLvUpTemplate = _ConfigLevelUpTemplate:GetConfigs()
for i, config in pairs(configsLvUpTemplate) do
if config.TemplateId == levelUpTemplateId and config.Level == level then
exp, allExp = config.Exp, config.AllExp
break
end
end
end
return exp, allExp
end
---@param chip XDlcHuntChip
function XDlcHuntChipConfigs.GetChipResolveItem(chip)
local chipId = chip:GetId()
local breakthroughTimes = chip:GetBreakthroughTimes()
local config = XDlcHuntChipConfigs.GetChipBreakthroughConfig(chipId, breakthroughTimes)
local item = {
ItemId = config.ResolveItem,
ItemCount = config.ResolveItemCount
}
return item
end
---@param chip XDlcHuntChip
function XDlcHuntChipConfigs.GetChipGetOfferExp(chip)
local chipId = chip:GetId()
local breakthroughTimes = chip:GetBreakthroughTimes()
local config = XDlcHuntChipConfigs.GetChipBreakthroughConfig(chipId, breakthroughTimes)
local expBase = config.OfferExp
local _, expLevelUp = chip:GetExpMaxWithThisLevel()
return expBase + expLevelUp
end
function XDlcHuntChipConfigs.GetChipTypeByGroupPos(pos)
if pos == 1 then
return XDlcHuntChipConfigs.CHIP_TYPE.MAIN
end
return XDlcHuntChipConfigs.CHIP_TYPE.SUB
end
function XDlcHuntChipConfigs.IsMainChipByPos(pos)
return XDlcHuntChipConfigs.GetChipTypeByGroupPos(pos) == XDlcHuntChipConfigs.CHIP_TYPE.MAIN
end
function XDlcHuntChipConfigs.GetMagicName(magicId)
return _ConfigMagic:GetProperty(magicId, "Name")
end
function XDlcHuntChipConfigs.GetMagicDesc(magicId)
return _ConfigMagic:GetProperty(magicId, "Desc"),
_ConfigMagic:GetProperty(magicId, "Params")
end
function XDlcHuntChipConfigs.GetMagicType(magicId)
return _ConfigMagic:GetProperty(magicId, "Type")
end
---@param chip XDlcHuntChip
function XDlcHuntChipConfigs.GetMagicEventIds(chip)
local id = chip:GetId()
local breakthroughTimes = chip:GetBreakthroughTimes()
local config = XDlcHuntChipConfigs.GetChipBreakthroughConfig(id, breakthroughTimes)
if not config then
return {}
end
return config.MagicEventIds
end
---@param chip XDlcHuntChip
function XDlcHuntChipConfigs.GetMagicLevel(chip)
local config = XDlcHuntChipConfigs.GetChipBreakthroughConfig(chip:GetId(), chip:GetBreakthroughTimes())
if not config then
return {}
end
return config.MagicLevel
end
---@param chip XDlcHuntChip
function XDlcHuntChipConfigs.GetChipQualityColor(chip)
local star = chip:GetStarAmount()
return XDlcHuntChipConfigs.GetQualityColor(star)
end
function XDlcHuntChipConfigs.GetQualityColor(star)
if star == 3 then
return XUiHelper.Hexcolor2Color("3e70bb")
end
if star == 4 then
return XUiHelper.Hexcolor2Color("cc68c1")
end
if star == 5 then
return XUiHelper.Hexcolor2Color("ff8d1e")
end
return XUiHelper.Hexcolor2Color("3e70bb")
end
function XDlcHuntChipConfigs.GetAssistantChipList()
local list = {}
local configs = _ConfigChipAssistant:GetConfigs()
local XDlcHuntChip = require("XEntity/XDlcHunt/XDlcHuntChip")
for id, data in pairs(configs) do
---@type XDlcHuntChip
local chip = XDlcHuntChip.New()
chip:SetId(data.ChipId)
chip:SetBreakthroughTimes(data.BreakTimes)
chip:SetLevel(data.Level)
chip:SetFromConfig()
chip:SetUid(id)
list[#list + 1] = chip
end
return list
end