HeroArtifacts.lua 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287
  1. -- 英雄神威灵装系统
  2. --db
  3. --[=[
  4. heroGrid.artifacts = {
  5. isActive = nil, -- 是否激活,激活后为true
  6. level = 0, -- 当前等级
  7. star = 0, -- 当前星级
  8. effectArr = { --特效
  9. {idx = 1, isLock = 0, lv = 0}
  10. },
  11. effectArrTemp = { --新洗练出且未替换的特效
  12. {idx = 1, lv = 0}
  13. },
  14. beSkillArr = { --被动技能
  15. {idx = 1, isLock = 0}
  16. },
  17. beSkillArrTemp = { --新洗练出且未替换的被动技能
  18. {idx = 1}
  19. },
  20. }
  21. ]=]--
  22. local Msg = require("core.Msg")
  23. local BagLogic = require("bag.BagLogic")
  24. local HeroLogic = require("hero.HeroLogic")
  25. local ObjHuman = require("core.ObjHuman")
  26. local Grid = require("bag.Grid")
  27. local RoleAttr = require("role.RoleAttr")
  28. local RoleDefine = require("role.RoleDefine")
  29. local HeroArtifactsConfig = require("excel.heroArtifacts")
  30. local Util = require("common.Util")
  31. local Lang = require("common.Lang")
  32. local Broadcast = require("broadcast.Broadcast")
  33. local GiftLogic
  34. local LOGTAG = "Artifacts" --日志标识
  35. local function initArtifactsData(heroGrid)
  36. heroGrid.artifacts = {
  37. level = 0,
  38. star = 0
  39. }
  40. end
  41. local function getArtifactsData(heroGrid)
  42. return heroGrid.artifacts
  43. end
  44. local function updateArtifactsState(heroGrid, state)
  45. local artifactsData = getArtifactsData(heroGrid)
  46. if not artifactsData then
  47. initArtifactsData(heroGrid)
  48. artifactsData = getArtifactsData(heroGrid)
  49. end
  50. artifactsData.isActive = state
  51. end
  52. local function upGradeArtifactsLv(heroGrid, addVal)
  53. local artifactsData = getArtifactsData(heroGrid)
  54. if not artifactsData then
  55. initArtifactsData(heroGrid)
  56. artifactsData = getArtifactsData(heroGrid)
  57. end
  58. artifactsData.level = artifactsData.level + addVal
  59. end
  60. local function upGradeArtifactsStar(heroGrid, addVal)
  61. local artifactsData = getArtifactsData(heroGrid)
  62. if not artifactsData then
  63. initArtifactsData(heroGrid)
  64. artifactsData = getArtifactsData(heroGrid)
  65. end
  66. artifactsData.star = artifactsData.star + addVal
  67. end
  68. local function resetArtifactsData(heroGrid)
  69. local artifactsData = getArtifactsData(heroGrid)
  70. artifactsData.level = 0
  71. artifactsData.star = 0
  72. artifactsData.isActive = nil
  73. artifactsData.effectArr = nil
  74. artifactsData.effectArrTemp = nil
  75. artifactsData.beSkillArr = nil
  76. artifactsData.beSkillArrTemp = nil
  77. end
  78. -- 是否开启
  79. local function isOpen(heroGrid)
  80. local varCfg = HeroArtifactsConfig.Var[1]
  81. if heroGrid.star < varCfg.openStarCond then
  82. return false
  83. end
  84. return true
  85. end
  86. -- 是否激活
  87. local function isActivate(heroGrid)
  88. local artifactsData = getArtifactsData(heroGrid)
  89. return artifactsData and artifactsData.isActive
  90. end
  91. -- 计算当前等级/星级的属性总加成
  92. local function calcAttrs(conf, currentStage)
  93. local attrList = {}
  94. for i=1, currentStage do
  95. local t = conf[i]
  96. local attrArr = t and t.attrArr
  97. for _, attrInfo in ipairs(attrArr or {}) do
  98. local attrId, attrVal = attrInfo[1],attrInfo[2]
  99. attrList[attrId] = (attrList[attrId] or 0) + attrVal
  100. end
  101. end
  102. return attrList
  103. end
  104. -- 获取神威灵装激活消耗
  105. local function getActivateCost()
  106. local varCfg = HeroArtifactsConfig.Var[1]
  107. local activateCostTb = varCfg.activateCost
  108. return activateCostTb[1][1],activateCostTb[1][2]
  109. end
  110. -- 获取等级/星级下一阶段的消耗
  111. local function getNextStageCost(currentStage, tp, isMax)
  112. local varCfg = HeroArtifactsConfig.Var[1]
  113. local itemId = varCfg.upGradeLvCostId
  114. local itemCnt = 0
  115. local upGradeCfg = HeroArtifactsConfig.UpGradeLv
  116. if tp == 2 then
  117. itemId = varCfg.upGradeStarCostId
  118. upGradeCfg = HeroArtifactsConfig.UpGradeStar
  119. end
  120. if not isMax then
  121. local nextStageCfg = upGradeCfg[currentStage+1]
  122. itemCnt = nextStageCfg.costCnt
  123. end
  124. return itemId, itemCnt
  125. end
  126. -- 获取升到当前等级/星级的总消耗
  127. local function getTaotalStageCost(currentStage, tp)
  128. local varCfg = HeroArtifactsConfig.Var[1]
  129. local itemId = varCfg.upGradeLvCostId
  130. local itemCnt = 0
  131. local upGradeCfg = HeroArtifactsConfig.UpGradeLv
  132. if tp == 2 then
  133. itemId = varCfg.upGradeStarCostId
  134. upGradeCfg = HeroArtifactsConfig.UpGradeStar
  135. end
  136. for i=1, currentStage do
  137. local stageCfg = upGradeCfg[i]
  138. itemCnt = itemCnt + stageCfg.costCnt
  139. end
  140. return itemId, itemCnt
  141. end
  142. -- 填充激活灵装协议结构数据
  143. local function populateActivateCostMsg(net)
  144. -- local varCfg = HeroArtifactsConfig.Var[1]
  145. -- local activateCostTb = varCfg.activateCost
  146. -- net[0] = #activateCostTb
  147. -- for k,v in ipairs(activateCostTb) do
  148. -- Grid.makeItem(net[k], v[1], v[2])
  149. -- end
  150. local itemId, itemCnt = getActivateCost()
  151. Grid.makeItem(net, itemId, itemCnt)
  152. end
  153. -- 填充灵装当前等级/星级总加成属性协议结构数据
  154. local function populateTotalAttrMsg(net, n, tp)
  155. local t
  156. if tp == 1 then
  157. t = HeroArtifactsConfig.UpGradeLv
  158. else
  159. t = HeroArtifactsConfig.UpGradeStar
  160. end
  161. local stage = n
  162. if n <= 0 then
  163. stage = 1
  164. end
  165. local attrList = calcAttrs(t, stage)
  166. net[0] = 0
  167. local len = 0
  168. for attrId, attrVal in pairs(attrList) do
  169. len = len + 1
  170. net[0] = len
  171. net[len].key = attrId
  172. net[len].value = n <= 0 and 0 or attrVal
  173. end
  174. end
  175. -- 填充灵装下一等级/星级加成属性协议结构数据
  176. local function populateNextAttrMsg(net, n, tp, isMax)
  177. local t
  178. if tp == 1 then
  179. t = HeroArtifactsConfig.UpGradeLv
  180. else
  181. t = HeroArtifactsConfig.UpGradeStar
  182. end
  183. net[0] = 0
  184. local cfg = t[n]
  185. local attrArrCfg = cfg and cfg.attrArr
  186. for k,v in ipairs(attrArrCfg or {}) do
  187. net[0] = k
  188. net[k].key = v[1]
  189. net[k].value = isMax and 0 or v[2]
  190. end
  191. end
  192. -- 判断属性是否是绝对值属性
  193. local function isAbsAttr(attrId)
  194. return RoleDefine.isAbsAttr(attrId)
  195. end
  196. -- 填充灵装特效协议结构数据
  197. local function populateEffectMsg(net, arr)
  198. for k, v in ipairs(arr) do
  199. net[0] = k
  200. local cfg = HeroArtifactsConfig.EffectList[v.idx]
  201. net[k].idx = v.idx
  202. net[k].name = cfg.name
  203. net[k].desc = cfg.desc
  204. net[k].isLock = v.isLock or 0
  205. net[k].isActivate = 1
  206. net[k].activateStarCond = 1
  207. net[k].level = v.lv
  208. local attrVal = cfg.effectAttrValArr[v.lv] or 0
  209. if not isAbsAttr(cfg.effectAttrId) then
  210. attrVal = attrVal / 100
  211. end
  212. net[k].desc = Util.format(cfg.desc, attrVal)
  213. end
  214. end
  215. -- 填充灵装被动技能协议结构数据
  216. local function populateBeSkillMsg(net, arr)
  217. local varCfg = HeroArtifactsConfig.Var[1]
  218. for i, activateBeSkillStar in ipairs(varCfg.activateBeSkillStarList) do
  219. net[0] = i
  220. net[i].idx = i
  221. net[i].name = ""
  222. net[i].desc = ""
  223. net[i].isLock = 0
  224. net[i].isActivate = 0
  225. net[i].activateStarCond = activateBeSkillStar
  226. net[i].level = 0
  227. if arr and arr[i] then
  228. local beSkillData = arr[i]
  229. local cfg = HeroArtifactsConfig.BeSkillList[beSkillData.idx]
  230. net[i].idx = beSkillData.idx
  231. net[i].name = cfg.name
  232. net[i].desc = cfg.desc
  233. net[i].isLock = beSkillData.isLock or 0
  234. net[i].isActivate = 1
  235. end
  236. end
  237. end
  238. -- 计算特效/被动技能的锁定数量
  239. local function calcLockNum(arr)
  240. local lockNum = 0
  241. for _, v in ipairs(arr or {}) do
  242. if v.isLock and v.isLock == 1 then
  243. lockNum = lockNum + 1
  244. end
  245. end
  246. return lockNum
  247. end
  248. -- 计算特效/被动技能洗练需要消耗的道具
  249. local function calcRefineCost(data, costIdArr, costNumArr)
  250. if not costIdArr or not costNumArr then
  251. return
  252. end
  253. if #costIdArr ~= #costNumArr then
  254. return
  255. end
  256. local lockNum = calcLockNum(data)
  257. lockNum = lockNum + 1
  258. local itemList = {}
  259. for i=1, #costIdArr do
  260. local itemId = costIdArr[i]
  261. local itemCntArr = costNumArr[i]
  262. local itemCnt = itemCntArr and itemCntArr[lockNum]
  263. if not itemId or not itemCnt then
  264. return
  265. end
  266. itemList[itemId] = (itemList[itemId] or 0) + itemCnt
  267. end
  268. return itemList
  269. end
  270. -- 生成要排除的特效/被动技能列表
  271. local function genExcludeList(arr)
  272. if not arr then
  273. return
  274. end
  275. local excludeList = {}
  276. for _, v in ipairs(arr) do
  277. excludeList[v.idx] = true
  278. end
  279. return excludeList
  280. end
  281. -- 随机一个特效/被动技能
  282. local function randEffect(conf, excludeList)
  283. local totalWeight = 0
  284. local arr = {}
  285. for k,v in ipairs(conf) do
  286. if not excludeList or not excludeList[k] then
  287. totalWeight = totalWeight + v.weight
  288. arr[#arr+1] = {weight = v.weight, idx = k}
  289. end
  290. end
  291. local weight = 0
  292. local randVal = math.random(1, totalWeight)
  293. for _, v in ipairs(arr) do
  294. weight = weight + v.weight
  295. if randVal <= weight then
  296. return v.idx
  297. end
  298. end
  299. end
  300. -- 随机一个特效的等级
  301. local function randEffectLv()
  302. local totalWeight = 0
  303. for k,v in ipairs(HeroArtifactsConfig.EffectLvProb) do
  304. totalWeight = totalWeight + v.weight
  305. end
  306. local weight = 0
  307. local randVal = math.random(1, totalWeight)
  308. for _, v in ipairs(HeroArtifactsConfig.EffectLvProb) do
  309. weight = weight + v.weight
  310. if randVal <= weight then
  311. return v.level
  312. end
  313. end
  314. end
  315. -- 更新战力
  316. local function updatePower(human)
  317. RoleAttr.cleanHeroAttrCache(human)
  318. ObjHuman.doCalc(human)
  319. ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
  320. end
  321. -- 更新英雄属性
  322. local function updateHeroAttr(human, heroID, heroIndex)
  323. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  324. end
  325. -- 刷新红点
  326. local function updateRedDot(human, heroGrid)
  327. HeroLogic.refreshDot(human, heroGrid.uuid)
  328. end
  329. -- 刷新战力, 红点, 英雄属性
  330. local function updatePowerAndRedDot(human, heroGrid, heroID, heroIndex)
  331. -- 更新战力
  332. updatePower(human)
  333. -- 刷新红点
  334. updateRedDot(human, heroGrid)
  335. -- 刷新英雄属性
  336. updateHeroAttr(human, heroID, heroIndex)
  337. end
  338. -- 能否升级
  339. local function isCanUpGradeLv(human, heroGrid)
  340. local artifactsData = getArtifactsData(heroGrid)
  341. local currentLevel = artifactsData and artifactsData.level or 0
  342. local maxLevel = HeroArtifactsConfig.UpGradeLv[#HeroArtifactsConfig.UpGradeLv].level
  343. if currentLevel < maxLevel then
  344. local itemId, itemCnt = getNextStageCost(currentLevel, 1)
  345. if BagLogic.getItemCnt(human, itemId) >= itemCnt then
  346. return true
  347. end
  348. end
  349. return false
  350. end
  351. -- 能否升星
  352. local function isCanUpGradeStar(human, heroGrid)
  353. local artifactsData = getArtifactsData(heroGrid)
  354. local currentStar = artifactsData and artifactsData.star or 0
  355. local maxStar = HeroArtifactsConfig.UpGradeStar[#HeroArtifactsConfig.UpGradeStar].star
  356. if currentStar < maxStar then
  357. local itemId, itemCnt = getNextStageCost(currentStar, 2)
  358. if BagLogic.getItemCnt(human, itemId) >= itemCnt then
  359. return true
  360. end
  361. end
  362. return false
  363. end
  364. -- 获取神威灵装的被动技能
  365. function GetArtifactsBeSkillList(heroGrid)
  366. if not heroGrid or not heroGrid.artifacts then
  367. return
  368. end
  369. local beSkillArr = heroGrid.artifacts.beSkillArr
  370. if not beSkillArr then
  371. return
  372. end
  373. local skillArr
  374. for _, skillInfo in ipairs(beSkillArr) do
  375. local cfgIdx = skillInfo.idx
  376. local skillCfg = HeroArtifactsConfig.BeSkillList[cfgIdx]
  377. if skillCfg and skillCfg.skillType == 2 then
  378. skillArr = skillArr or {}
  379. skillArr[#skillArr+1] = skillCfg.skillId
  380. end
  381. end
  382. return skillArr
  383. end
  384. -- 获取神威灵装对符文/战意的属性加成列表
  385. function GetFuwenStrengthenAttrList(heroGrid)
  386. if not heroGrid or not heroGrid.artifacts then
  387. return
  388. end
  389. local beSkillArr = heroGrid.artifacts.beSkillArr
  390. if not beSkillArr then
  391. return
  392. end
  393. local skillId_2_Attr = nil
  394. for _, skillInfo in ipairs(beSkillArr) do
  395. local skillCfg = HeroArtifactsConfig.BeSkillList[skillInfo.idx]
  396. if skillCfg and skillCfg.skillType == 1 and next(skillCfg.attr) then
  397. local attrArr = {}
  398. for i, attrInfo in ipairs(skillCfg.attr) do
  399. attrArr[i] = {attrInfo[1], attrInfo[2]}
  400. end
  401. skillId_2_Attr = skillId_2_Attr or {}
  402. for _, fuwenSkillId in ipairs(skillCfg.fuwenSkillIdArr) do
  403. skillId_2_Attr[fuwenSkillId] = attrArr
  404. end
  405. end
  406. end
  407. return skillId_2_Attr
  408. end
  409. -- 获取神威灵装对符文/战意的强化技能列表
  410. function GetFuwenStrengthenSkillList(heroGrid)
  411. if not heroGrid or not heroGrid.artifacts then
  412. return
  413. end
  414. local beSkillArr = heroGrid.artifacts.beSkillArr
  415. if not beSkillArr then
  416. return
  417. end
  418. local skillId_2_strengthenSkillId = nil
  419. for _, skillInfo in ipairs(beSkillArr) do
  420. local skillCfg = HeroArtifactsConfig.BeSkillList[skillInfo.idx]
  421. if skillCfg and skillCfg.skillType == 1 and next(skillCfg.strengthenSkillIdArr) then
  422. skillId_2_strengthenSkillId = skillId_2_strengthenSkillId or {}
  423. for i, fuwenSkillId in ipairs(skillCfg.fuwenSkillIdArr) do
  424. skillId_2_strengthenSkillId[fuwenSkillId] = skillCfg.strengthenSkillIdArr[i]
  425. end
  426. end
  427. end
  428. return skillId_2_strengthenSkillId
  429. end
  430. -- 神威灵装加成
  431. function doCalcHero(human, heroGrid, addAttrs)
  432. if not heroGrid or not heroGrid.artifacts then
  433. return
  434. end
  435. local artifactsData = heroGrid.artifacts
  436. if artifactsData.level > 0 then
  437. local attrList = calcAttrs(HeroArtifactsConfig.UpGradeLv, artifactsData.level)
  438. for attrId, attrVal in pairs(attrList) do
  439. RoleAttr.updateValue(attrId, attrVal, addAttrs)
  440. end
  441. end
  442. if artifactsData.star > 0 then
  443. local attrList = calcAttrs(HeroArtifactsConfig.UpGradeStar, artifactsData.star)
  444. for attrId, attrVal in pairs(attrList) do
  445. RoleAttr.updateValue(attrId, attrVal, addAttrs)
  446. end
  447. end
  448. -- 特效
  449. if artifactsData.effectArr then
  450. for _, effectInfo in ipairs(artifactsData.effectArr) do
  451. local effectCfg = HeroArtifactsConfig.EffectList[effectInfo.idx]
  452. if effectCfg then
  453. local effectLv = effectInfo.lv
  454. local attrId = effectCfg.effectAttrId
  455. local attrVal = effectCfg.effectAttrValArr[effectLv] or 0
  456. RoleAttr.updateValue(attrId, attrVal, addAttrs)
  457. end
  458. end
  459. end
  460. end
  461. -- 红点判断
  462. function isArtifactsDot(human, heroGrid)
  463. if not isOpen(heroGrid) then
  464. return false
  465. end
  466. if not isActivate(heroGrid) then
  467. local varCfg = HeroArtifactsConfig.Var[1]
  468. local activateCostTb = varCfg.activateCost
  469. local itemId, itemCnt = activateCostTb[1][1], activateCostTb[1][2]
  470. if BagLogic.getItemCnt(human, itemId) >= itemCnt then
  471. return true
  472. end
  473. return false
  474. end
  475. if isCanUpGradeLv(human, heroGrid) then
  476. return true
  477. end
  478. if isCanUpGradeStar(human, heroGrid) then
  479. return true
  480. end
  481. return false
  482. end
  483. -- 返还材料计算
  484. function CalcReturnItem(human, heroGrid)
  485. if not isOpen(heroGrid) then
  486. return
  487. end
  488. if not isActivate(heroGrid) then
  489. return
  490. end
  491. local artifactsData = getArtifactsData(heroGrid)
  492. local itemList = {}
  493. local itemId, itemCnt = getActivateCost()
  494. itemList[itemId] = (itemList[itemId] or 0) + itemCnt
  495. if artifactsData and artifactsData.level > 0 then
  496. itemId, itemCnt = getTaotalStageCost(artifactsData.level, 1)
  497. itemList[itemId] = (itemList[itemId] or 0) + itemCnt
  498. end
  499. if artifactsData and artifactsData.star > 0 then
  500. itemId, itemCnt = getTaotalStageCost(artifactsData.star, 2)
  501. itemList[itemId] = (itemList[itemId] or 0) + itemCnt
  502. end
  503. return itemList
  504. end
  505. -- 重置神威灵装数据
  506. function ResetArtifactsData(human, heroGrid)
  507. if not isOpen(heroGrid) then
  508. return
  509. end
  510. if not isActivate(heroGrid) then
  511. return
  512. end
  513. resetArtifactsData(heroGrid)
  514. end
  515. -- 神威灵装基础信息查询
  516. function HeroArtifacts_Base_Query(human, heroID, heroIndex)
  517. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  518. if not heroGrid then
  519. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  520. end
  521. if not isOpen(heroGrid) then
  522. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  523. end
  524. local artifactsData = getArtifactsData(heroGrid)
  525. local currentLevel = artifactsData and artifactsData.level or 0
  526. local currentStar = artifactsData and artifactsData.star or 0
  527. local msgRet = Msg.gc.GC_HEROARTIFACTS_BASE_QUERY
  528. msgRet.artifactsLv = currentLevel
  529. msgRet.artifactsStar = currentStar
  530. msgRet.nowLevelAttrs[0] = 0
  531. msgRet.nowStarAttrs[0] = 0
  532. msgRet.effectArr[0] = 0
  533. msgRet.beSkillArr[0] = 0
  534. msgRet.isActivate = 0
  535. msgRet.redDotArr[0] = 2
  536. msgRet.redDotArr[1] = 0
  537. msgRet.redDotArr[2] = 0
  538. populateActivateCostMsg(msgRet.ActivateCost)
  539. populateTotalAttrMsg(msgRet.nowLevelAttrs, currentLevel, 1)
  540. populateTotalAttrMsg(msgRet.nowStarAttrs, currentStar, 2)
  541. if artifactsData and artifactsData.effectArr then
  542. populateEffectMsg(msgRet.effectArr, artifactsData.effectArr)
  543. end
  544. populateBeSkillMsg(msgRet.beSkillArr, artifactsData and artifactsData.beSkillArr)
  545. if isActivate(heroGrid) then
  546. msgRet.isActivate = 1
  547. if isCanUpGradeLv(human, heroGrid) then
  548. msgRet.redDotArr[1] = 1
  549. end
  550. if isCanUpGradeStar(human, heroGrid) then
  551. msgRet.redDotArr[2] = 1
  552. end
  553. end
  554. Msg.send(msgRet, human.fd)
  555. end
  556. -- 激活神威灵装
  557. function HeroArtifacts_Activate(human, heroID, heroIndex)
  558. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  559. if not heroGrid then
  560. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  561. end
  562. if not isOpen(heroGrid) then
  563. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  564. end
  565. if isActivate(heroGrid) then
  566. return Broadcast.sendErr(human, Lang.BINGSHU_LEARN_ERR_HAD)
  567. end
  568. local itemId, itemCnt = getActivateCost()
  569. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  570. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  571. end
  572. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  573. updateArtifactsState(heroGrid, true)
  574. HeroArtifacts_Base_Query(human, heroID, heroIndex)
  575. updateHeroAttr(human, heroID, heroIndex)
  576. -- 弹窗礼包
  577. GiftLogic = GiftLogic or require("topup.GiftLogic")
  578. GiftLogic.trigger(human, GiftLogic.GIFT_ARTIFACTS_OPEN, {currentVal = 0}, GiftLogic.GIFT_SEC_TYPE3)
  579. end
  580. -- 神威灵装升级信息查询
  581. function HeroArtifacts_Lv_Query(human, heroID, heroIndex)
  582. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  583. if not heroGrid then
  584. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  585. end
  586. if not isOpen(heroGrid) then
  587. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  588. end
  589. if not isActivate(heroGrid) then
  590. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  591. end
  592. local artifactsData = getArtifactsData(heroGrid)
  593. local UpGradeLvCfg = HeroArtifactsConfig.UpGradeLv
  594. local currentLevel = artifactsData and artifactsData.level or 0
  595. local maxLevel = UpGradeLvCfg[#UpGradeLvCfg].level
  596. local isMax = currentLevel >= maxLevel
  597. local nextLevel = isMax and maxLevel or currentLevel + 1
  598. local msgRet = Msg.gc.GC_HEROARTIFACTS_LV_QUERY
  599. msgRet.artifactsLv = currentLevel
  600. msgRet.artifactsLvMax = maxLevel
  601. populateTotalAttrMsg(msgRet.nowLevelAttrs, currentLevel, 1)
  602. populateNextAttrMsg(msgRet.nextLevelAttrs, nextLevel, 1, isMax)
  603. local itemId, itemCnt = getNextStageCost(currentLevel, 1, isMax)
  604. Grid.makeItem(msgRet.cost, itemId, itemCnt)
  605. Msg.send(msgRet, human.fd)
  606. end
  607. -- 神威灵装升级
  608. function HeroArtifacts_UpGrade_Level(human, heroID, heroIndex)
  609. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  610. if not heroGrid then
  611. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  612. end
  613. if not isOpen(heroGrid) then
  614. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  615. end
  616. if not isActivate(heroGrid) then
  617. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  618. end
  619. local artifactsData = getArtifactsData(heroGrid)
  620. local currentLevel = artifactsData and artifactsData.level or 0
  621. local UpGradeLvCfg = HeroArtifactsConfig.UpGradeLv
  622. local maxLevel = UpGradeLvCfg[#UpGradeLvCfg].level
  623. if currentLevel >= maxLevel then
  624. return Broadcast.sendErr(human, Lang.HERO_AF_LV_MAX)
  625. end
  626. local itemId, itemCnt = getNextStageCost(currentLevel, 1)
  627. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  628. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  629. end
  630. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  631. upGradeArtifactsLv(heroGrid, 1)
  632. HeroArtifacts_Lv_Query(human, heroID, heroIndex)
  633. updatePowerAndRedDot(human, heroGrid, heroID, heroIndex)
  634. HeroArtifacts_Base_Query(human, heroID, heroIndex)
  635. end
  636. -- 神威灵装升星信息查询
  637. function HeroArtifacts_Star_Query(human, heroID, heroIndex)
  638. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  639. if not heroGrid then
  640. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  641. end
  642. if not isOpen(heroGrid) then
  643. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  644. end
  645. if not isActivate(heroGrid) then
  646. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  647. end
  648. local artifactsData = getArtifactsData(heroGrid)
  649. local upGradeStarCfg = HeroArtifactsConfig.UpGradeStar
  650. local currentStar = artifactsData and artifactsData.star or 0
  651. local maxStar = upGradeStarCfg[#upGradeStarCfg].star
  652. local isMax = currentStar >= maxStar
  653. local nextStar = isMax and maxStar or currentStar + 1
  654. local msgRet = Msg.gc.GC_HEROARTIFACTS_STAR_QUERY
  655. msgRet.artifactsStar = currentStar
  656. msgRet.artifactsStarMax = maxStar
  657. populateTotalAttrMsg(msgRet.nowStarAttrs, currentStar, 2)
  658. populateNextAttrMsg(msgRet.nextStarAttrs, nextStar, 2, isMax)
  659. local itemId, itemCnt = getNextStageCost(currentStar, 2, isMax)
  660. Grid.makeItem(msgRet.cost, itemId, itemCnt)
  661. msgRet.effectArr[0] = 0
  662. if artifactsData and artifactsData.effectArr then
  663. populateEffectMsg(msgRet.effectArr, artifactsData.effectArr)
  664. end
  665. populateBeSkillMsg(msgRet.beSkillArr, artifactsData and artifactsData.beSkillArr)
  666. Msg.send(msgRet, human.fd)
  667. end
  668. -- 神威灵装升星
  669. function HeroArtifacts_UpGrade_Star(human, heroID, heroIndex)
  670. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  671. if not heroGrid then
  672. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  673. end
  674. if not isOpen(heroGrid) then
  675. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  676. end
  677. if not isActivate(heroGrid) then
  678. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  679. end
  680. local artifactsData = getArtifactsData(heroGrid)
  681. local currentStar = artifactsData and artifactsData.star or 0
  682. local upGradeStarCfg = HeroArtifactsConfig.UpGradeStar
  683. local maxStar = upGradeStarCfg[#upGradeStarCfg].star
  684. if currentStar >= maxStar then
  685. return Broadcast.sendErr(human, Lang.HERO_AF_LV_STAR)
  686. end
  687. local itemId, itemCnt = getNextStageCost(currentStar, 2)
  688. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  689. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  690. end
  691. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  692. -- 更新英雄星级
  693. upGradeArtifactsStar(heroGrid, 1)
  694. local nextStar = currentStar + 1
  695. local varCfg = HeroArtifactsConfig.Var[1]
  696. -- 激活新的特效
  697. if table.find(varCfg.activateEffectStarList, nextStar) then
  698. local excludeList = nil
  699. if artifactsData.effectArr then
  700. excludeList = genExcludeList(artifactsData.effectArr)
  701. end
  702. local effectIdx = randEffect(HeroArtifactsConfig.EffectList, excludeList)
  703. if not effectIdx then
  704. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  705. end
  706. local effectLv = randEffectLv()
  707. if not effectLv then
  708. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  709. end
  710. artifactsData.effectArr = artifactsData.effectArr or {}
  711. table.insert(artifactsData.effectArr, {idx = effectIdx, lv = effectLv})
  712. -- 处理新获得特效后,可能导致洗练界面两边数量不一致的情况
  713. if artifactsData.effectArrTemp then
  714. table.insert(artifactsData.effectArrTemp, {idx = effectIdx, lv = effectLv})
  715. end
  716. end
  717. -- 激活新的被动技能
  718. if table.find(varCfg.activateBeSkillStarList, nextStar) then
  719. local excludeList = nil
  720. if artifactsData.beSkillArr then
  721. excludeList = genExcludeList(artifactsData.beSkillArr)
  722. end
  723. local beSkillIdx = randEffect(HeroArtifactsConfig.BeSkillList, excludeList)
  724. if not beSkillIdx then
  725. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  726. end
  727. artifactsData.beSkillArr = artifactsData.beSkillArr or {}
  728. table.insert(artifactsData.beSkillArr, {idx = beSkillIdx} )
  729. -- 处理新获得被动技能后,可能导致洗练界面两边数量不一致的情况
  730. if artifactsData.beSkillArrTemp then
  731. table.insert(artifactsData.beSkillArrTemp, {idx = beSkillIdx} )
  732. end
  733. end
  734. HeroArtifacts_Star_Query(human, heroID, heroIndex)
  735. updatePowerAndRedDot(human, heroGrid, heroID, heroIndex)
  736. HeroArtifacts_Base_Query(human, heroID, heroIndex)
  737. -- 弹窗礼包
  738. GiftLogic = GiftLogic or require("topup.GiftLogic")
  739. GiftLogic.trigger(human, GiftLogic.GIFT_ARTIFACTS_UPGRADE_STAR, {currentVal = nextStar}, GiftLogic.GIFT_SEC_TYPE3)
  740. end
  741. -- 神威灵装特效洗练信息查询
  742. function HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  743. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  744. if not heroGrid then
  745. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  746. end
  747. if not isOpen(heroGrid) then
  748. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  749. end
  750. if not isActivate(heroGrid) then
  751. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  752. end
  753. local artifactsData = getArtifactsData(heroGrid)
  754. local msgRet = Msg.gc.GC_HEROARTIFACTS_EFFECT_REFINE_QUERY
  755. msgRet.effectArr[0] = 0
  756. msgRet.effectArrTemp[0] = 0
  757. if artifactsData and artifactsData.effectArr then
  758. populateEffectMsg(msgRet.effectArr, artifactsData.effectArr)
  759. end
  760. if artifactsData and artifactsData.effectArrTemp then
  761. populateEffectMsg(msgRet.effectArrTemp, artifactsData.effectArrTemp)
  762. end
  763. msgRet.cost[0] = 0
  764. local varCfg = HeroArtifactsConfig.Var[1]
  765. local itemList = calcRefineCost(artifactsData and artifactsData.effectArr, varCfg.lockEffectCostIdList, varCfg.lockEffectCostNumList)
  766. if not itemList then
  767. return Broadcast.sendErr(human, Lang.DATA_ERR)
  768. end
  769. local len = 0
  770. for itemId, itemCnt in pairs(itemList) do
  771. len = len + 1
  772. msgRet.cost[0] = len
  773. Grid.makeItem(msgRet.cost[len], itemId, itemCnt)
  774. end
  775. Msg.send(msgRet, human.fd)
  776. end
  777. -- 锁定/解锁神威灵装特效
  778. function HeroArtifacts_Effect_Lock(human, heroID, heroIndex, effectIdxArr)
  779. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  780. if not heroGrid then
  781. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  782. end
  783. if not isOpen(heroGrid) then
  784. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  785. end
  786. if not isActivate(heroGrid) then
  787. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  788. end
  789. local artifactsData = getArtifactsData(heroGrid)
  790. if not artifactsData or not artifactsData.effectArr then
  791. return Broadcast.sendErr(human, Lang.HERO_AF_NO_EFFECT)
  792. end
  793. if artifactsData.effectArrTemp then
  794. return Broadcast.sendErr(human, Lang.HERO_AF_NEED_HANDLE_REFINE)
  795. end
  796. if effectIdxArr[0] >= #artifactsData.effectArr then
  797. return Broadcast.sendErr(human, Lang.HERO_AF_CANNOT_LOCK)
  798. end
  799. local lockIdxArr = {}
  800. for i=1,effectIdxArr[0] do
  801. lockIdxArr[i] = effectIdxArr[i]
  802. end
  803. for _, v in ipairs(artifactsData.effectArr) do
  804. if table.find(lockIdxArr, v.idx) then
  805. v.isLock = 1
  806. else
  807. v.isLock = 0
  808. end
  809. end
  810. HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  811. end
  812. -- 洗练神威灵装特效
  813. function HeroArtifacts_EffectRefine_Do(human, heroID, heroIndex)
  814. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  815. if not heroGrid then
  816. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  817. end
  818. if not isOpen(heroGrid) then
  819. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  820. end
  821. if not isActivate(heroGrid) then
  822. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  823. end
  824. local artifactsData = getArtifactsData(heroGrid)
  825. if not artifactsData or not artifactsData.effectArr then
  826. return Broadcast.sendErr(human, Lang.HERO_AF_NO_EFFECT)
  827. end
  828. local varCfg = HeroArtifactsConfig.Var[1]
  829. local itemList = calcRefineCost(artifactsData.effectArr, varCfg.lockEffectCostIdList, varCfg.lockEffectCostNumList)
  830. if not itemList then
  831. return Broadcast.sendErr(human, Lang.DATA_ERR)
  832. end
  833. for itemId, itemCnt in pairs(itemList) do
  834. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  835. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  836. end
  837. end
  838. for itemId, itemCnt in pairs(itemList) do
  839. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  840. end
  841. artifactsData.effectArrTemp = Util.copyTable(artifactsData.effectArr)
  842. for _, effctInfo in ipairs(artifactsData.effectArrTemp) do
  843. if not effctInfo.isLock or effctInfo.isLock == 0 then
  844. local excludeList = genExcludeList(artifactsData.effectArrTemp)
  845. local effectIdx = randEffect(HeroArtifactsConfig.EffectList, excludeList)
  846. effctInfo.idx = effectIdx
  847. local effectLv = randEffectLv()
  848. effctInfo.lv = effectLv
  849. end
  850. end
  851. HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  852. end
  853. -- 处理洗练出的神威灵装特效
  854. -- opType: 0-放弃,1-替换
  855. function HeroArtifacts_EffectRefine_Handle(human, heroID, heroIndex, opType)
  856. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  857. if not heroGrid then
  858. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  859. end
  860. if not isOpen(heroGrid) then
  861. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  862. end
  863. if not isActivate(heroGrid) then
  864. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  865. end
  866. if opType ~= 0 and opType ~= 1 then
  867. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  868. end
  869. local artifactsData = getArtifactsData(heroGrid)
  870. if not artifactsData or not artifactsData.effectArrTemp then
  871. return Broadcast.sendErr(human, Lang.HERO_AF_NO_REFINE_EFFECT)
  872. end
  873. if opType == 1 then
  874. for i, v in ipairs(artifactsData.effectArrTemp) do
  875. artifactsData.effectArr[i].idx = v.idx
  876. artifactsData.effectArr[i].lv = v.lv
  877. end
  878. end
  879. artifactsData.effectArrTemp = nil
  880. HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  881. updatePower(human)
  882. updateHeroAttr(human, heroID, heroIndex)
  883. end
  884. -- 神威灵装被动技能洗练信息查询
  885. function HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  886. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  887. if not heroGrid then
  888. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  889. end
  890. if not isOpen(heroGrid) then
  891. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  892. end
  893. if not isActivate(heroGrid) then
  894. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  895. end
  896. local artifactsData = getArtifactsData(heroGrid)
  897. local msgRet = Msg.gc.GC_HEROARTIFACTS_BESKILL_REFINE_QUERY
  898. msgRet.beSkillArr[0] = 0
  899. msgRet.beSkillArrTemp[0] = 0
  900. if artifactsData and artifactsData.beSkillArr then
  901. populateBeSkillMsg(msgRet.beSkillArr, artifactsData.beSkillArr)
  902. end
  903. if artifactsData and artifactsData.beSkillArrTemp then
  904. populateBeSkillMsg(msgRet.beSkillArrTemp, artifactsData.beSkillArrTemp)
  905. end
  906. msgRet.cost[0] = 0
  907. local varCfg = HeroArtifactsConfig.Var[1]
  908. local itemList = calcRefineCost(artifactsData and artifactsData.beSkillArr, varCfg.lockBeSkillCostIdList, varCfg.lockBeSkillCostNumList)
  909. if not itemList then
  910. return Broadcast.sendErr(human, Lang.DATA_ERR)
  911. end
  912. local len = 0
  913. for itemId, itemCnt in pairs(itemList) do
  914. len = len + 1
  915. msgRet.cost[0] = len
  916. Grid.makeItem(msgRet.cost[len], itemId, itemCnt)
  917. end
  918. Msg.send(msgRet, human.fd)
  919. end
  920. -- 锁定/解锁神威灵装被动技能
  921. function HeroArtifacts_BeSkill_Lock(human, heroID, heroIndex, beSkillIdxArr)
  922. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  923. if not heroGrid then
  924. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  925. end
  926. if not isOpen(heroGrid) then
  927. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  928. end
  929. if not isActivate(heroGrid) then
  930. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  931. end
  932. local artifactsData = getArtifactsData(heroGrid)
  933. if not artifactsData or not artifactsData.beSkillArr then
  934. return Broadcast.sendErr(human, Lang.HERO_AF_NO_BESKILL)
  935. end
  936. if artifactsData.beSkillArrTemp then
  937. return Broadcast.sendErr(human, Lang.HERO_AF_NEED_HANDLE_REFINE)
  938. end
  939. if beSkillIdxArr[0] >= #artifactsData.beSkillArr then
  940. return Broadcast.sendErr(human, Lang.HERO_AF_CANNOT_LOCK)
  941. end
  942. local lockIdxArr = {}
  943. for i=1,beSkillIdxArr[0] do
  944. lockIdxArr[i] = beSkillIdxArr[i]
  945. end
  946. for _, v in ipairs(artifactsData.beSkillArr) do
  947. if table.find(lockIdxArr, v.idx) then
  948. v.isLock = 1
  949. else
  950. v.isLock = 0
  951. end
  952. end
  953. HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  954. end
  955. -- 洗练神威灵装被动技能
  956. function HeroArtifacts_BeSkillRefine_Do(human, heroID, heroIndex)
  957. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  958. if not heroGrid then
  959. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  960. end
  961. if not isOpen(heroGrid) then
  962. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  963. end
  964. if not isActivate(heroGrid) then
  965. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  966. end
  967. local artifactsData = getArtifactsData(heroGrid)
  968. if not artifactsData or not artifactsData.beSkillArr then
  969. return Broadcast.sendErr(human, Lang.HERO_AF_NO_BESKILL)
  970. end
  971. local varCfg = HeroArtifactsConfig.Var[1]
  972. local itemList = calcRefineCost(artifactsData.beSkillArr, varCfg.lockBeSkillCostIdList, varCfg.lockBeSkillCostNumList)
  973. if not itemList then
  974. return Broadcast.sendErr(human, Lang.DATA_ERR)
  975. end
  976. for itemId, itemCnt in pairs(itemList) do
  977. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  978. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  979. end
  980. end
  981. for itemId, itemCnt in pairs(itemList) do
  982. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  983. end
  984. artifactsData.beSkillArrTemp = Util.copyTable(artifactsData.beSkillArr)
  985. for _, beSkillInfo in ipairs(artifactsData.beSkillArrTemp) do
  986. if not beSkillInfo.isLock or beSkillInfo.isLock == 0 then
  987. local excludeList = genExcludeList(artifactsData.beSkillArrTemp)
  988. local beSkillIdx = randEffect(HeroArtifactsConfig.BeSkillList, excludeList)
  989. beSkillInfo.idx = beSkillIdx
  990. end
  991. end
  992. HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  993. end
  994. -- 处理洗练出的神威灵装被动技能
  995. -- opType: 0-放弃,1-替换
  996. function HeroArtifacts_BeSkillRefine_Handle(human, heroID, heroIndex, opType)
  997. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  998. if not heroGrid then
  999. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  1000. end
  1001. if not isOpen(heroGrid) then
  1002. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  1003. end
  1004. if not isActivate(heroGrid) then
  1005. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  1006. end
  1007. if opType ~= 0 and opType ~= 1 then
  1008. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  1009. end
  1010. local artifactsData = getArtifactsData(heroGrid)
  1011. if not artifactsData or not artifactsData.beSkillArrTemp then
  1012. return Broadcast.sendErr(human, Lang.HERO_AF_NO_REFINE_BESKILL)
  1013. end
  1014. if opType == 1 then
  1015. for i, v in ipairs(artifactsData.beSkillArrTemp) do
  1016. artifactsData.beSkillArr[i].idx = v.idx
  1017. end
  1018. end
  1019. artifactsData.beSkillArrTemp = nil
  1020. HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  1021. updatePower(human)
  1022. updateHeroAttr(human, heroID, heroIndex)
  1023. end