HeroDefine.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. -- 获取下一星级 属性配置
  51. function getNextAttrConfig(id, star)
  52. local config = getConfig(id)
  53. if not config then return end
  54. if not ATTRHEROS[id] then
  55. return HeroAttrExcel[0]
  56. end
  57. local attrID = ATTRHEROS[id][star]
  58. if not attrID then
  59. return
  60. end
  61. --没有下一星级升星配置
  62. local attrConfig = HeroAttrExcel[attrID]
  63. local cond = #attrConfig.cond
  64. if cond <= 0 then return end
  65. star = star + 1
  66. attrID = ATTRHEROS[id][star]
  67. if not attrID then
  68. return
  69. end
  70. attrConfig = HeroAttrExcel[attrID]
  71. return attrConfig
  72. end
  73. function initAfterHot()
  74. -- 初始化英雄属性列表
  75. ATTRHEROS = {}
  76. for k,v in pairs(HeroAttrExcel) do
  77. ATTRHEROS[v.heroID] = ATTRHEROS[v.heroID] or {}
  78. ATTRHEROS[v.heroID][v.star] = k
  79. end
  80. for i = 1,20 do
  81. WEIGHTLV2HEROS[i] = nil
  82. end
  83. HEROELITE = {}
  84. local len = 0
  85. for k, v in pairs(HeroExcel) do
  86. if v.weightLv > 0 then
  87. WEIGHTLV2HEROS[v.weightLv] = WEIGHTLV2HEROS[v.weightLv] or {}
  88. WEIGHTLV2HEROS[v.weightLv][#WEIGHTLV2HEROS[v.weightLv] + 1] = k
  89. WEIGHTLV2CAMPHEROS[v.weightLv] = WEIGHTLV2CAMPHEROS[v.weightLv] or {}
  90. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] = WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] or {}
  91. WEIGHTLV2CAMPHEROS[v.weightLv][v.camp][#WEIGHTLV2CAMPHEROS[v.weightLv][v.camp] + 1] = k
  92. end
  93. if v.isElite == 1 and v.weightLv > 0 then
  94. len = len + 1
  95. HEROELITE[len] = k
  96. end
  97. end
  98. end
  99. function getRandHeroByWeightLv(weightLv)
  100. if WEIGHTLV2HEROS[weightLv] then
  101. local r = math.random(1,#WEIGHTLV2HEROS[weightLv])
  102. return WEIGHTLV2HEROS[weightLv][r]
  103. end
  104. end
  105. function getRandHeroByWeightLvAndCamp(weightLv, camp)
  106. if camp == 0 then
  107. return getRandHeroByWeightLv(weightLv)
  108. end
  109. if WEIGHTLV2CAMPHEROS[weightLv] then
  110. if WEIGHTLV2CAMPHEROS[weightLv][camp] then
  111. local r = math.random(1,#WEIGHTLV2CAMPHEROS[weightLv][camp])
  112. return WEIGHTLV2CAMPHEROS[weightLv][camp][r]
  113. end
  114. end
  115. end
  116. function getHeroByWeightLvAndCamp(weightLv, camp)
  117. if camp == 0 then
  118. return WEIGHTLV2HEROS[weightLv]
  119. end
  120. return WEIGHTLV2CAMPHEROS[weightLv][camp]
  121. end
  122. function getRandHeroByIsElite()
  123. if HEROELITE then
  124. local r = math.random(1,#HEROELITE)
  125. return HEROELITE[r]
  126. end
  127. end
  128. -- 获取图鉴属性最大值
  129. local TUJIAN_KEY_2_MAXVALUE = nil
  130. function getTujianMaxValue(key)
  131. if not TUJIAN_KEY_2_MAXVALUE then
  132. TUJIAN_KEY_2_MAXVALUE = {}
  133. for heroID in pairs(HeroSpecialExcel) do
  134. local heroGrid = HeroGrid.getCacheHeroGridTujian(heroID)
  135. if heroGrid and heroGrid.attrs then
  136. for k, v in pairs(heroGrid.attrs) do
  137. if v > (TUJIAN_KEY_2_MAXVALUE[k] or 0) then
  138. TUJIAN_KEY_2_MAXVALUE[k] = v
  139. end
  140. end
  141. end
  142. end
  143. end
  144. return TUJIAN_KEY_2_MAXVALUE[key] or 0
  145. end