ElfLogic.lua 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  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. 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. local towerLevel = HuanJingTowerLogic.getTowerLevel(human)
  264. if towerLevel >= ELF_COND_TOWER_LEVEL then
  265. return true
  266. end
  267. return false
  268. end
  269. -- 外部调用, 是否有红点
  270. function isDot(human, dotConfig)
  271. if not isOpen(human) then
  272. return false
  273. end
  274. --入口处的红点判断
  275. if dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2031 then
  276. return dotJudgment(human, ElfConfig.Elf)
  277. else
  278. --单个分页的红点
  279. local elfQuality = 0
  280. if dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2032 then
  281. elfQuality = 1
  282. elseif dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2033 then
  283. elfQuality = 2
  284. elseif dotConfig.id == RoleSystemDefine.ROLE_SYS_ID_2034 then
  285. elfQuality = 3
  286. else
  287. elfQuality = 4
  288. end
  289. local cfgHtbl = generateCfgByQuality(elfQuality)
  290. if not cfgHtbl then
  291. return false
  292. end
  293. return dotJudgment(human, cfgHtbl)
  294. end
  295. end
  296. -- 外部调用,是否激活了精灵
  297. function IsActivateElf(human, elfId)
  298. if not isOpen(human) then
  299. return false
  300. end
  301. local elfData = getElfData(human)
  302. if not elfData or not elfData[elfId] then
  303. return false
  304. end
  305. return true
  306. end
  307. -- 外部调用,获取精灵当前技能
  308. function GetElfSkill(human, elfId)
  309. -- if not isOpen(human) then
  310. -- return
  311. -- end
  312. local elfData = getElfData(human)
  313. if not elfData or not elfData[elfId] then
  314. return
  315. end
  316. local elfNowStar = elfData[elfId].star
  317. local elfCfg = getElfCfgById(elfId)
  318. if not elfCfg then
  319. return
  320. end
  321. return elfCfg.skillArr[elfNowStar]
  322. end
  323. -- 请求某个品质的所有精灵的简单数据
  324. function Elf_SimpleData_Query(human, targetElfQuality)
  325. if not isOpen(human) then
  326. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  327. end
  328. local elfData = getElfData(human) or {}
  329. local msgRet = Msg.gc.GC_ELF_SIMPLEDATA_QUERY
  330. local elfArr = msgRet.elfArr
  331. elfArr[0] = 0
  332. local len = 0
  333. msgRet.allStars = calcAllElfStar(elfData)
  334. for _, elfCfg in ipairs(ElfConfig.Elf) do
  335. if elfCfg.elfQuality == targetElfQuality then
  336. local elfId = elfCfg.elfId
  337. local itemCfg = ItemConfig[elfId]
  338. if itemCfg then
  339. len = len + 1
  340. populateMsgSimpleData(elfArr[len], elfCfg, itemCfg, elfData[elfId])
  341. end
  342. end
  343. end
  344. elfArr[0] = len
  345. Msg.send(msgRet, human.fd)
  346. end
  347. -- 请求某个精灵的详细数据
  348. function Elf_SingleElf_Query(human, elfId)
  349. if not isOpen(human) then
  350. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  351. end
  352. local itemCfg = ItemConfig[elfId]
  353. local elfCfg = getElfCfgById(elfId)
  354. if not itemCfg or not elfCfg then
  355. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  356. end
  357. local elfData = getElfData(human) or {}
  358. local targetElfData = elfData[elfId]
  359. local msgRet = Msg.gc.GC_ELF_SINGLE_QUERY
  360. populateMsgSimpleData(msgRet.elfSimpleData, elfCfg, itemCfg, targetElfData)
  361. local elfNowLv = targetElfData and targetElfData.level or 0
  362. local elfNowStar = targetElfData and targetElfData.star or 0
  363. local isMaxLv, isMaxStar = false, false
  364. if elfNowLv >= elfCfg.elfMaxLv then
  365. isMaxLv = true
  366. end
  367. if elfNowStar >= elfCfg.elfMaxStar then
  368. isMaxStar = true
  369. end
  370. local elfSkillDataMsg = msgRet.elfSkillData
  371. elfSkillDataMsg.nowSkillDesc = ""
  372. local elfNowSkillId = elfCfg.skillArr[elfNowStar]
  373. local nowSkillCfg = Skill.GetSkillConfig(elfNowSkillId)
  374. if nowSkillCfg then
  375. elfSkillDataMsg.nowSkillDesc = nowSkillCfg.desc
  376. end
  377. elfSkillDataMsg.nextSkillDesc = ""
  378. local elfNextSkillId = isMaxStar and elfCfg.skillArr[#elfCfg.skillArr] or elfCfg.skillArr[elfNowStar+1]
  379. local nextSkillCfg = Skill.GetSkillConfig(elfNextSkillId)
  380. if nextSkillCfg then
  381. elfSkillDataMsg.nextSkillDesc = nextSkillCfg.desc
  382. end
  383. elfSkillDataMsg.maxSkillDesc = ""
  384. local elfMaxSkillId = elfCfg.skillArr[#elfCfg.skillArr]
  385. local maxSkillCfg = Skill.GetSkillConfig(elfMaxSkillId)
  386. if maxSkillCfg then
  387. elfSkillDataMsg.maxSkillDesc = maxSkillCfg.desc
  388. end
  389. local attrMul = getAttrMulFromTalisman(human)
  390. msgRet.elfLvAttrInfo[0] = 2
  391. populateMsgAttr(msgRet.elfLvAttrInfo[1], elfCfg.nAttack1, RoleDefine.ATK, elfNowLv, isMaxLv, attrMul)
  392. populateMsgAttr(msgRet.elfLvAttrInfo[2], elfCfg.nLife1, RoleDefine.HP, elfNowLv, isMaxLv, attrMul)
  393. msgRet.elfStarAttrInfo[0] = 4
  394. populateMsgAttr2(msgRet.elfStarAttrInfo[1], RoleDefine.HP, elfCfg.nLife2, elfNowStar, isMaxStar, attrMul)
  395. populateMsgAttr2(msgRet.elfStarAttrInfo[2], RoleDefine.ATK, elfCfg.nAttack2, elfNowStar, isMaxStar, attrMul)
  396. populateMsgAttr2(msgRet.elfStarAttrInfo[3], RoleDefine.DEF, elfCfg.nDefense2, elfNowStar, isMaxStar, attrMul)
  397. populateMsgAttr2(msgRet.elfStarAttrInfo[4], RoleDefine.SPEED, elfCfg.nSpeed2, elfNowStar, isMaxStar, attrMul)
  398. Msg.send(msgRet, human.fd)
  399. end
  400. -- 精灵升级
  401. function Elf_UpGradeLv(human, elfId, opType)
  402. if not isOpen(human) then
  403. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  404. end
  405. local elfCfg = getElfCfgById(elfId)
  406. if not elfCfg then
  407. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  408. end
  409. local elfData = getElfData(human) or {}
  410. if not elfData[elfId] then
  411. return Broadcast.sendErr(human, Lang.ELF_NOT_ACTIVATE)
  412. end
  413. local elfNowLv = elfData[elfId].level or 0
  414. if elfNowLv >= elfCfg.elfMaxLv then
  415. return Broadcast.sendErr(human, Lang.COMMON_MAXLEVEL)
  416. end
  417. local upGradeLvItemId = elfCfg.upGradeLvItemId
  418. local upGradeLvItemCnt = 0
  419. local itemAllCnt = BagLogic.getItemCnt(human, upGradeLvItemId)
  420. if itemAllCnt <= 0 then
  421. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  422. end
  423. -- if BagLogic.getItemCnt(human, upGradeLvItemId) < upGradeLvItemCnt then
  424. -- return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  425. -- end
  426. local addLv = 0
  427. if opType == 1 then
  428. addLv = 1
  429. upGradeLvItemCnt = (elfNowLv + 1) * 3 + 2
  430. elseif opType == 2 then
  431. addLv, upGradeLvItemCnt = calcUpGrade(elfNowLv, itemAllCnt, elfCfg.elfMaxLv)
  432. else
  433. return Broadcast.sendErr(human, Lang.COMMON_ARGUMENT_ERROR)
  434. end
  435. if addLv == 0 or BagLogic.getItemCnt(human, upGradeLvItemId) < upGradeLvItemCnt then
  436. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  437. end
  438. BagLogic.delItem(human, upGradeLvItemId, upGradeLvItemCnt, ELF_UPGRADELV_LOG_TAG)
  439. updateElfData(human, elfId, elfNowLv+addLv)
  440. Elf_SingleElf_Query(human, elfId)
  441. updatePower(human)
  442. -- 红点刷新
  443. updateDot(human, elfCfg.elfQuality)
  444. end
  445. -- 精灵升星
  446. function Elf_UpGradeStar(human, elfId)
  447. if not isOpen(human) then
  448. return Broadcast.sendErr(human, Lang.COMMOM_NOT_ENABLED)
  449. end
  450. local elfCfg = getElfCfgById(elfId)
  451. if not elfCfg then
  452. return Broadcast.sendErr(human, Lang.COMMON_COMFIG_ERROR)
  453. end
  454. local elfData = getElfData(human) or {}
  455. local elfNowStar = elfData[elfId] and elfData[elfId].star or 0
  456. if elfNowStar >= elfCfg.elfMaxStar then
  457. return Broadcast.sendErr(human, Lang.COMMON_MAXLEVEL)
  458. end
  459. local nextStar = elfNowStar+1
  460. local upGradeStarItemId = elfCfg.upGradeStarItemId
  461. local upGradeStarItemCnt = getNextStarCostCnt(nextStar)
  462. if upGradeStarItemCnt == 0 then
  463. return Broadcast.sendErr(human, Lang.ELF_MAX_STAR)
  464. end
  465. if BagLogic.getItemCnt(human, upGradeStarItemId) < upGradeStarItemCnt then
  466. return Broadcast.sendErr(human, Lang.COMMON_ITEM_NOT_ENOUGH)
  467. end
  468. BagLogic.delItem(human, upGradeStarItemId, upGradeStarItemCnt, ELF_UPGRADESTAR_LOG_TAG)
  469. updateElfData(human, elfId, nil, nextStar)
  470. Elf_SingleElf_Query(human, elfId)
  471. updatePower(human)
  472. -- 红点刷新
  473. updateDot(human, elfCfg.elfQuality)
  474. local nAllStar = calcAllElfStar(elfData)
  475. TriggerLogic.PublishEvent(TriggerDefine.EVENT_TYPE_JINGLING_STAR, human.db._id, 1)
  476. GiftLogic = GiftLogic or require("topup.GiftLogic")
  477. GiftLogic.trigger(human, GiftLogic.GIFT_ELF_UPGRADE_STAR, {currentVal = nAllStar}, GiftLogic.GIFT_SEC_TYPE3)
  478. end
  479. -- 布阵界面, 请求精灵数据
  480. function Elf_GetElfData_FromPosPage(human, targetElfQuality)
  481. local msgRet = Msg.gc.GC_ELF_POS_QUERY
  482. local elfArr = msgRet.elfArr
  483. elfArr[0] = 0
  484. local len = 0
  485. local elfData = getElfData(human) or {}
  486. for _, elfCfg in ipairs(ElfConfig.Elf) do
  487. if elfCfg.elfQuality == targetElfQuality then
  488. local elfId = elfCfg.elfId
  489. local itemCfg = ItemConfig[elfId]
  490. if itemCfg then
  491. len = len + 1
  492. local elfNowLv = elfData and elfData.level or 0
  493. local elfNowStar = elfData[elfId] and elfData[elfId].star or 0
  494. elfArr[len].elfId = elfId
  495. elfArr[len].elfName = itemCfg.name
  496. elfArr[len].elfIcon = itemCfg.icon
  497. elfArr[len].elfLv = elfNowLv
  498. elfArr[len].elfStar = elfNowStar
  499. elfArr[len].elfQuality = targetElfQuality
  500. elfArr[len].nowSkillDesc = ""
  501. elfArr[len].nowSkillIcon = ""
  502. local elfNowSkillId = elfCfg.skillArr[elfNowStar]
  503. local nowSkillCfg = Skill.GetSkillConfig(elfNowSkillId)
  504. if nowSkillCfg then
  505. elfArr[len].nowSkillDesc = nowSkillCfg.desc
  506. elfArr[len].nowSkillIcon = nowSkillCfg.icon
  507. end
  508. end
  509. end
  510. end
  511. elfArr[0] = len
  512. Msg.send(msgRet, human.fd)
  513. end