HeroArtifacts.lua 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246
  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. function GetArtifactsBeSkillList(heroGrid)
  340. if not heroGrid or not heroGrid.artifacts then
  341. return
  342. end
  343. local beSkillArr = heroGrid.artifacts.beSkillArr
  344. if not beSkillArr then
  345. return
  346. end
  347. local skillArr
  348. for _, skillInfo in ipairs(beSkillArr) do
  349. local cfgIdx = skillInfo.idx
  350. local skillCfg = HeroArtifactsConfig.BeSkillList[cfgIdx]
  351. if skillCfg and skillCfg.skillType == 2 then
  352. skillArr = skillArr or {}
  353. skillArr[#skillArr+1] = skillCfg.skillId
  354. end
  355. end
  356. return skillArr
  357. end
  358. -- 获取神威灵装对符文/战意的属性加成列表
  359. function GetFuwenStrengthenAttrList(heroGrid)
  360. if not heroGrid or not heroGrid.artifacts then
  361. return
  362. end
  363. local beSkillArr = heroGrid.artifacts.beSkillArr
  364. if not beSkillArr then
  365. return
  366. end
  367. local skillId_2_Attr = nil
  368. for _, skillInfo in ipairs(beSkillArr) do
  369. local skillCfg = HeroArtifactsConfig.BeSkillList[skillInfo.idx]
  370. if skillCfg and skillCfg.skillType == 1 and next(skillCfg.attr) then
  371. local attrArr = {}
  372. for i, attrInfo in ipairs(skillCfg.attr) do
  373. attrArr[i] = {attrInfo[1], attrInfo[2]}
  374. end
  375. skillId_2_Attr = skillId_2_Attr or {}
  376. for _, fuwenSkillId in ipairs(skillCfg.fuwenSkillIdArr) do
  377. skillId_2_Attr[fuwenSkillId] = attrArr
  378. end
  379. end
  380. end
  381. return skillId_2_Attr
  382. end
  383. -- 获取神威灵装对符文/战意的强化技能列表
  384. function GetFuwenStrengthenSkillList(heroGrid)
  385. if not heroGrid or not heroGrid.artifacts then
  386. return
  387. end
  388. local beSkillArr = heroGrid.artifacts.beSkillArr
  389. if not beSkillArr then
  390. return
  391. end
  392. local skillId_2_strengthenSkillId = nil
  393. for _, skillInfo in ipairs(beSkillArr) do
  394. local skillCfg = HeroArtifactsConfig.BeSkillList[skillInfo.idx]
  395. if skillCfg and skillCfg.skillType == 1 and next(skillCfg.strengthenSkillIdArr) then
  396. skillId_2_strengthenSkillId = skillId_2_strengthenSkillId or {}
  397. for i, fuwenSkillId in ipairs(skillCfg.fuwenSkillIdArr) do
  398. skillId_2_strengthenSkillId[fuwenSkillId] = skillCfg.strengthenSkillIdArr[i]
  399. end
  400. end
  401. end
  402. return skillId_2_strengthenSkillId
  403. end
  404. -- 神威灵装加成
  405. function doCalcHero(human, heroGrid, addAttrs)
  406. if not heroGrid or not heroGrid.artifacts then
  407. return
  408. end
  409. local artifactsData = heroGrid.artifacts
  410. if artifactsData.level > 0 then
  411. local attrList = calcAttrs(HeroArtifactsConfig.UpGradeLv, artifactsData.level)
  412. for attrId, attrVal in pairs(attrList) do
  413. RoleAttr.updateValue(attrId, attrVal, addAttrs)
  414. end
  415. end
  416. if artifactsData.star > 0 then
  417. local attrList = calcAttrs(HeroArtifactsConfig.UpGradeStar, artifactsData.star)
  418. for attrId, attrVal in pairs(attrList) do
  419. RoleAttr.updateValue(attrId, attrVal, addAttrs)
  420. end
  421. end
  422. -- 特效
  423. if artifactsData.effectArr then
  424. for _, effectInfo in ipairs(artifactsData.effectArr) do
  425. local effectCfg = HeroArtifactsConfig.EffectList[effectInfo.idx]
  426. if effectCfg then
  427. local effectLv = effectInfo.lv
  428. local attrId = effectCfg.effectAttrId
  429. local attrVal = effectCfg.effectAttrValArr[effectLv] or 0
  430. RoleAttr.updateValue(attrId, attrVal, addAttrs)
  431. end
  432. end
  433. end
  434. end
  435. -- 红点判断
  436. function isArtifactsDot(human, heroGrid)
  437. if not isOpen(heroGrid) then
  438. return false
  439. end
  440. if not isActivate(heroGrid) then
  441. local varCfg = HeroArtifactsConfig.Var[1]
  442. local activateCostTb = varCfg.activateCost
  443. local itemId, itemCnt = activateCostTb[1][1], activateCostTb[1][2]
  444. if BagLogic.getItemCnt(human, itemId) >= itemCnt then
  445. return true
  446. end
  447. return false
  448. end
  449. local artifactsData = getArtifactsData(heroGrid)
  450. local currentLevel = artifactsData and artifactsData.level or 0
  451. local maxLevel = HeroArtifactsConfig.UpGradeLv[#HeroArtifactsConfig.UpGradeLv].level
  452. if currentLevel < maxLevel then
  453. local itemId, itemCnt = getNextStageCost(currentLevel, 1)
  454. if BagLogic.getItemCnt(human, itemId) >= itemCnt then
  455. return true
  456. end
  457. end
  458. local currentStar = artifactsData and artifactsData.star or 0
  459. local maxStar = HeroArtifactsConfig.UpGradeStar[#HeroArtifactsConfig.UpGradeStar].star
  460. if currentStar < maxStar then
  461. local itemId, itemCnt = getNextStageCost(currentStar, 2)
  462. if BagLogic.getItemCnt(human, itemId) >= itemCnt then
  463. return true
  464. end
  465. end
  466. return false
  467. end
  468. -- 返还材料计算
  469. function CalcReturnItem(human, heroGrid)
  470. if not isOpen(heroGrid) then
  471. return
  472. end
  473. if not isActivate(heroGrid) then
  474. return
  475. end
  476. local artifactsData = getArtifactsData(heroGrid)
  477. local itemList = {}
  478. local itemId, itemCnt = getActivateCost()
  479. itemList[itemId] = (itemList[itemId] or 0) + itemCnt
  480. if artifactsData and artifactsData.level > 0 then
  481. itemId, itemCnt = getTaotalStageCost(artifactsData.level, 1)
  482. itemList[itemId] = (itemList[itemId] or 0) + itemCnt
  483. end
  484. if artifactsData and artifactsData.star > 0 then
  485. itemId, itemCnt = getTaotalStageCost(artifactsData.star, 2)
  486. itemList[itemId] = (itemList[itemId] or 0) + itemCnt
  487. end
  488. return itemList
  489. end
  490. -- 重置神威灵装数据
  491. function ResetArtifactsData(human, heroGrid)
  492. if not isOpen(heroGrid) then
  493. return
  494. end
  495. if not isActivate(heroGrid) then
  496. return
  497. end
  498. resetArtifactsData(heroGrid)
  499. end
  500. -- 神威灵装基础信息查询
  501. function HeroArtifacts_Base_Query(human, heroID, heroIndex)
  502. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  503. if not heroGrid then
  504. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  505. end
  506. if not isOpen(heroGrid) then
  507. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  508. end
  509. local artifactsData = getArtifactsData(heroGrid)
  510. local currentLevel = artifactsData and artifactsData.level or 0
  511. local currentStar = artifactsData and artifactsData.star or 0
  512. local msgRet = Msg.gc.GC_HEROARTIFACTS_BASE_QUERY
  513. msgRet.artifactsLv = currentLevel
  514. msgRet.artifactsStar = currentStar
  515. msgRet.nowLevelAttrs[0] = 0
  516. msgRet.nowStarAttrs[0] = 0
  517. msgRet.effectArr[0] = 0
  518. msgRet.beSkillArr[0] = 0
  519. msgRet.isActivate = isActivate(heroGrid) and 1 or 0
  520. populateActivateCostMsg(msgRet.ActivateCost)
  521. populateTotalAttrMsg(msgRet.nowLevelAttrs, currentLevel, 1)
  522. populateTotalAttrMsg(msgRet.nowStarAttrs, currentStar, 2)
  523. if artifactsData and artifactsData.effectArr then
  524. populateEffectMsg(msgRet.effectArr, artifactsData.effectArr)
  525. end
  526. populateBeSkillMsg(msgRet.beSkillArr, artifactsData and artifactsData.beSkillArr)
  527. Msg.send(msgRet, human.fd)
  528. end
  529. -- 激活神威灵装
  530. function HeroArtifacts_Activate(human, heroID, heroIndex)
  531. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  532. if not heroGrid then
  533. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  534. end
  535. if not isOpen(heroGrid) then
  536. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  537. end
  538. if isActivate(heroGrid) then
  539. return Broadcast.sendErr(human, Lang.BINGSHU_LEARN_ERR_HAD)
  540. end
  541. local itemId, itemCnt = getActivateCost()
  542. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  543. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  544. end
  545. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  546. updateArtifactsState(heroGrid, true)
  547. HeroArtifacts_Base_Query(human, heroID, heroIndex)
  548. -- 弹窗礼包
  549. GiftLogic = GiftLogic or require("topup.GiftLogic")
  550. GiftLogic.trigger(human, GiftLogic.GIFT_ARTIFACTS_OPEN, {currentVal = 0}, GiftLogic.GIFT_SEC_TYPE3)
  551. end
  552. -- 神威灵装升级信息查询
  553. function HeroArtifacts_Lv_Query(human, heroID, heroIndex)
  554. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  555. if not heroGrid then
  556. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  557. end
  558. if not isOpen(heroGrid) then
  559. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  560. end
  561. if not isActivate(heroGrid) then
  562. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  563. end
  564. local artifactsData = getArtifactsData(heroGrid)
  565. local UpGradeLvCfg = HeroArtifactsConfig.UpGradeLv
  566. local currentLevel = artifactsData and artifactsData.level or 0
  567. local maxLevel = UpGradeLvCfg[#UpGradeLvCfg].level
  568. local isMax = currentLevel >= maxLevel
  569. local nextLevel = isMax and maxLevel or currentLevel + 1
  570. local msgRet = Msg.gc.GC_HEROARTIFACTS_LV_QUERY
  571. msgRet.artifactsLv = currentLevel
  572. msgRet.artifactsLvMax = maxLevel
  573. populateTotalAttrMsg(msgRet.nowLevelAttrs, currentLevel, 1)
  574. populateNextAttrMsg(msgRet.nextLevelAttrs, nextLevel, 1, isMax)
  575. local itemId, itemCnt = getNextStageCost(currentLevel, 1, isMax)
  576. Grid.makeItem(msgRet.cost, itemId, itemCnt)
  577. Msg.send(msgRet, human.fd)
  578. end
  579. -- 神威灵装升级
  580. function HeroArtifacts_UpGrade_Level(human, heroID, heroIndex)
  581. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  582. if not heroGrid then
  583. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  584. end
  585. if not isOpen(heroGrid) then
  586. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  587. end
  588. if not isActivate(heroGrid) then
  589. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  590. end
  591. local artifactsData = getArtifactsData(heroGrid)
  592. local currentLevel = artifactsData and artifactsData.level or 0
  593. local UpGradeLvCfg = HeroArtifactsConfig.UpGradeLv
  594. local maxLevel = UpGradeLvCfg[#UpGradeLvCfg].level
  595. if currentLevel >= maxLevel then
  596. return Broadcast.sendErr(human, Lang.HERO_AF_LV_MAX)
  597. end
  598. local itemId, itemCnt = getNextStageCost(currentLevel, 1)
  599. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  600. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  601. end
  602. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  603. upGradeArtifactsLv(heroGrid, 1)
  604. HeroArtifacts_Lv_Query(human, heroID, heroIndex)
  605. updatePowerAndRedDot(human, heroGrid, heroID, heroIndex)
  606. end
  607. -- 神威灵装升星信息查询
  608. function HeroArtifacts_Star_Query(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 upGradeStarCfg = HeroArtifactsConfig.UpGradeStar
  621. local currentStar = artifactsData and artifactsData.star or 0
  622. local maxStar = upGradeStarCfg[#upGradeStarCfg].star
  623. local isMax = currentStar >= maxStar
  624. local nextStar = isMax and maxStar or currentStar + 1
  625. local msgRet = Msg.gc.GC_HEROARTIFACTS_STAR_QUERY
  626. msgRet.artifactsStar = currentStar
  627. msgRet.artifactsStarMax = maxStar
  628. populateTotalAttrMsg(msgRet.nowStarAttrs, currentStar, 2)
  629. populateNextAttrMsg(msgRet.nextStarAttrs, nextStar, 2, isMax)
  630. local itemId, itemCnt = getNextStageCost(currentStar, 2, isMax)
  631. Grid.makeItem(msgRet.cost, itemId, itemCnt)
  632. msgRet.effectArr[0] = 0
  633. if artifactsData and artifactsData.effectArr then
  634. populateEffectMsg(msgRet.effectArr, artifactsData.effectArr)
  635. end
  636. populateBeSkillMsg(msgRet.beSkillArr, artifactsData and artifactsData.beSkillArr)
  637. Msg.send(msgRet, human.fd)
  638. end
  639. -- 神威灵装升星
  640. function HeroArtifacts_UpGrade_Star(human, heroID, heroIndex)
  641. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  642. if not heroGrid then
  643. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  644. end
  645. if not isOpen(heroGrid) then
  646. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  647. end
  648. if not isActivate(heroGrid) then
  649. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  650. end
  651. local artifactsData = getArtifactsData(heroGrid)
  652. local currentStar = artifactsData and artifactsData.star or 0
  653. local upGradeStarCfg = HeroArtifactsConfig.UpGradeStar
  654. local maxStar = upGradeStarCfg[#upGradeStarCfg].star
  655. if currentStar >= maxStar then
  656. return Broadcast.sendErr(human, Lang.HERO_AF_LV_STAR)
  657. end
  658. local itemId, itemCnt = getNextStageCost(currentStar, 2)
  659. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  660. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  661. end
  662. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  663. -- 更新英雄星级
  664. upGradeArtifactsStar(heroGrid, 1)
  665. local nextStar = currentStar + 1
  666. local varCfg = HeroArtifactsConfig.Var[1]
  667. -- 激活新的特效
  668. if table.find(varCfg.activateEffectStarList, nextStar) then
  669. local excludeList = nil
  670. if artifactsData.effectArr then
  671. excludeList = genExcludeList(artifactsData.effectArr)
  672. end
  673. local effectIdx = randEffect(HeroArtifactsConfig.EffectList, excludeList)
  674. if not effectIdx then
  675. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  676. end
  677. local effectLv = randEffectLv()
  678. if not effectLv then
  679. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  680. end
  681. artifactsData.effectArr = artifactsData.effectArr or {}
  682. table.insert(artifactsData.effectArr, {idx = effectIdx, lv = effectLv})
  683. -- 处理新获得特效后,可能导致洗练界面两边数量不一致的情况
  684. if artifactsData.effectArrTemp then
  685. table.insert(artifactsData.effectArrTemp, {idx = effectIdx, lv = effectLv})
  686. end
  687. end
  688. -- 激活新的被动技能
  689. if table.find(varCfg.activateBeSkillStarList, nextStar) then
  690. local excludeList = nil
  691. if artifactsData.beSkillArr then
  692. excludeList = genExcludeList(artifactsData.beSkillArr)
  693. end
  694. local beSkillIdx = randEffect(HeroArtifactsConfig.BeSkillList, excludeList)
  695. if not beSkillIdx then
  696. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  697. end
  698. artifactsData.beSkillArr = artifactsData.beSkillArr or {}
  699. table.insert(artifactsData.beSkillArr, {idx = beSkillIdx} )
  700. -- 处理新获得被动技能后,可能导致洗练界面两边数量不一致的情况
  701. if artifactsData.beSkillArrTemp then
  702. table.insert(artifactsData.beSkillArrTemp, {idx = beSkillIdx} )
  703. end
  704. end
  705. HeroArtifacts_Star_Query(human, heroID, heroIndex)
  706. updatePowerAndRedDot(human, heroGrid, heroID, heroIndex)
  707. -- 弹窗礼包
  708. GiftLogic = GiftLogic or require("topup.GiftLogic")
  709. GiftLogic.trigger(human, GiftLogic.GIFT_ARTIFACTS_UPGRADE_STAR, {currentVal = nextStar}, GiftLogic.GIFT_SEC_TYPE3)
  710. end
  711. -- 神威灵装特效洗练信息查询
  712. function HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  713. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  714. if not heroGrid then
  715. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  716. end
  717. if not isOpen(heroGrid) then
  718. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  719. end
  720. if not isActivate(heroGrid) then
  721. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  722. end
  723. local artifactsData = getArtifactsData(heroGrid)
  724. local msgRet = Msg.gc.GC_HEROARTIFACTS_EFFECT_REFINE_QUERY
  725. msgRet.effectArr[0] = 0
  726. msgRet.effectArrTemp[0] = 0
  727. if artifactsData and artifactsData.effectArr then
  728. populateEffectMsg(msgRet.effectArr, artifactsData.effectArr)
  729. end
  730. if artifactsData and artifactsData.effectArrTemp then
  731. populateEffectMsg(msgRet.effectArrTemp, artifactsData.effectArrTemp)
  732. end
  733. msgRet.cost[0] = 0
  734. local varCfg = HeroArtifactsConfig.Var[1]
  735. local itemList = calcRefineCost(artifactsData and artifactsData.effectArr, varCfg.lockEffectCostIdList, varCfg.lockEffectCostNumList)
  736. if not itemList then
  737. return Broadcast.sendErr(human, Lang.DATA_ERR)
  738. end
  739. local len = 0
  740. for itemId, itemCnt in pairs(itemList) do
  741. len = len + 1
  742. msgRet.cost[0] = len
  743. Grid.makeItem(msgRet.cost[len], itemId, itemCnt)
  744. end
  745. Msg.send(msgRet, human.fd)
  746. end
  747. -- 锁定/解锁神威灵装特效
  748. function HeroArtifacts_Effect_Lock(human, heroID, heroIndex, effectIdxArr)
  749. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  750. if not heroGrid then
  751. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  752. end
  753. if not isOpen(heroGrid) then
  754. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  755. end
  756. if not isActivate(heroGrid) then
  757. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  758. end
  759. local artifactsData = getArtifactsData(heroGrid)
  760. if not artifactsData or not artifactsData.effectArr then
  761. return Broadcast.sendErr(human, Lang.HERO_AF_NO_EFFECT)
  762. end
  763. if artifactsData.effectArrTemp then
  764. return Broadcast.sendErr(human, Lang.HERO_AF_NEED_HANDLE_REFINE)
  765. end
  766. if effectIdxArr[0] >= #artifactsData.effectArr then
  767. return Broadcast.sendErr(human, Lang.HERO_AF_CANNOT_LOCK)
  768. end
  769. local lockIdxArr = {}
  770. for i=1,effectIdxArr[0] do
  771. lockIdxArr[i] = effectIdxArr[i]
  772. end
  773. for _, v in ipairs(artifactsData.effectArr) do
  774. if table.find(lockIdxArr, v.idx) then
  775. v.isLock = 1
  776. else
  777. v.isLock = 0
  778. end
  779. end
  780. HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  781. end
  782. -- 洗练神威灵装特效
  783. function HeroArtifacts_EffectRefine_Do(human, heroID, heroIndex)
  784. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  785. if not heroGrid then
  786. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  787. end
  788. if not isOpen(heroGrid) then
  789. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  790. end
  791. if not isActivate(heroGrid) then
  792. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  793. end
  794. local artifactsData = getArtifactsData(heroGrid)
  795. if not artifactsData or not artifactsData.effectArr then
  796. return Broadcast.sendErr(human, Lang.HERO_AF_NO_EFFECT)
  797. end
  798. local varCfg = HeroArtifactsConfig.Var[1]
  799. local itemList = calcRefineCost(artifactsData.effectArr, varCfg.lockEffectCostIdList, varCfg.lockEffectCostNumList)
  800. if not itemList then
  801. return Broadcast.sendErr(human, Lang.DATA_ERR)
  802. end
  803. for itemId, itemCnt in pairs(itemList) do
  804. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  805. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  806. end
  807. end
  808. for itemId, itemCnt in pairs(itemList) do
  809. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  810. end
  811. artifactsData.effectArrTemp = Util.copyTable(artifactsData.effectArr)
  812. for _, effctInfo in ipairs(artifactsData.effectArrTemp) do
  813. if not effctInfo.isLock or effctInfo.isLock == 0 then
  814. local excludeList = genExcludeList(artifactsData.effectArrTemp)
  815. local effectIdx = randEffect(HeroArtifactsConfig.EffectList, excludeList)
  816. effctInfo.idx = effectIdx
  817. local effectLv = randEffectLv()
  818. effctInfo.lv = effectLv
  819. end
  820. end
  821. HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  822. end
  823. -- 处理洗练出的神威灵装特效
  824. -- opType: 0-放弃,1-替换
  825. function HeroArtifacts_EffectRefine_Handle(human, heroID, heroIndex, opType)
  826. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  827. if not heroGrid then
  828. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  829. end
  830. if not isOpen(heroGrid) then
  831. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  832. end
  833. if not isActivate(heroGrid) then
  834. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  835. end
  836. if opType ~= 0 and opType ~= 1 then
  837. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  838. end
  839. local artifactsData = getArtifactsData(heroGrid)
  840. if not artifactsData or not artifactsData.effectArrTemp then
  841. return Broadcast.sendErr(human, Lang.HERO_AF_NO_REFINE_EFFECT)
  842. end
  843. if opType == 1 then
  844. for i, v in ipairs(artifactsData.effectArrTemp) do
  845. artifactsData.effectArr[i].idx = v.idx
  846. artifactsData.effectArr[i].lv = v.lv
  847. end
  848. end
  849. artifactsData.effectArrTemp = nil
  850. HeroArtifacts_EffectRefine_Query(human, heroID, heroIndex)
  851. updatePower(human)
  852. updateHeroAttr(human, heroID, heroIndex)
  853. end
  854. -- 神威灵装被动技能洗练信息查询
  855. function HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  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. local artifactsData = getArtifactsData(heroGrid)
  867. local msgRet = Msg.gc.GC_HEROARTIFACTS_BESKILL_REFINE_QUERY
  868. msgRet.beSkillArr[0] = 0
  869. msgRet.beSkillArrTemp[0] = 0
  870. if artifactsData and artifactsData.beSkillArr then
  871. populateBeSkillMsg(msgRet.beSkillArr, artifactsData.beSkillArr)
  872. end
  873. if artifactsData and artifactsData.beSkillArrTemp then
  874. populateBeSkillMsg(msgRet.beSkillArrTemp, artifactsData.beSkillArrTemp)
  875. end
  876. msgRet.cost[0] = 0
  877. local varCfg = HeroArtifactsConfig.Var[1]
  878. local itemList = calcRefineCost(artifactsData and artifactsData.beSkillArr, varCfg.lockBeSkillCostIdList, varCfg.lockBeSkillCostNumList)
  879. if not itemList then
  880. return Broadcast.sendErr(human, Lang.DATA_ERR)
  881. end
  882. local len = 0
  883. for itemId, itemCnt in pairs(itemList) do
  884. len = len + 1
  885. msgRet.cost[0] = len
  886. Grid.makeItem(msgRet.cost[len], itemId, itemCnt)
  887. end
  888. Msg.send(msgRet, human.fd)
  889. end
  890. -- 锁定/解锁神威灵装被动技能
  891. function HeroArtifacts_BeSkill_Lock(human, heroID, heroIndex, beSkillIdxArr)
  892. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  893. if not heroGrid then
  894. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  895. end
  896. if not isOpen(heroGrid) then
  897. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  898. end
  899. if not isActivate(heroGrid) then
  900. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  901. end
  902. local artifactsData = getArtifactsData(heroGrid)
  903. if not artifactsData or not artifactsData.beSkillArr then
  904. return Broadcast.sendErr(human, Lang.HERO_AF_NO_BESKILL)
  905. end
  906. if artifactsData.beSkillArrTemp then
  907. return Broadcast.sendErr(human, Lang.HERO_AF_NEED_HANDLE_REFINE)
  908. end
  909. if beSkillIdxArr[0] >= #artifactsData.beSkillArr then
  910. return Broadcast.sendErr(human, Lang.HERO_AF_CANNOT_LOCK)
  911. end
  912. local lockIdxArr = {}
  913. for i=1,beSkillIdxArr[0] do
  914. lockIdxArr[i] = beSkillIdxArr[i]
  915. end
  916. for _, v in ipairs(artifactsData.beSkillArr) do
  917. if table.find(lockIdxArr, v.idx) then
  918. v.isLock = 1
  919. else
  920. v.isLock = 0
  921. end
  922. end
  923. HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  924. end
  925. -- 洗练神威灵装被动技能
  926. function HeroArtifacts_BeSkillRefine_Do(human, heroID, heroIndex)
  927. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  928. if not heroGrid then
  929. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  930. end
  931. if not isOpen(heroGrid) then
  932. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  933. end
  934. if not isActivate(heroGrid) then
  935. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  936. end
  937. local artifactsData = getArtifactsData(heroGrid)
  938. if not artifactsData or not artifactsData.beSkillArr then
  939. return Broadcast.sendErr(human, Lang.HERO_AF_NO_BESKILL)
  940. end
  941. local varCfg = HeroArtifactsConfig.Var[1]
  942. local itemList = calcRefineCost(artifactsData.beSkillArr, varCfg.lockBeSkillCostIdList, varCfg.lockBeSkillCostNumList)
  943. if not itemList then
  944. return Broadcast.sendErr(human, Lang.DATA_ERR)
  945. end
  946. for itemId, itemCnt in pairs(itemList) do
  947. if BagLogic.getItemCnt(human, itemId) < itemCnt then
  948. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  949. end
  950. end
  951. for itemId, itemCnt in pairs(itemList) do
  952. BagLogic.delItem(human, itemId, itemCnt, LOGTAG)
  953. end
  954. artifactsData.beSkillArrTemp = Util.copyTable(artifactsData.beSkillArr)
  955. for _, beSkillInfo in ipairs(artifactsData.beSkillArrTemp) do
  956. if not beSkillInfo.isLock or beSkillInfo.isLock == 0 then
  957. local excludeList = genExcludeList(artifactsData.beSkillArrTemp)
  958. local beSkillIdx = randEffect(HeroArtifactsConfig.BeSkillList, excludeList)
  959. beSkillInfo.idx = beSkillIdx
  960. end
  961. end
  962. HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  963. end
  964. -- 处理洗练出的神威灵装被动技能
  965. -- opType: 0-放弃,1-替换
  966. function HeroArtifacts_BeSkillRefine_Handle(human, heroID, heroIndex, opType)
  967. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  968. if not heroGrid then
  969. return Broadcast.sendErr(human, Lang.FUWEN_HERO_GRID_ERR)
  970. end
  971. if not isOpen(heroGrid) then
  972. return Broadcast.sendErr(human, Lang.HEROPUB_STAR_NOT_ENOUGH)
  973. end
  974. if not isActivate(heroGrid) then
  975. return Broadcast.sendErr(human, Lang.HERO_AF_NOT_ACTIVATE)
  976. end
  977. if opType ~= 0 and opType ~= 1 then
  978. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  979. end
  980. local artifactsData = getArtifactsData(heroGrid)
  981. if not artifactsData or not artifactsData.beSkillArrTemp then
  982. return Broadcast.sendErr(human, Lang.HERO_AF_NO_REFINE_BESKILL)
  983. end
  984. if opType == 1 then
  985. for i, v in ipairs(artifactsData.beSkillArrTemp) do
  986. artifactsData.beSkillArr[i].idx = v.idx
  987. end
  988. end
  989. artifactsData.beSkillArrTemp = nil
  990. HeroArtifacts_BeSkillRefine_Query(human, heroID, heroIndex)
  991. updatePower(human)
  992. updateHeroAttr(human, heroID, heroIndex)
  993. end