---@class KLAttrPanel:UIKmlLuaPanelBase
---@field view KLAttrPanelView
local KLAttrPanel = class(UIKmlLuaPanelBase)
local this = KLAttrPanel
---创建时调用一次
function KLAttrPanel:Init()
self.freePoint = SL:GetMetaValue("REMAIN_ATTR_POINT") or 0
self.add_strength = 0
self.add_agility = 0
self.add_intelligence = 0
self.add_spirit = 0
self.add_lead = 0
self.calcShowPoint = SL:GetConfig('cfg_global', 270) and tonumber(SL:GetConfig('cfg_global', 270).value) or 20
--cfg_att_info_post.InitOnUse()
self:InitFirstAttr()
self.strength_item = {}
self.agility_item = {}
self.intelligence_item = {}
self.spirit_item = {}
self.lead_item = {}
self.special_item = {}
self:InitSecondAttr()
-- 这个布局在webgl平台下会不正常,这里单独设置下
if SL:GetIsWebGL() then
local attrEffectRect = GUI:GetRectTransform(self.view.AttrEffect)
attrEffectRect.sizeDelta = Vector2.New(attrEffectRect.sizeDelta.x, 0)
end
end
function this:InitFirstAttr()
local cfgTable = SL:GetConfigTable("cfg_att_info")
for k, v in pairs(cfgTable) do
if v.base == 1 then
local isShow = this.CheckSpecialAttrIdIsShow(v.id)
if v.id == EMUCharacterAttrType.strength then
GUI:setVisible(self.view.attInfoContent_dc, isShow)
elseif v.id == EMUCharacterAttrType.agility then
GUI:setVisible(self.view.attInfoContent_agility, isShow)
elseif v.id == EMUCharacterAttrType.lead then
GUI:setVisible(self.view.attInfoContent_command, isShow)
elseif v.id == EMUCharacterAttrType.intelligence then
GUI:setVisible(self.view.attInfoContent_intelligence, isShow)
elseif v.id == EMUCharacterAttrType.spirit then
GUI:setVisible(self.view.attInfoContent_stamina, isShow)
end
end
end
end
function this:InitSecondAttr()
local secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.strength)
for _, second_info in pairs(secondAttrTbl) do
if second_info.id ~= EMUCharacterAttrType.maxDC then
table.insert(self.strength_item, second_info.id)
end
end
GUI:DataListInitData( self.view.attInfoContent_dc_content,function()
return self:DataListDcItemCountFunc()
end,function(realIndex)
return self:DataListDcItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:DataListDcItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:DataListDcItemUpdateFunc(realIndex, kmlcontrol)
end)
secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.agility)
for _, second_info in pairs(secondAttrTbl) do
if second_info.id ~= EMUCharacterAttrType.maxDC then
table.insert(self.agility_item, second_info.id)
end
end
GUI:DataListInitData( self.view.attInfoContent_agility_content,function()
return self:DataListAgItemCountFunc()
end,function(realIndex)
return self:DataListAgItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:DataListAgItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:DataListAgItemUpdateFunc(realIndex, kmlcontrol)
end)
secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.spirit)
for _, second_info in pairs(secondAttrTbl) do
if second_info.id ~= EMUCharacterAttrType.maxDC then
table.insert(self.spirit_item, second_info.id)
end
end
GUI:DataListInitData( self.view.attInfoContent_stamina_content,function()
return self:DataListStItemCountFunc()
end,function(realIndex)
return self:DataListStItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:DataListStItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:DataListStItemUpdateFunc(realIndex, kmlcontrol)
end)
secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.intelligence)
for _, second_info in pairs(secondAttrTbl) do
if second_info.id ~= EMUCharacterAttrType.maxDC and second_info.id ~= EMUCharacterAttrType.maxMC and second_info.id ~= EMUCharacterAttrType.maxZuZhou then
table.insert(self.intelligence_item, second_info.id)
end
end
GUI:DataListInitData( self.view.attInfoContent_intelligence_content,function()
return self:DataListInItemCountFunc()
end,function(realIndex)
return self:DataListInItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:DataListInItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:DataListInItemUpdateFunc(realIndex, kmlcontrol)
end)
secondAttrTbl = this.GetBaseTwoAttrById(EMUCharacterAttrType.lead)
for _, second_info in pairs(secondAttrTbl) do
if second_info.id ~= EMUCharacterAttrType.maxDC then
table.insert(self.lead_item, second_info.id)
end
end
GUI:DataListInitData( self.view.attInfoContent_command_content,function()
return self:DataListLeItemCountFunc()
end,function(realIndex)
return self:DataListLeItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:DataListLeItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:DataListLeItemUpdateFunc(realIndex, kmlcontrol)
end)
end
function this.GetRightTwoAttr()
local secondAttrTbl = {}
local cfgTable = SL:GetConfigTable('cfg_att_info')
for k, v in pairs(cfgTable) do
if v.base == 3 or v.base == 5 then
local isShow = this.CheckSpecialAttrIdIsShow(v.id)
if isShow then
table.insert(secondAttrTbl, v)
end
end
end
-- 同级属性排列顺序读表cfg_att_info的sort字段
table.sort(secondAttrTbl, function(a, b) return a.sort < b.sort end)
return secondAttrTbl
end
function this.GetBaseTwoAttrById(id)
local attInfo = SL:GetConfig('cfg_att_info', id)
local attributeName = attInfo.attribute
local showSecondAttrTbl = {}
--for _, baseTwoInfo in pairs(cfg_att_info_post.cfgBaseTbl[2]) do
for _, baseTwoInfo in pairs(SL:CfgAttInfoPost_GetCfgBaseTbl()[2]) do
if this.CheckSpecialAttrIdIsShow(baseTwoInfo.id) then
local baseTwoName = baseTwoInfo.attribute
---@type cfg_att_conversion_column
--local conversionInfo = MeData.GetAttConversionInfoByCareer(SL:MeData_GetCareer())[baseTwoName]
local conversionInfo = SL.RoleAtt:GetAttConversionInfoByCareer(SL:MeData_GetCareer())[baseTwoName]
-- 如果该1级属性加点后会影响该2级属性, 则表示它们是关联的, 需要显示在一级属性下面
--if conversionInfo ~= nil and conversionInfo[attributeName] ~= 0 then
if conversionInfo then
if conversionInfo.display == id then
-- 该1级属性影响到的2级属性, 先放table里, 后面还要按sort排序显示出来
table.insert(showSecondAttrTbl, baseTwoInfo)
end
end
end
end
table.sort(showSecondAttrTbl, function(a, b) return a.sort < b.sort end)
return showSecondAttrTbl
end
function this.CheckSpecialAttrIdIsShow(attrId)
local cfgInfo = SL:GetConfig("cfg_att_info", attrId)
if cfgInfo == nil then
logError("cfg_att_info id:" .. attrId .. "not exist!!!")
return false
else
local isShow = cfgInfo.isshow
if isShow[1] == 0 then
return false
elseif isShow[1] == 1 then
return true
elseif isShow[1] == 2 then
for index=2, #isShow do
local baseCareer = isShow[index]
if baseCareer == SL:MeData_GetCareer().baseCareer then
return true
end
end
return false
end
end
end
function this:DataListDcItemCountFunc()
return table.count(self.strength_item)
end
function this:DataListDcItemGetFunc(realIndex)
end
function this:DataListDcItemInitFunc(realIndex, kmlcontrol)
--local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
--GUI:Text_setString(strength_info,"攻击力:100~1000")
end
function this:DataListDcItemUpdateFunc(realIndex, kmlcontrol)
local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
local strength_add = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'dc_add')
local attr_id = self.strength_item[realIndex+1]
local attrName
local attrValue
local attrAddText = ""
local attrAddValue
if attr_id == EMUCharacterAttrType.minDC then
attrName = "物 理 攻 击 力 "
attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
if minValue > 0 or maxValue > 0 then
attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
end
else
attrName = SL:GetConfig('cfg_att_info', attr_id).showname
local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
if attrRemark == EAttrRemarkType.Number then
attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s", attrAddValue)
end
else
attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
end
end
end
GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
GUI:Text_setString(strength_add,string.format("%s",attrAddText))
end
--敏捷
function this:DataListAgItemCountFunc()
return table.count(self.agility_item)
end
function this:DataListAgItemGetFunc(realIndex)
end
function this:DataListAgItemInitFunc(realIndex, kmlcontrol)
--local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
--GUI:Text_setString(strength_info,"攻击力:100~1000")
end
function this:DataListAgItemUpdateFunc(realIndex, kmlcontrol)
local strength_info = GUI:GetChildControl(self.view.attInfoContent_agility_content,realIndex,'ag_info')
local ag_add = GUI:GetChildControl(self.view.attInfoContent_agility_content,realIndex,'ag_add')
local attr_id = self.agility_item[realIndex+1]
local attrName
local attrValue
local attrAddText = ""
local attrAddValue
if attr_id == EMUCharacterAttrType.minDC then
attrName = "物 理 攻 击 力 "
attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
if minValue > 0 or maxValue > 0 then
attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
end
else
attrName = SL:GetConfig('cfg_att_info', attr_id).showname
local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
if attrRemark == EAttrRemarkType.Number then
attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s", attrAddValue)
end
else
attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
end
end
end
GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
GUI:Text_setString(ag_add,string.format("%s",attrAddText))
end
-- 智力
function this:DataListInItemCountFunc()
return table.count(self.intelligence_item)
end
function this:DataListInItemGetFunc(realIndex)
end
function this:DataListInItemInitFunc(realIndex, kmlcontrol)
--local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
--GUI:Text_setString(strength_info,"攻击力:100~1000")
end
function this:DataListInItemUpdateFunc(realIndex, kmlcontrol)
local strength_info = GUI:GetChildControl(self.view.attInfoContent_intelligence_content,realIndex,'in_info')
local in_add = GUI:GetChildControl(self.view.attInfoContent_intelligence_content,realIndex,'in_add')
local attr_id = self.intelligence_item[realIndex+1]
local attrName
local attrValue
local attrAddText = ""
local attrAddValue
if attr_id == EMUCharacterAttrType.minDC then
attrName = "物 理 攻 击 力 "
attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
if minValue > 0 or maxValue > 0 then
attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
end
elseif attr_id == EMUCharacterAttrType.minMC then
attrName = "魔 法 攻 击 力 "
attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minMC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxMC))
local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minMC)
local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxMC)
if minValue > 0 or maxValue > 0 then
attrAddText = string.format("+ %s ~ %s",minValue, maxValue)
end
elseif attr_id == EMUCharacterAttrType.minZuZhou then
attrName = "诅 咒 攻 击 力 "
attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minZuZhou),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxZuZhou))
local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minZuZhou)
local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxZuZhou)
if minValue > 0 or maxValue > 0 then
attrAddText = string.format("+ %s ~ %s",minValue, maxValue)
end
else
attrName = SL:GetConfig('cfg_att_info', attr_id).showname
local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
if attrRemark == EAttrRemarkType.Number then
attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s", attrAddValue)
end
else
attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
end
end
end
GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
GUI:Text_setString(in_add,string.format("%s",attrAddText))
end
-- 体力
function this:DataListStItemCountFunc()
return table.count(self.spirit_item)
end
function this:DataListStItemGetFunc(realIndex)
end
function this:DataListStItemInitFunc(realIndex, kmlcontrol)
--local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
--GUI:Text_setString(strength_info,"攻击力:100~1000")
end
function this:DataListStItemUpdateFunc(realIndex, kmlcontrol)
local strength_info = GUI:GetChildControl(self.view.attInfoContent_stamina_content,realIndex,'st_info')
local st_add = GUI:GetChildControl(self.view.attInfoContent_stamina_content,realIndex,'st_add')
local attr_id = self.spirit_item[realIndex+1]
local attrName
local attrValue
local attrAddText = ""
local attrAddValue
if attr_id == EMUCharacterAttrType.minDC then
attrName = "物 理 攻 击 力 "
attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
if minValue > 0 or maxValue > 0 then
attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
end
else
attrName = SL:GetConfig('cfg_att_info', attr_id).showname
local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
if attrRemark == EAttrRemarkType.Number then
attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s", attrAddValue)
end
else
attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
end
end
end
GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
GUI:Text_setString(st_add,string.format("%s",attrAddText))
end
-- 统帅
function this:DataListLeItemCountFunc()
return table.count(self.lead_item)
end
function this:DataListLeItemGetFunc(realIndex)
end
function this:DataListLeItemInitFunc(realIndex, kmlcontrol)
--local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
--GUI:Text_setString(strength_info,"攻击力:100~1000")
end
function this:DataListLeItemUpdateFunc(realIndex, kmlcontrol)
local strength_info = GUI:GetChildControl(self.view.attInfoContent_command_content,realIndex,'le_info')
local le_add = GUI:GetChildControl(self.view.attInfoContent_command_content,realIndex,'le_add')
local attr_id = self.lead_item[realIndex+1]
local attrName
local attrValue
local attrAddText = ""
local attrAddValue
if attr_id == EMUCharacterAttrType.minDC then
attrName = "物 理 攻 击 力 "
attrValue = string.format("%s~%s", SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.minDC),SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.maxDC))
local minValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.minDC)
local maxValue = self:GetSpecialAttrAdd(EMUCharacterAttrType.maxDC)
if minValue > 0 or maxValue > 0 then
attrAddText = string.format("+ %s ~ %s", minValue, maxValue)
end
else
attrName = SL:GetConfig('cfg_att_info', attr_id).showname
local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
if attrRemark == EAttrRemarkType.Number then
attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s", attrAddValue)
end
else
attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
attrAddValue = self:GetSpecialAttrAdd(attr_id)
if attrAddValue > 0 then
attrAddText = string.format("+%s%%", self:GetSpecialAttrAdd(attr_id))
end
end
end
GUI:Text_setString(strength_info,string.format("%s:%s", attrName, attrValue))
GUI:Text_setString(le_add,string.format("%s",attrAddText))
end
-- 特殊
function this:DataListSpItemCountFunc()
return table.count(self.special_item)
end
function this:DataListSpItemGetFunc(realIndex)
end
function this:DataListSpItemInitFunc(realIndex, kmlcontrol)
--local strength_info = GUI:GetChildControl(self.view.attInfoContent_dc_content,realIndex,'strength_info')
--GUI:Text_setString(strength_info,"攻击力:100~1000")
end
function this:DataListSpItemUpdateFunc(realIndex, kmlcontrol)
local strength_panel = GUI:GetChildControl(self.view.attr_data_list,realIndex,'special_panel')
local strength_info = GUI:GetChildControl(self.view.attr_data_list,realIndex,'special_attr_name')
local strength_value = GUI:GetChildControl(self.view.attr_data_list,realIndex,'special_value')
local attr_id = self.special_item[realIndex+1]
local attrName = SL:GetConfig('cfg_att_info', attr_id).name
local attrRemark = SL:GetConfig('cfg_att_info', attr_id).remarks
local attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)
if attrValue == nil or attrValue == 0 then
GUI:setVisible(strength_panel, false)
return
end
GUI:setVisible(strength_panel, true)
if attrRemark == EAttrRemarkType.Dimi then
attrValue = string.format("%0.2f%%",SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", attr_id)/100)
end
GUI:Text_setString(strength_info,attrName)
GUI:Text_setString(strength_value,tostring(attrValue))
end
function this:RefreshRightAttr()
self.special_item = {}
local secondAttrTbl = this.GetRightTwoAttr()
for _, second_info in pairs(secondAttrTbl) do
local attrValue = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", second_info.id)
if attrValue ~= nil and attrValue ~= 0 then
table.insert(self.special_item, second_info.id)
end
end
GUI:DataListInitData( self.view.attr_data_list,function()
return self:DataListSpItemCountFunc()
end,function(realIndex)
return self:DataListSpItemGetFunc(realIndex)
end,function(realIndex, kmlcontrol)
return self:DataListSpItemInitFunc(realIndex, kmlcontrol)
end, function(realIndex, kmlcontrol)
return self:DataListSpItemUpdateFunc(realIndex, kmlcontrol)
end)
GUI:DataListUpdateData(self.view.attr_data_list)
end
---创建或者刷新界面数据时调用
function KLAttrPanel:Refresh()
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ROLE_ATT_ADD_WAY)
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ROLE_ATTR_POINT_PROGRAMME)
--GUI:DataListUpdateData(self.view.attInfoContent_dc_content)
--GUI:DataListUpdateData(self.view.attInfoContent_intelligence_content)
--GUI:DataListUpdateData(self.view.attInfoContent_command_content)
--GUI:DataListUpdateData(self.view.attInfoContent_stamina_content)
--GUI:DataListUpdateData(self.view.attInfoContent_agility_content)
self:RefreshRightAttr()
--设置名字
GUI:Text_setString(self.view.name, SL:GetMetaValue(EMetaVarGetKey.USER_NAME))
--设置职业
--local careerId = cfg_career_post.Get_cfg_career_id(SL:MeData_GetCareer())
local careerId = SL:CfgCareerPost_GetCfgCareerId(SL:MeData_GetCareer())
--local careerName = cfg_career_post.Get_cfg_career_name(careerId) or "未定义职业"
local careerName = SL:CfgCareerPost_GetCfgCareerName(careerId) or "未定义职业"
local serverName = SL:GetCurServerName()
GUI:Text_setString(self.view.regionAndCareer, string.format("[%s-%s]", serverName, careerName))
--等级
local level = SL:MeData_GetLevel()
GUI:Text_setString(self.view.levelText, "等级:" .. level)
--剩余点数
self:SetFreePoint()
--经验
self:RefreshExpText()
--力量等属性
self:SetAddNumInfo()
self:SetAddSubBtnState()
self:ShowFruitButton()
self:ShowFruitPanel(self.args and self.args.isShowFruit)
SL.HideMainPanel()
self:SetFreeSwitchAttrPoint(true)
end
function this:SetFreeSwitchAttrPoint(isShow)
if isShow then
GUI:setVisible(self.view.btn_exchange_point, PrivilegeCardManager.GetFreeSwitchAttrPoint())
else
GUI:setVisible(self.view.btn_exchange_point,false)
end
end
function this:ShowFruitButton()
---@type cfg_global_column
local cfg = SL:GetConfig("cfg_global",3003)
---果实是否开放
self.isFruitOpen = SL:MeData_GetLevel() >= tonumber(cfg.value)
GUI:SetActive(self.view.appleButton,self.isFruitOpen)
SL:RefreshPanelALLRedPoint("KLAttrPanel")
end
---注册UI事件和服务器消息
function KLAttrPanel:RegistEvents()
SL:RegisterLUAEvent(LUA_EVENT_EXPCHANGE,self.LUA_EVENT_EXPCHANGE,self)
SL:RegisterLUAEvent(LUA_EVENT_ROLE_PROPERTY_CHANGE,self.LUA_EVENT_ROLE_PROPERTY_CHANGE,self)
SL:RegisterLUAEvent(LUA_EVENT_SURE_ATTR_PLAN,self.LUA_EVENT_SURE_ATTR_PLAN,self)
SL:RegisterLUAEvent(LUA_EVENT_RESET_POINT,self.LUA_EVENT_RESET_POINT,self)
SL:RegisterLUAEvent(LUA_EVENT_FRUIT_PANEL_CLOSE, self.CloseFruitPanel, self)
--SL:RegisterLuaNetMsg(MessageDef.ResRoleDeployAttrPointMessage,self.ResRoleDeployAttrPointMessage,self)
--SL:RegisterLuaNetMsg(MessageDef.ResAttAddWayMessage,self.ResAttAddWayMessage,self)
GUI:AddOnClickEvent(self.view.attrCloseButton,self,self.OnClickCloseButton)
GUI:AddOnClickEvent(self.view.CloseButton,self,self.OnClickCloseButton)
GUI:AddOnClickEvent(self.view.plusButton_dc,self,self.plusButton_dc)
GUI:AddOnClickEvent(self.view.plusButton_stamina,self,self.plusButton_stamina)
GUI:AddOnClickEvent(self.view.plusButton_intelligence,self,self.plusButton_intelligence)
GUI:AddOnClickEvent(self.view.plusButton_command,self,self.plusButton_command)
GUI:AddOnClickEvent(self.view.plusButton_agility,self,self.plusButton_agility)
GUI:AddOnClickEvent(self.view.minusButton_dc,self,self.minusButton_dc)
GUI:AddOnClickEvent(self.view.minusButton_stamina,self,self.minusButton_stamina)
GUI:AddOnClickEvent(self.view.minusButton_intelligence,self,self.minusButton_intelligence)
GUI:AddOnClickEvent(self.view.minusButton_command,self,self.minusButton_command)
GUI:AddOnClickEvent(self.view.minusButton_agility,self,self.minusButton_agility)
GUI:AddOnClickEvent(self.view.sureButton,self,self.sureButton)
GUI:AddOnClickEvent(self.view.commandButton,self,self.commandButton)
GUI:AddOnClickEvent(self.view.resetPointButton,self,self.resetPointButton)
GUI:AddOnClickEvent(self.view.appleButton,self,self.OnClickApple)
GUI:AddOnClickEvent(self.view.btn_exchange_point,self,self.btn_exchange_point)
end
---果实按钮
function this:OnClickApple()
self:ShowFruitPanel(not self.isShowFruitUI)
end
function this:CloseFruitPanel()
self:ShowFruitPanel(false)
end
---显示果实界面
function this:ShowFruitPanel(isShow)
self.isShowFruitUI = isShow
GUI:SetActive(self.view.AttrEffect,not isShow)
if isShow then
GUI:setPosition(self.view.root,-90,0)
GUI:UIPanel_Open("dev/outui/UIFruit/Panel/KLUIFruit/KLUIFruitPanel")
else
GUI:setPosition(self.view.root,5,0)
GUI:UIPanel_Close("dev/outui/UIFruit/Panel/KLUIFruit/KLUIFruitPanel")
end
end
function this:btn_exchange_point()
GUI:UIPanel_Open("dev/outui/Role/Panel/KLChangeAttrScheme/KLChangeAttrSchemePanel")
end
function this:resetPointButton()
GUI:UIPanel_Open("dev/ui/Role/Item/KLResetPoint/KLResetPointItem",nil,self)
end
function this:commandButton()
local attAddWay = SL:MeData_GetRoleExtInfo().attAddWay
--local attAddWay = 0
if attAddWay == -1 then
---@type cfg_career_column
local tbl = SL:GetMetaValue(EMetaVarGetKey.ME_CAREER_TAB_COLUMN)
GUI:UIPanel_Open("dev/outui/Role/Panel/KLAttPointSuitChoice/KLAttPointSuitChoicePanel",nil,nil,{curCareer=tbl.id})
return
end
local tbl = SL:GetConfigMultiKeys('cfg_career', SL:MeData_GetCareer().baseCareer, SL:MeData_GetCareer().careerRank, 'baseCareer', 'careerRank')
commandAdd = tbl.careerRec
if commandAdd == nil or not next(commandAdd) then
logError("推荐加点方案为空")
return
end
commandAdd = commandAdd[attAddWay+1]
-- 每个属性分配点数: 可用点数/(力量+敏捷+体力+智力+统帅) 除后的商 乘以具体的属性值 余数加到职业对应优势属性上
local totalCount = 0
for _, attrCount in pairs(commandAdd) do
totalCount = totalCount + attrCount
end
-- 除数为0, 不执行推荐加点逻辑。
if totalCount == 0 then
return
end
local addCount = self.freePoint // totalCount
self.add_strength = self.add_strength + commandAdd[1] * addCount
self.add_spirit = self.add_spirit + commandAdd[3] * addCount
self.add_intelligence = self.add_intelligence + commandAdd[4] * addCount
self.add_lead = self.add_lead + commandAdd[5] * addCount
self.add_agility = self.add_agility + commandAdd[2] * addCount
self.freePoint = self.freePoint - addCount * totalCount
-- 余数加到职业对应优势属性上
-- 优势属性:推荐加点中比例最大的属性,如果存在同比例的属性,则按照力量>敏捷>体力>智力>统帅来(按照commandAdd的最先最大的.)
if self.freePoint > 0 then
local maxCount = -1
local selectIndex= -1
for attrIndex, count in pairs(commandAdd) do
if maxCount < count then
maxCount = count
selectIndex = attrIndex
end
end
if selectIndex == 1 then
self.add_strength = self.add_strength + self.freePoint
elseif selectIndex == 2 then
self.add_agility = self.add_agility + self.freePoint
elseif selectIndex == 3 then
self.add_spirit = self.add_spirit + self.freePoint
elseif selectIndex == 4 then
self.add_intelligence = self.add_intelligence + self.freePoint
elseif selectIndex == 5 then
self.add_lead = self.add_lead + self.freePoint
end
self.freePoint = 0
end
self:SetFreePoint()
self:SetAddNumInfo()
self:SetAddSubBtnState()
end
function this:ResRoleDeployAttrPointMessage()
--剩余点数
--local freePoint = SL:MeData_GetRoleExtInfo().remainAttrPoint or 0
--GUI:Text_setString(self.view.remainPointText, tostring(freePoint))
--力量等属性
self:SetAddNumInfo()
end
function this:sureButton()
local sendData = {}
if self.add_strength > 0 then
table.insert(sendData, { type = EMUCharacterAttrType.strength, num = self.add_strength })
end
if self.add_agility > 0 then
table.insert(sendData, { type = EMUCharacterAttrType.agility, num = self.add_agility })
end
if self.add_lead > 0 then
table.insert(sendData, { type = EMUCharacterAttrType.lead, num = self.add_lead })
end
if self.add_intelligence > 0 then
table.insert(sendData, { type = EMUCharacterAttrType.intelligence, num = self.add_intelligence })
end
if self.add_spirit > 0 then
table.insert(sendData, { type = EMUCharacterAttrType.spirit, num = self.add_spirit })
end
SL.RoleAtt:ReqDeployAttrPoint(sendData,1)
self:SaveEachPlanAttrPoint(sendData)
self:Reset()
end
function this:SaveEachPlanAttrPoint(data)
local sendData = {}
local tempData = {}
local oldData = PrivilegeCardManager.GetCurrentAttrPointPlan()
if oldData then
for i, v in pairs(oldData) do
tempData[v.type] = v.num
end
for i, v in pairs(data) do
if tempData[v.type] then
tempData[v.type] = tempData[v.type] + v.num
else
tempData[v.type] = v.num
end
end
for i, v in pairs(tempData) do
local tbl = {}
tbl.type = i
tbl.num = v
sendData[#sendData + 1] = tbl
end
else
sendData = data
end
PrivilegeCardManager.SendMessageSetFreeAttrInfo(nil, sendData, nil)
end
function this:Reset()
self.add_strength = 0
self.add_agility = 0
self.add_lead = 0
self.add_intelligence = 0
self.add_spirit = 0
self:SetAddNumInfo()
self:SetAddSubBtnState()
end
function this:plusButton_dc()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {x=-278, maxNum=self.freePoint, callback=self.plus_dc, ins=self, intro="增加点数"})
return
end
if self.freePoint > 0 then
self.freePoint = self.freePoint - 1
self.add_strength = self.add_strength + 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:plus_dc(addValue)
self.freePoint = self.freePoint - addValue
self.add_strength = self.add_strength + addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:plusButton_stamina()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_sta, ins=self, intro="增加点数"})
return
end
if self.freePoint > 0 then
self.freePoint = self.freePoint - 1
self.add_spirit = self.add_spirit + 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:plus_sta(addValue)
self.freePoint = self.freePoint - addValue
self.add_spirit = self.add_spirit + addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:plusButton_intelligence()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_intel, ins=self, intro="增加点数"})
return
end
if self.freePoint > 0 then
self.freePoint = self.freePoint - 1
self.add_intelligence = self.add_intelligence + 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:plus_intel(addValue)
self.freePoint = self.freePoint - addValue
self.add_intelligence = self.add_intelligence + addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:plusButton_command()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_lead, ins=self, intro="增加点数"})
return
end
if self.freePoint > 0 then
self.freePoint = self.freePoint - 1
self.add_lead = self.add_lead + 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:plus_lead(addValue)
self.freePoint = self.freePoint - addValue
self.add_lead = self.add_lead + addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:plusButton_agility()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.freePoint, callback=self.plus_ag, ins=self, intro="增加点数"})
return
end
if self.freePoint > 0 then
self.freePoint = self.freePoint - 1
self.add_agility = self.add_agility + 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:plus_ag(addValue)
self.freePoint = self.freePoint - addValue
self.add_agility = self.add_agility + addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:minusButton_agility()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_agility, callback=self.minus_ag, ins=self, intro="减少点数"})
return
end
if self.add_agility > 0 then
self.freePoint = self.freePoint + 1
self.add_agility = self.add_agility - 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:minus_ag(addValue)
self.freePoint = self.freePoint + addValue
self.add_agility = self.add_agility - addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:minusButton_dc()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_strength, callback=self.minus_dc, ins=self, intro="减少点数"})
return
end
if self.add_strength > 0 then
self.freePoint = self.freePoint + 1
self.add_strength = self.add_strength - 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:minus_dc(addValue)
self.freePoint = self.freePoint + addValue
self.add_strength = self.add_strength - addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:minusButton_stamina()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_spirit, callback=self.minus_sta, ins=self, intro="减少点数"})
return
end
if self.add_spirit > 0 then
self.freePoint = self.freePoint + 1
self.add_spirit = self.add_spirit - 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:minus_sta(addValue)
self.freePoint = self.freePoint + addValue
self.add_spirit = self.add_spirit - addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:minusButton_intelligence()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_intelligence, callback=self.minus_intel, ins=self, intro="减少点数"})
return
end
if self.add_intelligence > 0 then
self.freePoint = self.freePoint + 1
self.add_intelligence = self.add_intelligence - 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:minus_intel(addValue)
self.freePoint = self.freePoint + addValue
self.add_intelligence = self.add_intelligence - addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:minusButton_command()
if SL:MeData_GetRoleExtInfo().RemainAttrPoint > self.calcShowPoint then
GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil, {maxNum=self.add_lead, callback=self.minus_le, ins=self, intro="减少点数"})
return
end
if self.add_lead > 0 then
self.freePoint = self.freePoint + 1
self.add_lead = self.add_lead - 1
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
end
function this:minus_le(addValue)
self.freePoint = self.freePoint + addValue
self.add_lead = self.add_lead - addValue
self:SetAddSubBtnState()
self:SetFreePoint()
self:SetAddNumInfo()
end
function this:OnClickCloseButton()
GUI:UIPanel_Close("dev/ui/Role/Panel/KLAttr/KLAttrPanel")
GUI:UIPanel_Close("dev/ui/Common/Panel/KLCalc/KLCalcPanel")
SL.ShowMainPanel()
end
function this:Close()
self:ShowFruitPanel(false)
end
function this:LUA_EVENT_EXPCHANGE()
self:RefreshExpText()
end
function this:LUA_EVENT_ROLE_PROPERTY_CHANGE()
SL:RefreshPanelALLRedStateKmlByCondition("checkUnusedAbility")
self:SetAddNumInfo()
self:RefreshRightAttr()
if PrivilegeCardManager.attrNeedRefresh then
SL:ScheduleOnce(0.1, function()
PrivilegeCardManager.attrNeedRefresh = false
self:ResetUi()
end)
end
end
---@param message RoleProtos.DeployResult
function this:LUA_EVENT_RESET_POINT(id, message)
self:ResetUi()
SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_GET_ROLE_ATT_ADD_WAY)
end
---@param message UserProtos.SetRoleAttAddWay
function this:LUA_EVENT_SURE_ATTR_PLAN(id, message)
self:SetFreePoint()
--self:commandButton()
end
function this:ResetUi()
self.freePoint = SL:MeData_GetRoleExtInfo().RemainAttrPoint
self:SetFreePoint()
self.add_strength = 0
self.add_agility = 0
self.add_intelligence = 0
self.add_spirit = 0
self.add_lead = 0
self:SetAddNumInfo()
self:SetAddSubBtnState()
end
function this:RefreshExpText()
local nowExp = SL:MeData_GetRoleExtInfo().exp + SL:MeData_GetRoleExtInfo().expandExp
local needExp = SL:GetConfig("cfg_level", SL:MeData_GetLevel()).exp
if needExp == 0 then
if SL:HasConfig("cfg_level", SL:MeData_GetLevel() + 1) then
needExp = SL:GetConfig("cfg_level", SL:MeData_GetLevel() + 1).exp
end
end
GUI:Text_setString(self.view.expText, string.format("经验值:%s/%s", Misc.GetSampleNumberString(nowExp), Misc.GetSampleNumberString(needExp)))
end
-- 分配点数按钮显隐
function this:SetAddSubBtnState()
if self.freePoint == 0 then
GUI:setVisible(self.view.plusButton_dc, false)
GUI:setVisible(self.view.plusButton_agility, false)
GUI:setVisible(self.view.plusButton_command, false)
GUI:setVisible(self.view.plusButton_intelligence, false)
GUI:setVisible(self.view.plusButton_stamina, false)
else
GUI:setVisible(self.view.plusButton_dc, true)
GUI:setVisible(self.view.plusButton_agility, true)
GUI:setVisible(self.view.plusButton_command, true)
GUI:setVisible(self.view.plusButton_intelligence, true)
GUI:setVisible(self.view.plusButton_stamina, true)
end
GUI:setVisible(self.view.minusButton_agility, self.add_agility > 0 and true or false)
GUI:setVisible(self.view.minusButton_intelligence, self.add_intelligence > 0 and true or false)
GUI:setVisible(self.view.minusButton_command, self.add_lead > 0 and true or false)
GUI:setVisible(self.view.minusButton_stamina, self.add_spirit > 0 and true or false)
GUI:setVisible(self.view.minusButton_dc, self.add_strength > 0 and true or false)
if self.add_spirit | self.add_intelligence | self.add_lead + self.add_agility | self.add_strength > 0 then
GUI:setVisible(self.view.sureButton, true)
GUI:setVisible(self.view.light_btn1, true)
GUI:SetActive(self.view.appleButton,false)
self:SetFreeSwitchAttrPoint(false)
else
GUI:setVisible(self.view.sureButton, false)
GUI:setVisible(self.view.light_btn1, false)
if self.isFruitOpen then
GUI:SetActive(self.view.appleButton,true)
end
self:SetFreeSwitchAttrPoint(true)
end
end
function this:SetFreePoint()
GUI:Text_setString(self.view.remainPointText, tostring(self.freePoint))
if self.freePoint > 0 then
GUI:setVisible(self.view.commandButton, true)
GUI:setVisible(self.view.light_btn, true)
else
GUI:setVisible(self.view.commandButton, false)
GUI:setVisible(self.view.light_btn, false)
end
if SL:MeData_GetRoleExtInfo().attAddWay == -1 then
GUI:Text_setString(self.view.commandButton_text, "职业切换")
else
GUI:Text_setString(self.view.commandButton_text, "推荐加点")
end
--GUI:Text_setString(self.view.commandButton_text, "推荐加点")
end
function this:SetAddNumInfo()
local strength = SL:GetMetaValue("GET_ATTR_VALUE_BY_ID", EMUCharacterAttrType.strength)
if self.add_strength > 0 then
GUI:Text_setString(self.view.num_dc, string.format("%s + %s", strength, self.add_strength))
else
GUI:Text_setString(self.view.num_dc, tostring(strength))
end
local agility = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.agility)
if self.add_agility > 0 then
GUI:Text_setString(self.view.num_agility, string.format("%s + %s", agility, self.add_agility))
else
GUI:Text_setString(self.view.num_agility, tostring(agility))
end
local intelligence = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.intelligence)
if self.add_intelligence > 0 then
GUI:Text_setString(self.view.num_intelligence, string.format("%s + %s", intelligence, self.add_intelligence))
else
GUI:Text_setString(self.view.num_intelligence, tostring(intelligence))
end
local spirit = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.spirit)
if self.add_spirit > 0 then
GUI:Text_setString(self.view.num_stamina, string.format("%s + %s", spirit, self.add_spirit))
else
GUI:Text_setString(self.view.num_stamina, tostring(spirit))
end
local lead = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.lead)
if self.add_lead > 0 then
GUI:Text_setString(self.view.num_command, string.format("%s + %s", lead, self.add_lead))
else
GUI:Text_setString(self.view.num_command, tostring(lead))
end
GUI:DataListUpdateData(self.view.attInfoContent_dc_content)
GUI:DataListUpdateData(self.view.attInfoContent_intelligence_content)
GUI:DataListUpdateData(self.view.attInfoContent_command_content)
GUI:DataListUpdateData(self.view.attInfoContent_stamina_content)
GUI:DataListUpdateData(self.view.attInfoContent_agility_content)
end
function this:GetSpecialAttrAdd(addAttrId)
if not SL:HasConfig("cfg_att_info", addAttrId) then
logError("改属性id不存在")
return 0
end
local cfgInfo = SL:GetConfig("cfg_att_info", addAttrId)
local addInfo = SL:GetMetaValue(EMetaVarGetKey.GET_ADD_PER,cfgInfo.attribute)
-- 获取当前二级属性的属性值, 因为服务端发的是整数(抹去小数点), 数值减差值前要对差值/10000进行处理.
-- 属性类型是数值的处理:1.5+1.6=3.1 要显示+2, 因为是从1->3, 所以计算方式为抹小数点的结果减去抹小数点的起始值 3-1=2
-- 是万分比的话 15.25%-> 20.00%, (2000-1525) / 100 = 4.75
local nowAttr = 0
local attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.strength).attribute
local nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.strength)
nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.agility).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.agility)
nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.spirit).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.spirit)
nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.intelligence).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.intelligence)
nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.lead).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.lead)
nowAttr = nowAttr + addInfo[attrName] * nowAttrPoint
local addTotalAttr = 0
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.strength).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.strength)
addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_strength)
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.agility).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.agility)
addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_agility)
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.spirit).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.spirit)
addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_spirit)
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.intelligence).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.intelligence)
addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_intelligence)
attrName = SL:GetConfig("cfg_att_info", EMUCharacterAttrType.lead).attribute
nowAttrPoint = SL:MeData_GetSpecialAttrValue(EMUCharacterAttrType.lead)
addTotalAttr = addTotalAttr + addInfo[attrName] * (nowAttrPoint + self.add_lead)
-- 数值的
if cfgInfo.remarks == EAttrRemarkType.Number then
return addTotalAttr // 10000 - nowAttr // 10000
elseif cfgInfo.remarks == EAttrRemarkType.Dimi then
return (addTotalAttr - nowAttr) / 100
else
logError("属性数值类型非数值或万分比,需要策划告知处理规则, attrId = " .. addAttrId)
return 0
end
end
return KLAttrPanel