PGRData/Script/matrix/xentity/xrift/XRiftPlugin.lua
2024-09-01 22:49:41 +02:00

216 lines
7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 战双大秘境插件
local XRiftPlugin = XClass(nil, "XRiftPlugin")
local CommonText = XUiHelper.GetText("Common")
function XRiftPlugin:Ctor(config)
self.Config = config
self.IsHave = false
end
function XRiftPlugin:GetId()
return self.Config.Id
end
function XRiftPlugin:GetName()
return self.Config.Name
end
function XRiftPlugin:GetStar()
return self.Config.Star
end
function XRiftPlugin:GetIcon()
return self.Config.Icon
end
function XRiftPlugin:GetTag()
if self.Config.CharacterId ~= 0 then
return XCharacterConfigs.GetCharacterName(self.Config.CharacterId)
else
return CommonText
end
end
function XRiftPlugin:GetQualityImage()
local config = XRiftConfig.GetCfgByIdKey(XRiftConfig.TableKey.RiftPluginQuality, self.Config.Quality)
return config.Image, config.ImageBg
end
function XRiftPlugin:GetImageDropHead()
local config = XRiftConfig.GetCfgByIdKey(XRiftConfig.TableKey.RiftPluginQuality, self.Config.Quality)
return config.ImageDropHead
end
-- 插件总描述
function XRiftPlugin:GetDesc()
local attrLevel = XDataCenter.RiftManager.GetDefaultTemplateAttrLevel(self.Config.DescFixAttrId)
local descInitValue = self.Config.DescInitValue / 10000 -- DescInitValue配表按*10000填写
local descCoefficient = self.Config.DescCoefficient / 10000 -- DescCoefficient配表按*10000填写
local attrAddValue = attrLevel * descCoefficient
local desc = self.Config.Desc
desc = string.gsub(desc, "{0}", self:FormatNum(descInitValue + attrAddValue))
desc = string.gsub(desc, "{1}", self:FormatNum(descInitValue))
desc = string.gsub(desc, "{2}", self:FormatNum(attrAddValue))
desc = string.gsub(desc, "{3}", attrLevel)
desc = string.gsub(desc, "{4}", self:FormatNum(descCoefficient))
if self.Config.DescTips then
desc = desc .. self.Config.DescTips
end
return desc
end
-- 保留到小数点一位小数如果为0则去掉
function XRiftPlugin:FormatNum(num)
num = string.format("%.1f", num)
num = tonumber(num)
local t1, t2 = math.modf(num)
if t2 > 0 then
return num
else
return t1
end
end
-- 获取插件补正类型能量S、体力A
function XRiftPlugin:GetAttrFixTypeList()
if self.Config.FixAttrIds == nil then
return {}
end
local attrTypeList = {}
for index, attrId in ipairs(self.Config.FixAttrIds) do
local level = self.Config.FixAttrLevels[index]
local attrType = XRiftConfig.GetAttrName(attrId) .. "" .. XRiftConfig.AttributeLevelStr[level]
table.insert(attrTypeList, attrType)
end
return attrTypeList
end
-- 获取插件总的战力值
-- 不传属性加点模板xAttrTemplate则用默认的
function XRiftPlugin:GetAbility(xAttrTemplate)
local ability = self.Config.Ability
local attrFixCfgList = self:GetAttrFixConfigList(xAttrTemplate)
for _, attrFixCfg in ipairs(attrFixCfgList) do
ability = ability + attrFixCfg.Ability
end
return ability
end
-- 获取补正效果,未拼接好字符串,可与队伍属性加点效果叠加处理
-- 不传属性加点模板xAttrTemplate则用默认的
function XRiftPlugin:GetEffectList(xAttrTemplate)
local attrFixCfgList = self:GetAttrFixConfigList(xAttrTemplate)
if #attrFixCfgList == 0 then
return {}
end
local effectList = {}
for _, attrFixCfg in ipairs(attrFixCfgList) do
local showValue = attrFixCfg.EffectValue
local effectTypeCfg = XRiftConfig.GetCfgByIdKey(XRiftConfig.TableKey.RiftTeamAttributeEffectType, attrFixCfg.EffectType)
if effectTypeCfg.ShowType == XRiftConfig.AttributeFixEffectType.Percent then
showValue = self:FormatNum(attrFixCfg.EffectValue / 100)
end
local effect = { EffectType = attrFixCfg.EffectType, EffectValue = showValue }
table.insert(effectList, effect)
end
return effectList
end
-- 获取补正效果,已拼接好效果值字符串
function XRiftPlugin:GetEffectStringList()
local attrFixCfgList = self:GetAttrFixConfigList()
if #attrFixCfgList == 0 then
return {}
end
local effectList = {}
for _, attrFixCfg in ipairs(attrFixCfgList) do
local valueString
local attrName = XRiftConfig.GetAttrName(attrFixCfg.FixAttrId)
local attrLevel = XDataCenter.RiftManager.GetDefaultTemplateAttrLevel(attrFixCfg.FixAttrId)
local effectTypeCfg = XRiftConfig.GetCfgByIdKey(XRiftConfig.TableKey.RiftTeamAttributeEffectType, attrFixCfg.EffectType)
if effectTypeCfg.ShowType == XRiftConfig.AttributeFixEffectType.Percent then
local showValue = self:FormatNum(attrFixCfg.EffectValue / 100)
valueString = string.format("+%s%s%s", showValue .. "%", attrName, attrLevel)
else
valueString = string.format("+%s%s%s", attrFixCfg.EffectValue, attrName, attrLevel)
end
local effect = { Name = effectTypeCfg.Name, ValueString = valueString, Order = effectTypeCfg.Order }
table.insert(effectList, effect)
end
table.sort(effectList, function(a, b)
return a.Order < b.Order
end)
return effectList
end
function XRiftPlugin:SetHave()
self.IsHave = true
end
function XRiftPlugin:GetHave()
return self.IsHave
end
-- 是否为展示插件用于UI上刷新显示不会掉落不在插件背包显示
function XRiftPlugin:GetIsDisplay()
return self.Config.IsDisplay == 1
end
-- 获取补正的configList根据当前默认加点模板属性值
-- 不传属性加点模板xAttrTemplate则用默认的
function XRiftPlugin:GetAttrFixConfigList(xAttrTemplate)
if xAttrTemplate == nil then
xAttrTemplate = XDataCenter.RiftManager.GetAttrTemplate(XRiftConfig.DefaultAttrTemplateId)
end
local attrFixCfgList = {}
for _, groupId in ipairs(self.Config.AttrFixGroupIds) do
local attrId = XRiftConfig.GetAttrIdByFixGroupId(groupId)
local attrLevel = xAttrTemplate:GetAttrLevel(attrId)
local attrFixCfg = XRiftConfig.GetPluginAttrFixConfig(groupId, attrId, attrLevel)
table.insert(attrFixCfgList, attrFixCfg)
end
return attrFixCfgList
end
-- 检测该插件是否有角色条件限制
function XRiftPlugin:CheckCharacterWearLimit(characterId)
if not XTool.IsNumberValid(self.Config.CharacterId) then
return false
end
return self.Config.CharacterId ~= characterId
end
-- 检测当前插件是有相同类型穿戴限制
function XRiftPlugin:CheckCurPluginTypeLimit(xRole)
for k, xPlugin in pairs(xRole:GetPlugIns()) do
if xPlugin.Config.Type == self.Config.Type then
return true
end
end
end
-- 检测该角色是否可以穿戴该插件
function XRiftPlugin:GetCharacterUpgradeRedpoint()
local redKey = "RiftCharacterPluginRed"..XPlayer.Id.."PluginId:"..self:GetId()
local isShowRed = XSaveTool.GetData(redKey)
return isShowRed
end
function XRiftPlugin:SetCharacterUpgradeRedpoint(flag)
local redKey = "RiftCharacterPluginRed"..XPlayer.Id.."PluginId:"..self:GetId()
XSaveTool.SaveData(redKey, flag)
end
return XRiftPlugin