HeroDefine.lua 5.1 KB

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