ElfLogic.lua 18 KB

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