TwoWeaponsAttrs = {} local this = {} local BasicAttrs = { [200012] = {0.55, 0.65}, [200022] = {0.55, 0.65}, [201011] = {0.55, 0.65}, [201021] = {0.55, 0.65}, [201041] = {0.55, 0.65}, [213011] = {0.50, 0.50} } local Quivers = { [2025826192] = 1, -- 战斗箭筒 [2025826193] = 1, -- 箭筒 [20230111] = 1 -- 箭袋 } local QuiverAttrs = { [213011] = 1 -- 攻速 } function TwoWeaponsAttrs.addAttrs(tab, attrId, value) if tab[attrId] == nil then tab[attrId] = 0 end tab[attrId] = tab[attrId] + value end function TwoWeaponsAttrs.updateAttrs(actor, pos) -- 1主手武器 2副手武器 3主副手武器 -- 如果是武器就需要重新算属性. local equips = getputonequipinfo(actor) local weapons = {} for k, v in pairs(equips) do local pos = gameequip.pos(v.equipindex) if pos <= 3 and pos >= 1 then table.insert(weapons, v) end end if table.count(weapons) <= 1 then this.addAngelEquipAttr(actor, {}, 100) return end local apos = gameequip.pos(weapons[1].equipindex) if apos == 2 then local e1 = weapons[2] weapons[2] = weapons[1] weapons[1] = weapons[e1] end -- 如果副手武器是盾牌.则跳过 local cfgEquip = ConfigDataManager.getById("cfg_equip_entryLib", weapons[2].cfgid) if cfgEquip.replacerating ~= nil and string.startsWith(cfgEquip.replacerating, "3#") then this.addAngelEquipAttr(actor, {}, 100) return end local isDiffWeapon = weapons[1].cfgid ~= weapons[2].cfgid local entryRate = isDiffWeapon and 1 or 1 local attackRateIndex = isDiffWeapon and 1 or 2 local isQuiver = Quivers[weapons[2].cfgid] ~= nil -- 把已增加的属性都加起来。 -- 把应该增加的属性都加起来。 -- 把多加的属性减掉 local curBasicattrs = {} local targetBasicattrs = {} for _, weapon in pairs(weapons) do local basicattr = weapon.basicattr for _, v in pairs(basicattr) do TwoWeaponsAttrs.addAttrs(curBasicattrs, v.attrid, v.value) local basicAttrsRate = BasicAttrs[v.attrid] if basicAttrsRate ~= nil then TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * basicAttrsRate[attackRateIndex]) else TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * entryRate) end end local strengthattr = EquipFunc.getEquipStrengthWearAddAttr(actor, weapon.id) for k, v in pairs(strengthattr) do local attrid = tonumber(k) local value = tonumber(v) TwoWeaponsAttrs.addAttrs(curBasicattrs, attrid, value) local basicAttrsRate = BasicAttrs[v.attrid] if basicAttrsRate ~= nil then TwoWeaponsAttrs.addAttrs(targetBasicattrs, attrid, value * basicAttrsRate[attackRateIndex]) else TwoWeaponsAttrs.addAttrs(targetBasicattrs, attrid, value * entryRate) end end end if isQuiver then curBasicattrs = {} targetBasicattrs = {} -- 箭筒只减攻速 for _, weapon in pairs(weapons) do local basicattr = weapon.basicattr for _, v in pairs(basicattr) do if QuiverAttrs[v.attrid] ~= nil then TwoWeaponsAttrs.addAttrs(curBasicattrs, v.attrid, v.value) local basicAttrsRate = BasicAttrs[v.attrid] if basicAttrsRate ~= nil then TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * basicAttrsRate[attackRateIndex]) else TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * entryRate) end end end end end local addAttr = {} for k, v in pairs(curBasicattrs) do local targetAttr = targetBasicattrs[k] local curAttr = curBasicattrs[k] if targetAttr ~= curAttr then addAttr[k] = targetAttr - curAttr end end this.addAngelEquipAttr(actor, addAttr, 100) end --- 给角色添加大天使装备对应的属性 ---@param actor table 角色对象 ---@param basicAtt string 增加的属性 ---@param itemId number 道具id function this.addAngelEquipAttr(actor, basicAtt, itemId) -- 表里配的不是增长的属性值,所以此处先清空之前增加的属性值再做添加属性操作 local attrKey = string.format(RoleAttrKey.TWOWEAPONSATTRS, itemId) RoleAttr.clearRoleAttrAndDB(actor, attrKey) RoleAttr.addAndSaveRoleAttr(actor, attrKey, basicAtt) end