HeroDefine.lua 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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. local DrawCardExcel = require("excel.drawCard").drawCard
  8. local Log = require("common.Log")
  9. Json = Json or require("common.Json")
  10. HERO_BAG_CNT = 150 -- 背包默认的数值:60
  11. HERO_BAG_BUY_ADD_CNT = 10 -- 英雄背包每次购买增加5格
  12. PAGE_HERO_COUNT = 30 --英雄背包每次发送的数量
  13. BUY_CAP_CNT = 40 --玩家购买英雄容量的次数
  14. JIHUO_SHUIJING_NEEDLV = 40 --激活水晶所需等级
  15. DEFAULT_SHUIJING_GET = 20011 --激活后默认获得的装备ID
  16. DEFAULT_SHENQI_UPLV_BACK = 165 --神器升级后的返还物ID
  17. HERO_SKIN_CNT = 999
  18. SHUIJING_UP_LV_LOCK = 2 -- 升级为原有水晶
  19. WEIGHTLV2HEROS = {}
  20. GRADEHEROS = {} --品质英雄列表
  21. HEROELITE = {} --精英英雄列表
  22. WEIGHTLV2CAMPHEROS = {} --英雄道具碎片抽奖[权重][阵营]
  23. ATTRHEROS = {} -- 属性列表
  24. -- 判断是否为英雄
  25. function isHero(id)
  26. local heroConfig = HeroExcel[id]
  27. if not heroConfig then return end
  28. return id and HeroExcel[id]
  29. end
  30. -- 获得配置
  31. function getConfig(id)
  32. if not id then return end
  33. return HeroExcel[id]
  34. end
  35. -- 获取英雄星级区间
  36. function getAttrConfig(id, star)
  37. local config = getConfig(id)
  38. if not config then return end
  39. if not ATTRHEROS[id] then
  40. return HeroAttrExcel[0]
  41. end
  42. local attrID = ATTRHEROS[id][star]
  43. if not attrID then
  44. --assert(nil, "getAttrConfig attrID is nil")
  45. return
  46. end
  47. local attrConfig = HeroAttrExcel[attrID]
  48. if not attrConfig then
  49. --assert(nil, "attrConfig is nil")
  50. return
  51. end
  52. return attrConfig
  53. end
  54. -- 获取下一星级 属性配置
  55. function getNextAttrConfig(id, star)
  56. local config = getConfig(id)
  57. if not config then return end
  58. if not ATTRHEROS[id] then
  59. return HeroAttrExcel[0]
  60. end
  61. local attrID = ATTRHEROS[id][star]
  62. if not attrID then
  63. return
  64. end
  65. --没有下一星级升星配置
  66. local attrConfig = HeroAttrExcel[attrID]
  67. local cond = #attrConfig.cond
  68. if cond <= 0 then return end
  69. star = star + 1
  70. attrID = ATTRHEROS[id][star]
  71. if not attrID then
  72. return
  73. end
  74. attrConfig = HeroAttrExcel[attrID]
  75. return attrConfig
  76. end
  77. function isInTable(value, tb)
  78. for k, v in pairs(tb) do
  79. if v == value then
  80. return true
  81. end
  82. end
  83. return false --重点:全部跑完以后,如果非true,则返回false
  84. end
  85. function initAfterHot()
  86. -- 初始化英雄属性列表
  87. ATTRHEROS = {}
  88. for k, v in pairs(HeroAttrExcel) do
  89. ATTRHEROS[v.heroID] = ATTRHEROS[v.heroID] or {}
  90. ATTRHEROS[v.heroID][v.star] = k
  91. end
  92. for i = 1, 20 do
  93. WEIGHTLV2HEROS[i] = nil
  94. end
  95. for i = 1, 5 do
  96. GRADEHEROS[i] = nil
  97. end
  98. HEROELITE = {}
  99. local drawCardConfig = DrawCardExcel[2]
  100. local pool = drawCardConfig.pool
  101. local len = 0
  102. for k, v in pairs(HeroExcel) do
  103. if v.weightLv > 0 then
  104. WEIGHTLV2HEROS[v.weightLv] = WEIGHTLV2HEROS[v.weightLv] or {}
  105. WEIGHTLV2HEROS[v.weightLv][#WEIGHTLV2HEROS[v.weightLv] + 1] = k
  106. WEIGHTLV2CAMPHEROS[v.weightLv] = WEIGHTLV2CAMPHEROS[v.weightLv] or {}
  107. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] = WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] or {}
  108. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp][#WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] + 1] = k
  109. end
  110. if v.weightLv > 0 then
  111. if isInTable(k, pool) then
  112. --定义阵营以及品质
  113. GRADEHEROS[v.camp] = GRADEHEROS[v.camp] or {}
  114. GRADEHEROS[v.camp][v.grade] = GRADEHEROS[v.camp][v.grade] or {}
  115. GRADEHEROS[v.camp][v.grade][#GRADEHEROS[v.camp][v.grade] + 1] = k
  116. end
  117. end
  118. if v.isElite == 1 and v.weightLv > 0 then
  119. len = len + 1
  120. HEROELITE[len] = k
  121. end
  122. end
  123. end
  124. function getRandHeroByWeightLv(weightLv)
  125. if WEIGHTLV2HEROS[weightLv] then
  126. local r = math.random(1, #WEIGHTLV2HEROS[weightLv])
  127. return WEIGHTLV2HEROS[weightLv][r]
  128. end
  129. end
  130. function getRandHeroByGradeAndCamp(grade, camp)
  131. local heroId = nil
  132. if GRADEHEROS[camp] then
  133. if GRADEHEROS[camp][grade] then
  134. local gradeIndex = math.random(1, #GRADEHEROS[camp][grade])
  135. heroId = GRADEHEROS[camp][grade][gradeIndex]
  136. end
  137. end
  138. if heroId ~= nil then
  139. return heroId
  140. end
  141. local isHasHeroList = {}
  142. for k, v in pairs(GRADEHEROS) do
  143. local isHasHero = GRADEHEROS[k][grade]
  144. if isHasHero then
  145. isHasHeroList[#isHasHeroList + 1] = k
  146. end
  147. end
  148. local r = math.random(1,#isHasHeroList)
  149. local newCamp = isHasHeroList[r]
  150. local gradeIndex = math.random(1, #GRADEHEROS[newCamp][grade])
  151. return GRADEHEROS[newCamp][grade][gradeIndex]
  152. end
  153. function getRandHeroByWeightLvAndCamp(weightLv, camp)
  154. if camp == 0 then
  155. return getRandHeroByWeightLv(weightLv)
  156. end
  157. if WEIGHTLV2CAMPHEROS[weightLv] then
  158. if WEIGHTLV2CAMPHEROS[weightLv][camp] then
  159. local r = math.random(1, #WEIGHTLV2CAMPHEROS[weightLv][camp])
  160. return WEIGHTLV2CAMPHEROS[weightLv][camp][r]
  161. end
  162. end
  163. end
  164. function getHeroByWeightLvAndCamp(weightLv, camp)
  165. if camp == 0 then
  166. return WEIGHTLV2HEROS[weightLv]
  167. end
  168. return WEIGHTLV2CAMPHEROS[weightLv][camp]
  169. end
  170. function getRandHeroByIsElite()
  171. if HEROELITE then
  172. local r = math.random(1, #HEROELITE)
  173. return HEROELITE[r]
  174. end
  175. end
  176. -- 获取图鉴属性最大值
  177. local TUJIAN_KEY_2_MAXVALUE = nil
  178. function getTujianMaxValue(key)
  179. if not TUJIAN_KEY_2_MAXVALUE then
  180. TUJIAN_KEY_2_MAXVALUE = {}
  181. for heroID in pairs(HeroSpecialExcel) do
  182. local heroGrid = HeroGrid.getCacheHeroGridTujian(heroID)
  183. if heroGrid and heroGrid.attrs then
  184. for k, v in pairs(heroGrid.attrs) do
  185. if v > (TUJIAN_KEY_2_MAXVALUE[k] or 0) then
  186. TUJIAN_KEY_2_MAXVALUE[k] = v
  187. end
  188. end
  189. end
  190. end
  191. end
  192. return TUJIAN_KEY_2_MAXVALUE[key] or 0
  193. end