Formula Source
function CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger) local elementInc = 0 local elementRed = 0 local srcAtkElement = CommonFun.GetUserAtkAttr(srcUser, params, damageParam) local targetDefElement = targetUser:GetProperty("DefAttr") if srcUser:HasBuffID(1009022) then targetDefElement = 7 end if nil == srcAtkElement then logger.error(string.format("%s srcAtkElement is nil", srcUser.name)) return 0 end if nil == targetDefElement then logger.error(string.format("%s targetDefElement is nil", targetUser.name)) return 0 end if nil == CommonFun.NatureProps[targetDefElement] then logger.error(string.format("%s CommonFun.NatureProps[%s] is nil", srcUser.name, tostring(targetDefElement))) return 0 end if nil == CommonFun.NatureProps[srcAtkElement] then logger.error(string.format("CommonFun.NatureProps[%s] is nil", tostring(srcAtkElement))) return 0 end elementInc = srcUser:GetProperty(CommonFun.NatureProps[targetDefElement][1]) elementRed = targetUser:GetProperty(CommonFun.NatureProps[srcAtkElement][2]) elementAtk = srcUser:GetProperty(CommonFun.NatureProps[srcAtkElement][3]) if nil == elementAtk then elementAtk = 0 end local xinnian = 0 local skill_xinnian3 = srcUser:GetLernedSkillLevel(6013) local skill_xinnian1 = srcUser:GetLernedSkillLevel(6011) if srcUser:HasBuffID(1010201) then local layer_xinnian = srcUser:GetBuffLayer(1010201) xinnian = skill_xinnian3 * 0.01 * (1 + (layer_xinnian - 1) * (0.15 + skill_xinnian1 * 0.05)) end local skilllv = srcUser:GetLernedSkillLevel(306) local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) if 5 < skilllv and skillID == 306 or skillID == 3303 or skillID == 819 then elementRed = math.max(elementRed - 0.06 * (skilllv - 5) - xinnian, 0) end if skillID == 1288 or skillID == 1812 or skillID == 4310 then local GemValue = srcUser:GetGemValue(61002) elementRed = math.max(elementRed - GemValue / 100000, 0) end local skilllv1 = srcUser:GetLernedSkillLevel(4762) if skillID == 4763 or skillID == 4764 or skillID == 4766 then raceRed = math.max(elementRed - 0.02 * skilllv1, 0) end local result = 1 + elementAtk - elementRed local mapid, maptype = srcUser:GetMapInfo() if (maptype == 2 or maptype == 4) and targetUser:GetNpcID() ~= 40022 then local pvpReduce = 0 local Master = targetUser:GetMasterUser() if targetUser:GetNpcID() == 0 or Master ~= nil then pvpReduce = 0.2 end local B = elementRed - elementAtk B = B < -1 and -1 or 1 < B and 1 or B B = math.floor(B * 1000) / 1000 B = B + 0.2 * (1 - math.sin(B * 3.14 / 2)) + pvpReduce result = 1 - B end if result <= 0.15 then result = 0.15 end return result end
No formula links
Changes: 20251127_update vs 20251105_standard_instalation
function CommonFun.CalcElementParam2(srcUser, targetUser, params, damageParam, logger) local elementInc = 0 local elementRed = 0 local srcAtkElement = CommonFun.GetUserAtkAttr(srcUser, params, damageParam) local targetDefElement = targetUser:GetProperty("DefAttr") - if srcUser:HasBuffID(20510031) then + if srcUser:HasBuffID(1009022) then targetDefElement = 7 end if nil == srcAtkElement then logger.error(string.format("%s srcAtkElement is nil", srcUser.name)) return 0 end if nil == targetDefElement then logger.error(string.format("%s targetDefElement is nil", targetUser.name)) return 0 end if nil == CommonFun.NatureProps[targetDefElement] then logger.error(string.format("%s CommonFun.NatureProps[%s] is nil", srcUser.name, tostring(targetDefElement))) return 0 end if nil == CommonFun.NatureProps[srcAtkElement] then logger.error(string.format("CommonFun.NatureProps[%s] is nil", tostring(srcAtkElement))) return 0 end elementInc = srcUser:GetProperty(CommonFun.NatureProps[targetDefElement][1]) elementRed = targetUser:GetProperty(CommonFun.NatureProps[srcAtkElement][2]) elementAtk = srcUser:GetProperty(CommonFun.NatureProps[srcAtkElement][3]) if nil == elementAtk then elementAtk = 0 end local xinnian = 0 local skill_xinnian3 = srcUser:GetLernedSkillLevel(6013) local skill_xinnian1 = srcUser:GetLernedSkillLevel(6011) if srcUser:HasBuffID(1010201) then local layer_xinnian = srcUser:GetBuffLayer(1010201) xinnian = skill_xinnian3 * 0.01 * (1 + (layer_xinnian - 1) * (0.15 + skill_xinnian1 * 0.05)) end local skilllv = srcUser:GetLernedSkillLevel(306) local skillID, skillLevel = CommonFun.UnmergeSkillID(params.skillIDAndLevel) if 5 < skilllv and skillID == 306 or skillID == 3303 or skillID == 819 then elementRed = math.max(elementRed - 0.06 * (skilllv - 5) - xinnian, 0) end if skillID == 1288 or skillID == 1812 or skillID == 4310 then local GemValue = srcUser:GetGemValue(61002) elementRed = math.max(elementRed - GemValue / 100000, 0) end local skilllv1 = srcUser:GetLernedSkillLevel(4762) if skillID == 4763 or skillID == 4764 or skillID == 4766 then raceRed = math.max(elementRed - 0.02 * skilllv1, 0) end local result = 1 + elementAtk - elementRed + local mapid, maptype = srcUser:GetMapInfo() if (maptype == 2 or maptype == 4) and targetUser:GetNpcID() ~= 40022 then local pvpReduce = 0 local Master = targetUser:GetMasterUser() if targetUser:GetNpcID() == 0 or Master ~= nil then pvpReduce = 0.2 end local B = elementRed - elementAtk B = B < -1 and -1 or 1 < B and 1 or B B = math.floor(B * 1000) / 1000 B = B + 0.2 * (1 - math.sin(B * 3.14 / 2)) + pvpReduce result = 1 - B end if result <= 0.15 then result = 0.15 end return result end