Formula Source
function CommonFun.CalcShareDamage(srcUser, tUser, damage, damagetype) if Table_Buffer == nil then return damage, nil end local result local newdamage = damage local buffs = { 70047011, 115001, 115002, 116260, 116261, 116262, 116263, 116264, 116265, 116266, 116267, 116268, 116269, 181171, 181173, 181175, 1004100 } if buffs == nil or #buffs == 0 then return damage, nil end local findok = false local buffID, oneresult for i = 1, #buffs do buffID = buffs[i] local buff = Table_Buffer[buffID] if tUser:HasBuffID(buffID) and buff ~= nil and buff.BuffEffect ~= nil and buff.BuffEffect.shareper ~= nil then local shareTargetID = tUser:GetBuffFromID(buffID) if buff.BuffEffect.share_to_being == 1 then shareTargetID = tUser:GetHighHpBeingGUID() end if shareTargetID ~= 0 and (buff.BuffEffect.checkbuff == nil or CommonFunHelper.HasBuffID(shareTargetID, buff.BuffEffect.checkbuff) == true) and (buff.BuffEffect.range == nil or tUser:GetDistance(shareTargetID) <= buff.BuffEffect.range) then local perdam = buff.BuffEffect.shareper * damage local decPerdam = perdam local damtype = damagetype local Rune = CommonFunHelper.GetBuffLayer(shareTargetID, 41100060) local dunpai = 0 if CommonFunHelper.HasBuffID(shareTargetID, 40490) == true then dunpai = 0.05 end if CommonFunHelper.HasBuffID(shareTargetID, 90001803) == true then dunpai = 0.1 end if CommonFunHelper.HasBuffID(shareTargetID, 43280) == true then dunpai = 0.1 end if CommonFunHelper.HasBuffLayer(shareTargetID, 43280, EBUFFERLAYER_SHADOW) == true then local equipRingSD = srcUser:getEquip(CommonFun.PackType.EPACKTYPE_SHADOWEQUIP, CommonFun.EquipPos.EEQUIPPOS_SHIELD) if equipRingSD.id ~= 0 then dunpai = 0.1 * equipRingSD.quench_per / 100 end end local huangjia = 0 if CommonFunHelper.HasBuffID(shareTargetID, 91000400) == true then huangjia = 0.1 end perdam = perdam * (1 - Rune * 0.08 - dunpai - huangjia) if buff.BuffEffect.autoblock == 1 then local bits3 = CommonFun.getBits(CommonFunHelper.GetProperty(shareTargetID, "AttrEffect2")) if bits3 ~= nil and bits3[CommonFun.AttrEffect2.AutoDef] == 1 then local skilllv_1 = 0 if tUser.isServerCall then skilllv_1 = CommonFunHelper.GetLernedSkillLevel(shareTargetID, 356) else local sklvbuffeff = CommonFunHelper.GetBuffEffectByType(shareTargetID, "SkillLevel") if sklvbuffeff and sklvbuffeff.level then skilllv_1 = sklvbuffeff.level else skilllv_1 = 1 end end local rate = skilllv_1 * 4 + 10 if CommonFun.IsInRate(rate, srcUser:GetRandom()) then perdam = 0 damtype = CommonFun.DamageType.AutoBlock end end end if buff.BuffEffect.overflow == 1 then local hp = CommonFunHelper.GetUserHP(shareTargetID) if perdam > hp then if decPerdam >= perdam then decPerdam = decPerdam - perdam + hp else decPerdam = hp end perdam = hp end end findok = true newdamage = newdamage - decPerdam oneresult = share_temp_result[shareTargetID] if oneresult == nil then local oneresult = {} oneresult.damage = perdam oneresult.type = damtype oneresult.charid = shareTargetID share_temp_result[shareTargetID] = oneresult else oneresult.damage = oneresult.damage + perdam end end end end if findok == true then result = {} for k, v in pairs(share_temp_result) do if v.damage ~= 0 or v.type == CommonFun.DamageType.AutoBlock then table.insert(result, v) share_temp_result[k] = nil end end end if 0 < damage and newdamage < 0 then newdamage = 0 end if newdamage == 0 then damagetype = CommonFun.DamageType.None end return newdamage, result, damagetype end
No formula links