HeroDefine.lua 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  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 = 150 -- 背包默认的数值:60
  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. WEIGHTLV2HEROS = {}
  17. HEROELITE = {} --精英英雄列表
  18. WEIGHTLV2CAMPHEROS = {} --英雄道具碎片抽奖[权重][阵营]
  19. ATTRHEROS = {} -- 属性列表
  20. -- 判断是否为英雄
  21. function isHero(id)
  22. local heroConfig = HeroExcel[id]
  23. if not heroConfig then return end
  24. return id and HeroExcel[id]
  25. end
  26. -- 获得配置
  27. function getConfig(id)
  28. if not id then return end
  29. return HeroExcel[id]
  30. end
  31. -- 获取英雄星级区间
  32. function getAttrConfig(id, star)
  33. local config = getConfig(id)
  34. if not config then return end
  35. if not ATTRHEROS[id] then
  36. return HeroAttrExcel[0]
  37. end
  38. local attrID = ATTRHEROS[id][star]
  39. if not attrID then
  40. --assert(nil, "getAttrConfig attrID is nil")
  41. return
  42. end
  43. local attrConfig = HeroAttrExcel[attrID]
  44. if not attrConfig then
  45. --assert(nil, "attrConfig is nil")
  46. return
  47. end
  48. return attrConfig
  49. end
  50. function getMaxHeroStar(id)
  51. local star = HeroExcel[id].star
  52. local uplimit = 20
  53. while true do
  54. if star >= uplimit or not getNextAttrConfig(id,star) then
  55. break
  56. end
  57. star = star + 1
  58. end
  59. return star
  60. end
  61. -- 获取下一星级 属性配置
  62. function getNextAttrConfig(id, star)
  63. local config = getConfig(id)
  64. if not config then return end
  65. if not ATTRHEROS[id] then
  66. return HeroAttrExcel[0]
  67. end
  68. local attrID = ATTRHEROS[id][star]
  69. if not attrID then
  70. return
  71. end
  72. --没有下一星级升星配置
  73. local attrConfig = HeroAttrExcel[attrID]
  74. local cond = #attrConfig.cond
  75. if cond <= 0 then return end
  76. star = star + 1
  77. attrID = ATTRHEROS[id][star]
  78. if not attrID then
  79. return
  80. end
  81. attrConfig = HeroAttrExcel[attrID]
  82. return attrConfig
  83. end
  84. function initAfterHot()
  85. -- 初始化英雄属性列表
  86. ATTRHEROS = {}
  87. for k,v in pairs(HeroAttrExcel) do
  88. ATTRHEROS[v.heroID] = ATTRHEROS[v.heroID] or {}
  89. ATTRHEROS[v.heroID][v.star] = k
  90. end
  91. for i = 1,20 do
  92. WEIGHTLV2HEROS[i] = nil
  93. end
  94. HEROELITE = {}
  95. local len = 0
  96. for k, v in pairs(HeroExcel) do
  97. if v.weightLv > 0 then
  98. WEIGHTLV2HEROS[v.weightLv] = WEIGHTLV2HEROS[v.weightLv] or {}
  99. WEIGHTLV2HEROS[v.weightLv][#WEIGHTLV2HEROS[v.weightLv] + 1] = k
  100. WEIGHTLV2CAMPHEROS[v.weightLv] = WEIGHTLV2CAMPHEROS[v.weightLv] or {}
  101. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] = WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] or {}
  102. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp][#WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] + 1] = k
  103. end
  104. if v.isElite == 1 and v.weightLv > 0 then
  105. len = len + 1
  106. HEROELITE[len] = k
  107. end
  108. end
  109. end
  110. function getRandHeroByWeightLv(weightLv)
  111. if WEIGHTLV2HEROS[weightLv] then
  112. local r = math.random(1,#WEIGHTLV2HEROS[weightLv])
  113. return WEIGHTLV2HEROS[weightLv][r]
  114. end
  115. end
  116. function getRandHeroByWeightLvAndCamp(weightLv, camp)
  117. if camp == 0 then
  118. return getRandHeroByWeightLv(weightLv)
  119. end
  120. if WEIGHTLV2CAMPHEROS[weightLv] then
  121. if WEIGHTLV2CAMPHEROS[weightLv][camp] then
  122. local r = math.random(1,#WEIGHTLV2CAMPHEROS[weightLv][camp])
  123. return WEIGHTLV2CAMPHEROS[weightLv][camp][r]
  124. end
  125. end
  126. end
  127. function getHeroByWeightLvAndCamp(weightLv, camp)
  128. if camp == 0 then
  129. return WEIGHTLV2HEROS[weightLv]
  130. end
  131. return WEIGHTLV2CAMPHEROS[weightLv][camp]
  132. end
  133. function getRandHeroByIsElite()
  134. if HEROELITE then
  135. local r = math.random(1,#HEROELITE)
  136. return HEROELITE[r]
  137. end
  138. end
  139. -- 获取图鉴属性最大值
  140. local TUJIAN_KEY_2_MAXVALUE = nil
  141. function getTujianMaxValue(key)
  142. if not TUJIAN_KEY_2_MAXVALUE then
  143. TUJIAN_KEY_2_MAXVALUE = {}
  144. for heroID in pairs(HeroSpecialExcel) do
  145. local heroGrid = HeroGrid.getCacheHeroGridTujian(heroID)
  146. if heroGrid and heroGrid.attrs then
  147. for k, v in pairs(heroGrid.attrs) do
  148. if v > (TUJIAN_KEY_2_MAXVALUE[k] or 0) then
  149. TUJIAN_KEY_2_MAXVALUE[k] = v
  150. end
  151. end
  152. end
  153. end
  154. end
  155. return TUJIAN_KEY_2_MAXVALUE[key] or 0
  156. end