HeroDefine.lua 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. local Config = require("Config")
  2. local HeroExcel = require("excel.hero").hero
  3. local HeroAttrExcel = require("excel.hero").attr
  4. local HeroSpecialExcel = require("excel.hero").specialHero
  5. local PfLogic = require("platform.PfLogic")
  6. local HeroGrid = require("hero.HeroGrid")
  7. HERO_BAG_CNT = 500 -- 英雄背包初始容量
  8. HERO_BAG_BUY_ADD_CNT = 10 -- 英雄背包每次购买增加5格
  9. PAGE_HERO_COUNT = 30 --英雄背包每次发送的数量
  10. BUY_CAP_CNT = 40 --玩家购买英雄容量的次数
  11. JIHUO_SHUIJING_NEEDLV = 40 --激活水晶所需等级
  12. DEFAULT_SHUIJING_GET = 20011 --激活后默认获得的装备ID
  13. DEFAULT_SHENQI_UPLV_BACK = 165 --神器升级后的返还物ID
  14. HERO_SKIN_CNT = 999
  15. SHUIJING_UP_LV_LOCK = 2 -- 升级为原有水晶
  16. HERO_SSR_GRADE = 4 -- ssr 英雄的grade值
  17. --英雄职业-能穿的宝石的映射表
  18. HEROJOBTOGEM = {
  19. [1] = 1001, --坦克
  20. [2] = 1002, --战士
  21. [3] = 1003, --法师
  22. [4] = 1004, --辅助
  23. }
  24. --英雄镶嵌宝石的最大孔位
  25. HEROGEMMAX = 6
  26. WEIGHTLV2HEROS = {}
  27. HEROELITE = {} --精英英雄列表
  28. WEIGHTLV2CAMPHEROS = {} --英雄道具碎片抽奖[权重][阵营]
  29. ATTRHEROS = {} -- 属性列表
  30. -- 判断是否为英雄
  31. function isHero(id)
  32. local heroConfig = HeroExcel[id]
  33. if not heroConfig then return end
  34. return id and HeroExcel[id]
  35. end
  36. -- 获得配置
  37. function getConfig(id)
  38. if not id then return end
  39. return HeroExcel[id]
  40. end
  41. -- 获取英雄星级区间
  42. function getAttrConfig(id, star)
  43. local config = getConfig(id)
  44. if not config then return end
  45. if not ATTRHEROS[id] then
  46. return HeroAttrExcel[0]
  47. end
  48. local attrID = ATTRHEROS[id][star]
  49. if not attrID then
  50. --assert(nil, "getAttrConfig attrID is nil")
  51. return
  52. end
  53. local attrConfig = HeroAttrExcel[attrID]
  54. if not attrConfig then
  55. --assert(nil, "attrConfig is nil")
  56. return
  57. end
  58. return attrConfig
  59. end
  60. function getMaxHeroStar(id)
  61. local star = HeroExcel[id].star
  62. local uplimit = 20
  63. while true do
  64. if star >= uplimit or not getNextAttrConfig(id,star) then
  65. break
  66. end
  67. star = star + 1
  68. end
  69. return star
  70. end
  71. -- 获取下一星级 属性配置
  72. function getNextAttrConfig(id, star)
  73. local config = getConfig(id)
  74. if not config then return end
  75. if not ATTRHEROS[id] then
  76. return HeroAttrExcel[0]
  77. end
  78. local attrID = ATTRHEROS[id][star]
  79. if not attrID then
  80. return
  81. end
  82. --没有下一星级升星配置
  83. local attrConfig = HeroAttrExcel[attrID]
  84. local cond = #attrConfig.cond
  85. if cond <= 0 then return end
  86. star = star + 1
  87. attrID = ATTRHEROS[id][star]
  88. if not attrID then
  89. return
  90. end
  91. attrConfig = HeroAttrExcel[attrID]
  92. return attrConfig
  93. end
  94. function initAfterHot()
  95. -- 初始化英雄属性列表
  96. ATTRHEROS = {}
  97. for k,v in pairs(HeroAttrExcel) do
  98. ATTRHEROS[v.heroID] = ATTRHEROS[v.heroID] or {}
  99. ATTRHEROS[v.heroID][v.star] = k
  100. end
  101. for i = 1,20 do
  102. WEIGHTLV2HEROS[i] = nil
  103. end
  104. HEROELITE = {}
  105. local len = 0
  106. for k, v in pairs(HeroExcel) do
  107. if v.weightLv > 0 then
  108. WEIGHTLV2HEROS[v.weightLv] = WEIGHTLV2HEROS[v.weightLv] or {}
  109. WEIGHTLV2HEROS[v.weightLv][#WEIGHTLV2HEROS[v.weightLv] + 1] = k
  110. WEIGHTLV2CAMPHEROS[v.weightLv] = WEIGHTLV2CAMPHEROS[v.weightLv] or {}
  111. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] = WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] or {}
  112. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp][#WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] + 1] = k
  113. end
  114. if v.isElite == 1 and v.weightLv > 0 then
  115. len = len + 1
  116. HEROELITE[len] = k
  117. end
  118. end
  119. end
  120. function getRandHeroByWeightLv(weightLv)
  121. if WEIGHTLV2HEROS[weightLv] then
  122. local r = math.random(1,#WEIGHTLV2HEROS[weightLv])
  123. return WEIGHTLV2HEROS[weightLv][r]
  124. end
  125. end
  126. function getRandHeroByWeightLvAndCamp(weightLv, camp)
  127. if camp == 0 then
  128. return getRandHeroByWeightLv(weightLv)
  129. end
  130. if WEIGHTLV2CAMPHEROS[weightLv] then
  131. if WEIGHTLV2CAMPHEROS[weightLv][camp] then
  132. local r = math.random(1,#WEIGHTLV2CAMPHEROS[weightLv][camp])
  133. return WEIGHTLV2CAMPHEROS[weightLv][camp][r]
  134. end
  135. end
  136. end
  137. function getHeroByWeightLvAndCamp(weightLv, camp)
  138. if camp == 0 then
  139. return WEIGHTLV2HEROS[weightLv]
  140. end
  141. return WEIGHTLV2CAMPHEROS[weightLv][camp]
  142. end
  143. function getRandHeroByIsElite()
  144. if HEROELITE then
  145. local r = math.random(1,#HEROELITE)
  146. return HEROELITE[r]
  147. end
  148. end
  149. -- 获取图鉴属性最大值
  150. local TUJIAN_KEY_2_MAXVALUE = nil
  151. function getTujianMaxValue(key)
  152. if not TUJIAN_KEY_2_MAXVALUE then
  153. TUJIAN_KEY_2_MAXVALUE = {}
  154. for heroID in pairs(HeroSpecialExcel) do
  155. local heroGrid = HeroGrid.getCacheHeroGridTujian(heroID)
  156. if heroGrid and heroGrid.attrs then
  157. for k, v in pairs(heroGrid.attrs) do
  158. if v > (TUJIAN_KEY_2_MAXVALUE[k] or 0) then
  159. TUJIAN_KEY_2_MAXVALUE[k] = v
  160. end
  161. end
  162. end
  163. end
  164. end
  165. return TUJIAN_KEY_2_MAXVALUE[key] or 0
  166. end
  167. -- 获取所有SSR,UR英雄ID
  168. function GetAllHighQualityHero()
  169. local len = 0
  170. local heroIdList = {}
  171. for heroId, heroInfo in pairs(HeroExcel) do
  172. if heroInfo.grade >= HERO_SSR_GRADE and heroId >= 101001 then
  173. len = len + 1
  174. heroIdList[len] = heroId
  175. end
  176. end
  177. return heroIdList
  178. end