ElfLogic.lua 17 KB

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