TwoWeaponsAttrs.lua 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. TwoWeaponsAttrs = {}
  2. local this = {}
  3. local BasicAttrs = {
  4. [200012] = {0.55, 0.65},
  5. [200022] = {0.55, 0.65},
  6. [201011] = {0.55, 0.65},
  7. [201021] = {0.55, 0.65},
  8. [201041] = {0.55, 0.65},
  9. [213011] = {0.50, 0.50}
  10. }
  11. local Quivers = {
  12. [2025826192] = 1, -- 战斗箭筒
  13. [2025826193] = 1, -- 箭筒
  14. [20230111] = 1 -- 箭袋
  15. }
  16. local QuiverAttrs = {
  17. [213011] = 1 -- 攻速
  18. }
  19. function TwoWeaponsAttrs.addAttrs(tab, attrId, value)
  20. if tab[attrId] == nil then
  21. tab[attrId] = 0
  22. end
  23. tab[attrId] = tab[attrId] + value
  24. end
  25. function TwoWeaponsAttrs.updateAttrs(actor, pos)
  26. -- 1主手武器 2副手武器 3主副手武器
  27. -- 如果是武器就需要重新算属性.
  28. local equips = getputonequipinfo(actor)
  29. local weapons = {}
  30. for k, v in pairs(equips) do
  31. local pos = gameequip.pos(v.equipindex)
  32. if pos <= 3 and pos >= 1 then
  33. table.insert(weapons, v)
  34. end
  35. end
  36. if table.count(weapons) <= 1 then
  37. this.addAngelEquipAttr(actor, {}, 100)
  38. return
  39. end
  40. local apos = gameequip.pos(weapons[1].equipindex)
  41. if apos == 2 then
  42. local e1 = weapons[2]
  43. weapons[2] = weapons[1]
  44. weapons[1] = weapons[e1]
  45. end
  46. -- 如果副手武器是盾牌.则跳过
  47. local cfgEquip = ConfigDataManager.getById("cfg_equip_entryLib", weapons[2].cfgid)
  48. if cfgEquip.replacerating ~= nil and string.startsWith(cfgEquip.replacerating, "3#") then
  49. this.addAngelEquipAttr(actor, {}, 100)
  50. return
  51. end
  52. local isDiffWeapon = weapons[1].cfgid ~= weapons[2].cfgid
  53. local entryRate = isDiffWeapon and 1 or 1
  54. local attackRateIndex = isDiffWeapon and 1 or 2
  55. local isQuiver = Quivers[weapons[2].cfgid] ~= nil
  56. -- 把已增加的属性都加起来。
  57. -- 把应该增加的属性都加起来。
  58. -- 把多加的属性减掉
  59. local curBasicattrs = {}
  60. local targetBasicattrs = {}
  61. for _, weapon in pairs(weapons) do
  62. local basicattr = weapon.basicattr
  63. for _, v in pairs(basicattr) do
  64. TwoWeaponsAttrs.addAttrs(curBasicattrs, v.attrid, v.value)
  65. local basicAttrsRate = BasicAttrs[v.attrid]
  66. if basicAttrsRate ~= nil then
  67. TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * basicAttrsRate[attackRateIndex])
  68. else
  69. TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * entryRate)
  70. end
  71. end
  72. local strengthattr = EquipFunc.getEquipStrengthWearAddAttr(actor, weapon.id)
  73. for k, v in pairs(strengthattr) do
  74. local attrid = tonumber(k)
  75. local value = tonumber(v)
  76. TwoWeaponsAttrs.addAttrs(curBasicattrs, attrid, value)
  77. local basicAttrsRate = BasicAttrs[v.attrid]
  78. if basicAttrsRate ~= nil then
  79. TwoWeaponsAttrs.addAttrs(targetBasicattrs, attrid, value * basicAttrsRate[attackRateIndex])
  80. else
  81. TwoWeaponsAttrs.addAttrs(targetBasicattrs, attrid, value * entryRate)
  82. end
  83. end
  84. end
  85. if isQuiver then
  86. curBasicattrs = {}
  87. targetBasicattrs = {}
  88. -- 箭筒只减攻速
  89. for _, weapon in pairs(weapons) do
  90. local basicattr = weapon.basicattr
  91. for _, v in pairs(basicattr) do
  92. if QuiverAttrs[v.attrid] ~= nil then
  93. TwoWeaponsAttrs.addAttrs(curBasicattrs, v.attrid, v.value)
  94. local basicAttrsRate = BasicAttrs[v.attrid]
  95. if basicAttrsRate ~= nil then
  96. TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * basicAttrsRate[attackRateIndex])
  97. else
  98. TwoWeaponsAttrs.addAttrs(targetBasicattrs, v.attrid, v.value * entryRate)
  99. end
  100. end
  101. end
  102. end
  103. end
  104. local addAttr = {}
  105. for k, v in pairs(curBasicattrs) do
  106. local targetAttr = targetBasicattrs[k]
  107. local curAttr = curBasicattrs[k]
  108. if targetAttr ~= curAttr then
  109. addAttr[k] = targetAttr - curAttr
  110. end
  111. end
  112. this.addAngelEquipAttr(actor, addAttr, 100)
  113. end
  114. --- 给角色添加大天使装备对应的属性
  115. ---@param actor table 角色对象
  116. ---@param basicAtt string 增加的属性
  117. ---@param itemId number 道具id
  118. function this.addAngelEquipAttr(actor, basicAtt, itemId)
  119. -- 表里配的不是增长的属性值,所以此处先清空之前增加的属性值再做添加属性操作
  120. local attrKey = string.format(RoleAttrKey.TWOWEAPONSATTRS, itemId)
  121. RoleAttr.clearRoleAttrAndDB(actor, attrKey)
  122. RoleAttr.addAndSaveRoleAttr(actor, attrKey, basicAtt)
  123. end