ElfLogic.lua 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. -- 精灵系统
  2. --db
  3. --[=[
  4. human.db.elfData = {
  5. [elfId1] = {
  6. level = 0,
  7. star = 0,
  8. },
  9. [elfId2] = {
  10. level = 0,
  11. star = 0,
  12. },
  13. }
  14. ]=]--
  15. local Msg = require("core.Msg")
  16. local Lang = require("common.Lang")
  17. local Broadcast = require("broadcast.Broadcast")
  18. local ElfConfig = require("excel.elf")
  19. local ItemConfig = require("excel.item").item
  20. local Grid = require("bag.Grid")
  21. local BagLogic = require("bag.BagLogic")
  22. local Skill = require("combat.Skill")
  23. local RoleAttr = require("role.RoleAttr")
  24. local RoleDefine = require("role.RoleDefine")
  25. local ObjHuman = require("core.ObjHuman")
  26. local RoleSystemLogic = require("roleSystem.RoleSystemLogic")
  27. local RoleSystemDefine = require("roleSystem.RoleSystemDefine")
  28. -- local HuanJingTowerLogic = require("huanjingTower.HuanjingTowerLogic")
  29. local TalismanLogic = require("talisman.TalismanLogic")
  30. local TriggerLogic = require("trigger.TriggerLogic")
  31. local TriggerDefine = require("trigger.TriggerDefine")
  32. local ChengjiuLogic = require("chengjiu.ChengjiuLogic")
  33. local GiftLogic
  34. local ELF_UPGRADELV_LOG_TAG = "elfUpGradeLv"
  35. local ELF_UPGRADESTAR_LOG_TAG = "elfUpGradeStar"
  36. -- local ELF_COND_TOWER_LEVEL = 600
  37. local ELF_2_CHENGJIU_TASKID = 406 -- 精灵系统对应的成就任务Id
  38. local function initElfData(human)
  39. human.db.elfData = {}
  40. end
  41. local function getElfData(human)
  42. return human.db.elfData
  43. end
  44. local function updateElfData(human, elfId, newLevel, newStar)
  45. local elfData = getElfData(human)
  46. if not elfData then
  47. initElfData(human)
  48. elfData = getElfData(human)
  49. end
  50. elfData[elfId] = elfData[elfId] or {level = 0, star = 0}
  51. if newLevel then
  52. elfData[elfId].level = newLevel
  53. end
  54. if newStar then
  55. elfData[elfId].star = newStar
  56. end
  57. end
  58. -- 获取来自秘宝的属性倍数加成
  59. local function getAttrMulFromTalisman(human)
  60. local attrMul = TalismanLogic.getTalismanAdd(human, TalismanLogic.OTHER_EFFECT_TBL.Elf_Attr_Mul)
  61. attrMul = attrMul / 100
  62. return attrMul
  63. end
  64. local function getNextStarCostCnt(nextStar)
  65. for _, starCfg in ipairs(ElfConfig.UpGradeStar) do
  66. if nextStar == starCfg.star then
  67. return starCfg.itemCnt
  68. end
  69. end
  70. return 0
  71. end
  72. local function generateCfgByQuality(targetQuality)
  73. local tbl = {}
  74. for id, cfg in ipairs(ElfConfig.Elf) do
  75. if cfg.elfQuality == targetQuality then
  76. tbl[id] = cfg
  77. end
  78. end
  79. if not next(tbl) then
  80. return nil
  81. end
  82. return tbl
  83. end
  84. local function getElfCfgById(targetElfId)
  85. for _, elfCfg in ipairs(ElfConfig.Elf) do
  86. if elfCfg.elfId == targetElfId then
  87. return elfCfg
  88. end
  89. end
  90. end
  91. -- 计算一共可以升多少级, 消耗多少道具
  92. local function calcUpGrade(nowLv, itemAllCnt, maxLv)
  93. local addLv, oldItemAllCnt, itemCostCnt = 0, itemAllCnt, 0
  94. while true do
  95. nowLv = nowLv + 1
  96. if nowLv > maxLv then
  97. break
  98. end
  99. itemCostCnt = nowLv * 3 + 2
  100. if itemAllCnt < itemCostCnt then
  101. break
  102. end
  103. addLv = addLv + 1
  104. itemAllCnt = itemAllCnt - itemCostCnt
  105. end
  106. local useItemCnt = oldItemAllCnt - itemAllCnt
  107. return addLv, useItemCnt
  108. end
  109. -- 计算当前所有精灵的总星级
  110. local function calcAllElfStar(elfDataList)
  111. local stars = 0
  112. for _, elfData in pairs(elfDataList) do
  113. stars = stars + elfData.star
  114. end
  115. return stars
  116. end
  117. -- 计算精灵当前等级加成属性之和
  118. local function calcLvAttr(elfLv, attrCfg)
  119. local nowAttrVal = 0
  120. for i=1, elfLv do
  121. nowAttrVal = nowAttrVal + attrCfg[1] * i + attrCfg[2]
  122. end
  123. return nowAttrVal
  124. end
  125. local function populateMsgSimpleData(net, elfCfg, itemCfg, elfData)
  126. if not net or not elfCfg or not itemCfg then
  127. return
  128. end
  129. local elfNowLv = elfData and elfData.level or 0
  130. local elfNowStar = elfData and elfData.star or 0
  131. net.elfId = elfCfg.elfId
  132. net.elfName = itemCfg.name
  133. net.elfIcon = itemCfg.icon
  134. net.elfLv = elfNowLv
  135. net.elfStar = elfNowStar
  136. net.elfQuality = elfCfg.elfQuality
  137. net.maxLv = elfCfg.elfMaxLv
  138. net.maxStar = elfCfg.elfMaxStar
  139. local upGradeLvItemId = elfCfg.upGradeLvItemId
  140. local upGradeLvItemCnt = elfNowLv >= elfCfg.elfMaxLv and 0 or (elfNowLv + 1) * 3 + 2
  141. Grid.makeItem(net.elfUpGradeLvCost, upGradeLvItemId, upGradeLvItemCnt)
  142. local upGradeStarItemId = elfCfg.upGradeStarItemId
  143. local upGradeStarItemCnt = elfNowStar >= elfCfg.elfMaxStar and 0 or getNextStarCostCnt(elfNowStar+1)
  144. Grid.makeItem(net.elfUpGradeStarCost, upGradeStarItemId, upGradeStarItemCnt)
  145. end
  146. local function populateMsgAttr(attrNet, attrCfg, attrId, elfLv, isMax, attrMul)
  147. local sumAttrVal = calcLvAttr(elfLv, attrCfg)
  148. attrNet.nowAttr.key = attrId
  149. attrNet.nowAttr.value = sumAttrVal * (1 + attrMul)
  150. attrNet.addAtrr.key = attrId
  151. attrNet.addAtrr.value = (attrCfg[1] * (elfLv + 1) + attrCfg[2]) * (1 + attrMul)
  152. if isMax then
  153. attrNet.addAtrr.value = 0
  154. end
  155. end
  156. local function populateMsgAttr2(attrNet, attrId, attrVal, elfStar, isMax, attrMul)
  157. attrMul = 1 + attrMul
  158. attrNet.nowAttr.key = attrId
  159. attrNet.nowAttr.value = attrVal * elfStar * attrMul
  160. attrNet.addAtrr.key = attrId
  161. attrNet.addAtrr.value = attrVal
  162. if isMax then
  163. attrNet.addAtrr.value = 0
  164. end
  165. end
  166. --是否开启本系统
  167. local function isOpen(human)
  168. -- local towerLevel = HuanJingTowerLogic.getTowerLevel(human)
  169. -- if towerLevel >= ELF_COND_TOWER_LEVEL then
  170. -- return true
  171. -- end
  172. -- return false
  173. local state = ChengjiuLogic.GetTaskState(human, ELF_2_CHENGJIU_TASKID)
  174. if state == 2 then
  175. return true
  176. end
  177. return false
  178. end
  179. -- 重算战力
  180. local function updatePower(human)
  181. RoleAttr.cleanHeroAttrCache(human)
  182. RoleAttr.doCalc(human)
  183. ObjHuman.sendAttr(human, RoleDefine.ZHANDOULI)
  184. end
  185. --红点判断
  186. local function dotJudgment(human, cfgHtbl)
  187. local elfData = getElfData(human)
  188. for _, cfg in pairs(cfgHtbl) do
  189. local nowLevel, nowStar = 0, 0
  190. if elfData and elfData[cfg.elfId] then
  191. nowLevel = elfData[cfg.elfId].level
  192. nowStar = elfData[cfg.elfId].star
  193. end
  194. if nowStar < cfg.elfMaxStar then
  195. local upGradeStarCostCnt = getNextStarCostCnt(nowStar+1)
  196. if BagLogic.getItemCnt(human, cfg.upGradeStarItemId) >= upGradeStarCostCnt then
  197. return true
  198. end
  199. end
  200. -- 需要精灵可激活或已激活
  201. if nowStar >= 1 and nowLevel < cfg.elfMaxLv then
  202. nowLevel = nowLevel + 1
  203. local costItemCnt = nowLevel * 3 + 2
  204. if BagLogic.getItemCnt(human, cfg.upGradeLvItemId) >= costItemCnt then
  205. return true
  206. end
  207. end
  208. end
  209. return false
  210. end
  211. -- 红点更新
  212. local function updateDot(human, targetQuality)
  213. local cfgHtbl = generateCfgByQuality(targetQuality)
  214. -- 该品质的所有精灵不能升星和升级了
  215. if not dotJudgment(human, cfgHtbl) then
  216. local dotID = 0
  217. if targetQuality == 1 then
  218. dotID = RoleSystemDefine.ROLE_SYS_ID_2032
  219. elseif targetQuality == 2 then
  220. dotID = RoleSystemDefine.ROLE_SYS_ID_2033
  221. elseif targetQuality == 3 then
  222. dotID = RoleSystemDefine.ROLE_SYS_ID_2034
  223. else
  224. dotID = RoleSystemDefine.ROLE_SYS_ID_2035
  225. end
  226. --刷新单页
  227. RoleSystemLogic.onDot(human, dotID)
  228. --刷新入口处
  229. RoleSystemLogic.onDot(human, RoleSystemDefine.ROLE_SYS_ID_2031)
  230. end
  231. end
  232. -- 外部调用,精灵加成
  233. function doCalcHero(human, addAttrs)
  234. if not human or not human.db then
  235. return
  236. end
  237. local elfData = getElfData(human)
  238. if not elfData then
  239. return
  240. end
  241. local attrMul = getAttrMulFromTalisman(human)
  242. attrMul = 1 + attrMul
  243. for elfId, singleElfData in pairs(elfData) do
  244. local elfCfg = getElfCfgById(elfId)
  245. if elfCfg then
  246. -- 等级加成
  247. if singleElfData.level > 0 then
  248. local atkVal = calcLvAttr(singleElfData.level, elfCfg.nAttack1)
  249. local hpVal = calcLvAttr(singleElfData.level, elfCfg.nLife1)
  250. RoleAttr.updateValue(RoleDefine.ATK, atkVal * attrMul, addAttrs)
  251. RoleAttr.updateValue(RoleDefine.HP, hpVal * attrMul, addAttrs)
  252. end
  253. -- 星级加成
  254. RoleAttr.updateValue(RoleDefine.ATK, elfCfg.nAttack2 * singleElfData.star * attrMul, addAttrs)
  255. RoleAttr.updateValue(RoleDefine.HP, elfCfg.nLife2 * singleElfData.star * attrMul, addAttrs)
  256. RoleAttr.updateValue(RoleDefine.DEF, elfCfg.nDefense2 * singleElfData.star * attrMul, addAttrs)
  257. RoleAttr.updateValue(RoleDefine.SPEED, elfCfg.nSpeed2 * singleElfData.star * attrMul, addAttrs)
  258. end
  259. end
  260. end
  261. -- 外部调用, 本系统是否开启
  262. function ModuleisOpen(human)
  263. return isOpen(human)
  264. end
  265. -- 外部调用, 是否有红点
  266. function isDot(human, dotConfig)
  267. if not isOpen(human) then
  268. return false
  269. end
  270. --入口处的红点判断
  271. if dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2031 then
  272. return dotJudgment(human, ElfConfig.Elf)
  273. else
  274. --单个分页的红点
  275. local elfQuality = 0
  276. if dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2032 then
  277. elfQuality = 1
  278. elseif dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2033 then
  279. elfQuality = 2
  280. elseif dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2034 then
  281. elfQuality = 3
  282. else
  283. elfQuality = 4
  284. end
  285. local cfgHtbl = generateCfgByQuality(elfQuality)
  286. if not cfgHtbl then
  287. return false
  288. end
  289. return dotJudgment(human, cfgHtbl)
  290. end
  291. end
  292. -- 外部调用,是否激活了精灵
  293. function IsActivateElf(human, elfId)
  294. if not isOpen(human) then
  295. return false
  296. end
  297. local elfData = getElfData(human)
  298. if not elfData or not elfData[elfId] then
  299. return false
  300. end
  301. return true
  302. end
  303. -- 外部调用,获取精灵当前技能
  304. function GetElfSkill(human, elfId)
  305. -- if not isOpen(human) then
  306. -- return
  307. -- end
  308. local elfData = getElfData(human)
  309. if not elfData or not elfData[elfId] then
  310. return
  311. end
  312. local elfNowStar = elfData[elfId].star
  313. local elfCfg = getElfCfgById(elfId)
  314. if not elfCfg then
  315. return
  316. end
  317. return elfCfg.skillArr[elfNowStar]
  318. end
  319. -- 请求某个品质的所有精灵的简单数据
  320. function Elf_SimpleData_Query(human, targetElfQuality)
  321. if not isOpen(human) then
  322. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  323. end
  324. local elfData = getElfData(human) or {}
  325. local msgRet = Msg.gc.GC_ELF_SIMPLEDATA_QUERY
  326. local elfArr = msgRet.elfArr
  327. elfArr[0] = 0
  328. local len = 0
  329. msgRet.allStars = calcAllElfStar(elfData)
  330. for _, elfCfg in ipairs(ElfConfig.Elf) do
  331. if elfCfg.elfQuality == targetElfQuality then
  332. local elfId = elfCfg.elfId
  333. local itemCfg = ItemConfig[elfId]
  334. if itemCfg then
  335. len = len + 1
  336. populateMsgSimpleData(elfArr[len], elfCfg, itemCfg, elfData[elfId])
  337. end
  338. end
  339. end
  340. elfArr[0] = len
  341. Msg.send(msgRet, human.fd)
  342. end
  343. -- 请求某个精灵的详细数据
  344. function Elf_SingleElf_Query(human, elfId)
  345. if not isOpen(human) then
  346. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  347. end
  348. local itemCfg = ItemConfig[elfId]
  349. local elfCfg = getElfCfgById(elfId)
  350. if not itemCfg or not elfCfg then
  351. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  352. end
  353. local elfData = getElfData(human) or {}
  354. local targetElfData = elfData[elfId]
  355. local msgRet = Msg.gc.GC_ELF_SINGLE_QUERY
  356. populateMsgSimpleData(msgRet.elfSimpleData, elfCfg, itemCfg, targetElfData)
  357. local elfNowLv = targetElfData and targetElfData.level or 0
  358. local elfNowStar = targetElfData and targetElfData.star or 0
  359. local isMaxLv, isMaxStar = false, false
  360. if elfNowLv >= elfCfg.elfMaxLv then
  361. isMaxLv = true
  362. end
  363. if elfNowStar >= elfCfg.elfMaxStar then
  364. isMaxStar = true
  365. end
  366. local elfSkillDataMsg = msgRet.elfSkillData
  367. elfSkillDataMsg.nowSkillDesc = ""
  368. local elfNowSkillId = elfCfg.skillArr[elfNowStar]
  369. local nowSkillCfg = Skill.GetSkillConfig(elfNowSkillId)
  370. if nowSkillCfg then
  371. elfSkillDataMsg.nowSkillDesc = nowSkillCfg.desc
  372. end
  373. elfSkillDataMsg.nextSkillDesc = ""
  374. local elfNextSkillId = isMaxStar and elfCfg.skillArr[#elfCfg.skillArr] or elfCfg.skillArr[elfNowStar+1]
  375. local nextSkillCfg = Skill.GetSkillConfig(elfNextSkillId)
  376. if nextSkillCfg then
  377. elfSkillDataMsg.nextSkillDesc = nextSkillCfg.desc
  378. end
  379. elfSkillDataMsg.maxSkillDesc = ""
  380. local elfMaxSkillId = elfCfg.skillArr[#elfCfg.skillArr]
  381. local maxSkillCfg = Skill.GetSkillConfig(elfMaxSkillId)
  382. if maxSkillCfg then
  383. elfSkillDataMsg.maxSkillDesc = maxSkillCfg.desc
  384. end
  385. local attrMul = getAttrMulFromTalisman(human)
  386. msgRet.elfLvAttrInfo[0] = 2
  387. populateMsgAttr(msgRet.elfLvAttrInfo[1], elfCfg.nAttack1, RoleDefine.ATK, elfNowLv, isMaxLv, attrMul)
  388. populateMsgAttr(msgRet.elfLvAttrInfo[2], elfCfg.nLife1, RoleDefine.HP, elfNowLv, isMaxLv, attrMul)
  389. msgRet.elfStarAttrInfo[0] = 4
  390. populateMsgAttr2(msgRet.elfStarAttrInfo[1], RoleDefine.HP, elfCfg.nLife2, elfNowStar, isMaxStar, attrMul)
  391. populateMsgAttr2(msgRet.elfStarAttrInfo[2], RoleDefine.ATK, elfCfg.nAttack2, elfNowStar, isMaxStar, attrMul)
  392. populateMsgAttr2(msgRet.elfStarAttrInfo[3], RoleDefine.DEF, elfCfg.nDefense2, elfNowStar, isMaxStar, attrMul)
  393. populateMsgAttr2(msgRet.elfStarAttrInfo[4], RoleDefine.SPEED, elfCfg.nSpeed2, elfNowStar, isMaxStar, attrMul)
  394. Msg.send(msgRet, human.fd)
  395. end
  396. -- 精灵升级
  397. function Elf_UpGradeLv(human, elfId, opType)
  398. if not isOpen(human) then
  399. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  400. end
  401. local elfCfg = getElfCfgById(elfId)
  402. if not elfCfg then
  403. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  404. end
  405. local elfData = getElfData(human) or {}
  406. if not elfData[elfId] then
  407. return Broadcast.sendErr(human, Lang.ELF_NOT_ACTIVATE)
  408. end
  409. local elfNowLv = elfData[elfId].level or 0
  410. if elfNowLv >= elfCfg.elfMaxLv then
  411. return Broadcast.sendErr(human, Lang.COMMON_MAXLEVEL)
  412. end
  413. local upGradeLvItemId = elfCfg.upGradeLvItemId
  414. local upGradeLvItemCnt = 0
  415. local itemAllCnt = BagLogic.getItemCnt(human, upGradeLvItemId)
  416. if itemAllCnt <= 0 then
  417. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  418. end
  419. -- if BagLogic.getItemCnt(human, upGradeLvItemId) < upGradeLvItemCnt then
  420. -- return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  421. -- end
  422. local addLv = 0
  423. if opType == 1 then
  424. addLv = 1
  425. upGradeLvItemCnt = (elfNowLv + 1) * 3 + 2
  426. elseif opType == 2 then
  427. addLv, upGradeLvItemCnt = calcUpGrade(elfNowLv, itemAllCnt, elfCfg.elfMaxLv)
  428. else
  429. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  430. end
  431. if addLv == 0 or BagLogic.getItemCnt(human, upGradeLvItemId) < upGradeLvItemCnt then
  432. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  433. end
  434. BagLogic.delItem(human, upGradeLvItemId, upGradeLvItemCnt, ELF_UPGRADELV_LOG_TAG)
  435. updateElfData(human, elfId, elfNowLv+addLv)
  436. Elf_SingleElf_Query(human, elfId)
  437. updatePower(human)
  438. -- 红点刷新
  439. updateDot(human, elfCfg.elfQuality)
  440. end
  441. -- 精灵升星
  442. function Elf_UpGradeStar(human, elfId)
  443. if not isOpen(human) then
  444. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  445. end
  446. local elfCfg = getElfCfgById(elfId)
  447. if not elfCfg then
  448. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  449. end
  450. local elfData = getElfData(human) or {}
  451. local elfNowStar = elfData[elfId] and elfData[elfId].star or 0
  452. if elfNowStar >= elfCfg.elfMaxStar then
  453. return Broadcast.sendErr(human, Lang.COMMON_MAXLEVEL)
  454. end
  455. local nextStar = elfNowStar+1
  456. local upGradeStarItemId = elfCfg.upGradeStarItemId
  457. local upGradeStarItemCnt = getNextStarCostCnt(nextStar)
  458. if upGradeStarItemCnt == 0 then
  459. return Broadcast.sendErr(human, Lang.ELF_MAX_STAR)
  460. end
  461. if BagLogic.getItemCnt(human, upGradeStarItemId) < upGradeStarItemCnt then
  462. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  463. end
  464. BagLogic.delItem(human, upGradeStarItemId, upGradeStarItemCnt, ELF_UPGRADESTAR_LOG_TAG)
  465. updateElfData(human, elfId, nil, nextStar)
  466. Elf_SingleElf_Query(human, elfId)
  467. updatePower(human)
  468. -- 红点刷新
  469. updateDot(human, elfCfg.elfQuality)
  470. local nAllStar = calcAllElfStar(elfData)
  471. TriggerLogic.PublishEvent(TriggerDefine.EVENT_TYPE_JINGLING_STAR, human.db._id, 1)
  472. GiftLogic = GiftLogic or require("topup.GiftLogic")
  473. GiftLogic.trigger(human, GiftLogic.GIFT_ELF_UPGRADE_STAR, {currentVal = nAllStar}, GiftLogic.GIFT_SEC_TYPE1)
  474. end
  475. -- 布阵界面, 请求精灵数据
  476. function Elf_GetElfData_FromPosPage(human, targetElfQuality)
  477. local msgRet = Msg.gc.GC_ELF_POS_QUERY
  478. local elfArr = msgRet.elfArr
  479. elfArr[0] = 0
  480. local len = 0
  481. local elfData = getElfData(human) or {}
  482. for _, elfCfg in ipairs(ElfConfig.Elf) do
  483. if elfCfg.elfQuality == targetElfQuality then
  484. local elfId = elfCfg.elfId
  485. local itemCfg = ItemConfig[elfId]
  486. if itemCfg then
  487. len = len + 1
  488. local elfNowLv = elfData and elfData.level or 0
  489. local elfNowStar = elfData[elfId] and elfData[elfId].star or 0
  490. elfArr[len].elfId = elfId
  491. elfArr[len].elfName = itemCfg.name
  492. elfArr[len].elfIcon = itemCfg.icon
  493. elfArr[len].elfLv = elfNowLv
  494. elfArr[len].elfStar = elfNowStar
  495. elfArr[len].elfQuality = targetElfQuality
  496. elfArr[len].nowSkillDesc = ""
  497. elfArr[len].nowSkillIcon = ""
  498. local elfNowSkillId = elfCfg.skillArr[elfNowStar]
  499. local nowSkillCfg = Skill.GetSkillConfig(elfNowSkillId)
  500. if nowSkillCfg then
  501. elfArr[len].nowSkillDesc = nowSkillCfg.desc
  502. elfArr[len].nowSkillIcon = nowSkillCfg.icon
  503. end
  504. end
  505. end
  506. end
  507. elfArr[0] = len
  508. Msg.send(msgRet, human.fd)
  509. end