FuwenLogic.lua 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152
  1. local Msg = require("core.Msg")
  2. local Grid = require("bag.Grid")
  3. local FuwenDefine = require("fuwen.FuwenDefine")
  4. local FuwenGrid = require("fuwen.FuwenGrid")
  5. local HeroLogic = require("hero.HeroLogic")
  6. local FuwenExcel = require("excel.fuwen")
  7. local ItemDefine = require("bag.ItemDefine")
  8. local BagLogic = require("bag.BagLogic")
  9. local ObjHuman = require("core.ObjHuman")
  10. local RoleAttr = require("role.RoleAttr")
  11. local Util = require("common.Util")
  12. local LogDefine = require("common.LogDefine")
  13. local Log = require("common.Log")
  14. local Broadcast = require("broadcast.Broadcast")
  15. local Lang = require("common.Lang")
  16. local HeroEquip = require("hero.HeroEquip")
  17. local HeroExcel = require("excel.hero").hero
  18. local RoleDBLogic = require("role.RoleDBLogic")
  19. local BingshuLogic = require("fuwen.BingshuLogic")
  20. local LiLianLogic = require("dailyTask.LiLianLogic")
  21. local ChengjiuLogic = require("chengjiu.ChengjiuLogic")
  22. local ChengjiuDefine = require("chengjiu.ChengjiuDefine")
  23. local MailManager = require("mail.MailManager")
  24. local MailExcel = require("excel.mail")
  25. local HeroGrowUp = require("absAct.HeroGrowUp")
  26. local YunYingLogic = require("yunying.YunYingLogic")
  27. --发送所有符文列表 onLogin
  28. function sendFuwenRefineList(human)
  29. local msgRet = Msg.gc.GC_FUWEN_ALL_LIST
  30. -- 发送 背包符文列表
  31. local fuwenMsgCnt = 0
  32. msgRet.isEnd = 0
  33. for index,fuwenGrid in pairs(human.db.fuwenBag) do
  34. if fuwenGrid and FuwenExcel.fuwen[fuwenGrid.id].refine == 1 then
  35. fuwenMsgCnt = fuwenMsgCnt + 1
  36. Grid.makeItem(msgRet.list[fuwenMsgCnt].fuwen, fuwenGrid.id, 1, nil, fuwenGrid, index,Grid.getOpflagAtBag(fuwenGrid.id))
  37. msgRet.list[fuwenMsgCnt].pos = 0
  38. msgRet.list[fuwenMsgCnt].heroID = 0
  39. msgRet.list[fuwenMsgCnt].heroIndex = 0
  40. -- 分包发送
  41. if fuwenMsgCnt >= FuwenDefine.PAGE_LIST_COUNT then
  42. msgRet.list[0] = fuwenMsgCnt
  43. fuwenMsgCnt = 0
  44. Msg.send(msgRet, human.fd)
  45. end
  46. end
  47. end
  48. -- 英雄符文列表
  49. for index,heroGrid in pairs(human.db.heroBag) do
  50. if index ~= 0 and heroGrid.fuwen then
  51. for j = 1,2 do
  52. if heroGrid.fuwen[j]
  53. and heroGrid.fuwen[j].id
  54. and FuwenExcel.fuwen[heroGrid.fuwen[j].id].refine == 1 then
  55. local fuwenGrid = heroGrid.fuwen[j]
  56. fuwenMsgCnt = fuwenMsgCnt + 1
  57. Grid.makeItem(msgRet.list[fuwenMsgCnt].fuwen, fuwenGrid.id, 1, nil, fuwenGrid, index,Grid.getOpflagAtBag(fuwenGrid.id))
  58. msgRet.list[fuwenMsgCnt].pos = j
  59. msgRet.list[fuwenMsgCnt].heroID = heroGrid.id
  60. msgRet.list[fuwenMsgCnt].heroIndex = index
  61. -- 分包发送
  62. if fuwenMsgCnt >= FuwenDefine.PAGE_LIST_COUNT then
  63. msgRet.list[0] = fuwenMsgCnt
  64. fuwenMsgCnt = 0
  65. Msg.send(msgRet, human.fd)
  66. end
  67. end
  68. end
  69. end
  70. end
  71. msgRet.list[0] = fuwenMsgCnt
  72. msgRet.isEnd = 1
  73. Msg.send(msgRet, human.fd)
  74. end
  75. -- 发送符文背包列表
  76. function sendFuwenBagList(human)
  77. local msgRet = Msg.gc.GC_FUWEN_BAG_LIST
  78. local fuwenMsgCnt = 0
  79. for index,fuwenGrid in pairs(human.db.fuwenBag) do
  80. if fuwenGrid then
  81. fuwenMsgCnt = fuwenMsgCnt + 1
  82. Grid.makeItem(msgRet.list[fuwenMsgCnt], fuwenGrid.id, 1, nil, fuwenGrid, index, Grid.getOpflagAtBag(fuwenGrid.id))
  83. if fuwenMsgCnt >= FuwenDefine.PAGE_LIST_COUNT then
  84. msgRet.list[0] = fuwenMsgCnt
  85. fuwenMsgCnt = 0
  86. Msg.send(msgRet, human.fd)
  87. end
  88. end
  89. end
  90. if fuwenMsgCnt > 0 then
  91. msgRet.list[0] = fuwenMsgCnt
  92. Msg.send(msgRet, human.fd)
  93. end
  94. end
  95. -- 发送符文改变
  96. function sendFuwenItemChange(human, bagIndex, fuwenGrid, op)
  97. local msgRet = Msg.gc.GC_FUWEN_BAG_CHANGE
  98. if op == FuwenDefine.FUWEN_BAG_OP_ADD or op == FuwenDefine.FUWEN_BAG_OP_CHANGE then
  99. msgRet.itemID = fuwenGrid.id
  100. msgRet.itemIndex = bagIndex
  101. Grid.makeItem(msgRet.itemData[1], fuwenGrid.id, 1, nil, fuwenGrid, bagIndex, Grid.getOpflagAtBag(fuwenGrid.id))
  102. msgRet.itemData[0] = 1
  103. elseif op == FuwenDefine.FUWEN_BAG_OP_DEL then
  104. msgRet.itemID = 0
  105. msgRet.itemIndex = bagIndex
  106. msgRet.itemData[0] = 0
  107. else
  108. assert(nil)
  109. end
  110. Msg.send(msgRet, human.fd)
  111. end
  112. -- 添加新符文
  113. function add(human, itemID, itemCnt, logType)
  114. local index = nil
  115. if itemID == nil then
  116. return Broadcast.sendErr(human,Lang.FUWEN_ITEMID_ERR)
  117. end
  118. if itemCnt < 1 then
  119. return Broadcast.sendErr(human,Lang.FUWEN_ITEM_CNT_ERR)
  120. end
  121. for i = 1, itemCnt do
  122. local gridTemp = FuwenGrid.create(itemID)
  123. index = FuwenGrid.getEmptyIndex(human)
  124. if index ~= nil then
  125. human.db.fuwenBag[index] = gridTemp
  126. sendFuwenItemChange(human, index, gridTemp, FuwenDefine.FUWEN_BAG_OP_ADD)
  127. Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , itemID, 1)
  128. else
  129. -- 没有空格子了
  130. break
  131. end
  132. LiLianLogic.onCallback(human,LiLianLogic.LILIAN_OUTID28,itemCnt,itemID)
  133. end
  134. return index
  135. end
  136. -- 通过gird添加符文
  137. function addByGrid(human, fuwenGrid, logType)
  138. if fuwenGrid == nil or fuwenGrid.id == nil then
  139. return Broadcast.sendErr(human,Lang.FUWEN_GRID_ERR)
  140. end
  141. local index = FuwenGrid.getEmptyIndex(human)
  142. if not index then
  143. local items = {}
  144. items[1] = { fuwenGrid.id, fuwenGrid }
  145. local title = MailExcel.mail[1000].title
  146. local content = MailExcel.mail[1000].content
  147. local senderName = MailExcel.mail[1000].senderName
  148. MailManager.add(MailManager.SYSTEM, human.db._id, title, content, items, senderName)
  149. return
  150. end
  151. human.db.fuwenBag[index] = fuwenGrid
  152. sendFuwenItemChange(human, index, fuwenGrid, FuwenDefine.FUWEN_BAG_OP_ADD)
  153. Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, 1)
  154. return index
  155. end
  156. -- 从背包删除符文
  157. function del(human, index, logType)
  158. local fuwenGrid = human.db.fuwenBag[index]
  159. if fuwenGrid == nil then
  160. return Broadcast.sendErr(human,Lang.FUWEN_GRID_ERR)
  161. end
  162. human.db.fuwenBag[index] = nil
  163. Log.write(Log.LOGID_OSS_FUWEN, human.db._id, human.db.account, human.db.name, human.db.lv, LogDefine.DEFINE[logType] + LogDefine.TYPE["fuwen"] , fuwenGrid.id, -1)
  164. sendFuwenItemChange(human, index, nil, FuwenDefine.FUWEN_BAG_OP_DEL)
  165. end
  166. -- 穿上符文
  167. function putOn(human, heroID, heroIndex, fuwenIndex,pos,noCalc)
  168. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  169. if heroGrid == nil then
  170. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  171. end
  172. local fuwenGrid = human.db.fuwenBag[fuwenIndex]
  173. if fuwenGrid == nil then
  174. return
  175. end
  176. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  177. return
  178. else
  179. if heroGrid.fuwen[pos].id == nil then
  180. -- 新穿装备
  181. del(human, fuwenIndex, "fuwen_puton")
  182. heroGrid.fuwen = heroGrid.fuwen or {}
  183. heroGrid.fuwen[pos] = fuwenGrid
  184. else
  185. -- 替换装备
  186. local oldFuwenGrid = heroGrid.fuwen[pos]
  187. del(human, fuwenIndex, "fuwen_puton")
  188. addByGrid(human, oldFuwenGrid, "fuwen_putoff")
  189. heroGrid.fuwen[pos] = fuwenGrid
  190. end
  191. end
  192. if noCalc ~= true then
  193. -- 计算属性 todo
  194. ObjHuman.doCalcHero(human,heroIndex)
  195. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  196. HeroEquip.query(human, heroID, heroIndex)
  197. end
  198. -- 通知客户端
  199. local msgRet = Msg.gc.GC_FUWEN_PUTON
  200. msgRet.heroID = heroID
  201. msgRet.heroIndex = heroIndex
  202. msgRet.pos = pos
  203. Grid.makeItem(msgRet.fuwen, fuwenGrid.id, 1, nil, fuwenGrid, -1, Grid.getOpflagAtBag(fuwenGrid.id))
  204. Msg.send(msgRet, human.fd)
  205. end
  206. -- 脱下符文
  207. function putOff(human, heroID, heroIndex, pos, noCalc)
  208. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  209. if heroGrid == nil then
  210. return
  211. end
  212. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil or heroGrid.fuwen[pos].id == nil then
  213. return
  214. end
  215. if not FuwenGrid.checkEmptyCnt(human, 1) then
  216. return
  217. end
  218. local oldFuwenGrid = heroGrid.fuwen[pos]
  219. heroGrid.fuwen[pos] = {}
  220. addByGrid(human, oldFuwenGrid, "fuwen_putoff")
  221. if noCalc ~= true then
  222. -- 计算属性
  223. ObjHuman.doCalcHero(human,heroIndex)
  224. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  225. HeroEquip.query(human, heroID, heroIndex)
  226. end
  227. -- 通知客户端
  228. local msgRet = Msg.gc.GC_FUWEN_PUTOFF
  229. msgRet.heroID = heroID
  230. msgRet.heroIndex = heroIndex
  231. msgRet.pos = pos
  232. Msg.send(msgRet, human.fd)
  233. end
  234. function putOffQuick(human, heroID, heroIndex, noSys)
  235. putOff(human, heroID, heroIndex, 1, true)
  236. putOff(human, heroID, heroIndex, 2, true)
  237. if not noSys then
  238. ObjHuman.doCalcHero(human,heroIndex)
  239. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  240. HeroEquip.query(human, heroID, heroIndex)
  241. end
  242. end
  243. -- 符文合成查询
  244. local cacheFuwenGrid = {}
  245. function fuwenHechengQuery(human,fuwenID,fuwenCnt)
  246. local hechengConfig = FuwenExcel.hechengRule[fuwenID]
  247. if hechengConfig == nil then
  248. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_CONFIG_ERR)
  249. end
  250. local fuwenConfig = FuwenExcel.fuwen[fuwenID]
  251. if fuwenConfig == nil then
  252. return
  253. end
  254. local sub = fuwenCnt - 1
  255. local costJinbi = hechengConfig.hechengCost[sub]
  256. local succRate = hechengConfig.hechengRate[sub]
  257. local newFuwenID = hechengConfig.newFuwenID
  258. local failSmeltVal = hechengConfig.failRonglian
  259. local msgRet = Msg.gc.GC_FUWEN_HECHENG_QUERY
  260. msgRet.costJinbi = costJinbi
  261. msgRet.successRate = succRate
  262. if fuwenCnt < 2 then
  263. msgRet.costJinbi = 0
  264. msgRet.successRate = 0
  265. end
  266. if cacheFuwenGrid[newFuwenID] == nil then
  267. cacheFuwenGrid[newFuwenID] = FuwenGrid.create(newFuwenID)
  268. end
  269. local fuwenGrid = cacheFuwenGrid[newFuwenID]
  270. Grid.makeItem(msgRet.newFuwen, newFuwenID, 1, nil, fuwenGrid, 1)
  271. msgRet.smeltVal = failSmeltVal
  272. msgRet.accountSmeltVal = human.db.smeltVal or 0
  273. msgRet.desc1 = hechengConfig.desc1
  274. msgRet.desc2 = hechengConfig.desc2
  275. local newFuwenConfig = FuwenExcel.fuwen[newFuwenID]
  276. wrapFuwenAttrNet(msgRet,newFuwenConfig)
  277. Msg.send(msgRet,human.fd)
  278. end
  279. -- 合成符文
  280. function fuwenHechengDo(human,fuwenIndexList)
  281. if human.db.lv < 30 then
  282. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_LIMIT)
  283. end
  284. -- 校验材料个数
  285. local cnt = fuwenIndexList[0]
  286. if cnt < 2 then
  287. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_CNR_ERR)
  288. end
  289. local newFuwenID = nil
  290. local oldFuwenID = nil
  291. local config = FuwenExcel.hechengRule
  292. local indexTable = {}
  293. for i = 1,cnt do
  294. -- 防止添加同一个符文
  295. local index = fuwenIndexList[i]
  296. if indexTable[index] then
  297. return
  298. end
  299. -- 背包中没有该符文
  300. if human.db.fuwenBag[index] == nil then
  301. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR)
  302. end
  303. -- 校验材料是否相同
  304. local fuwenGrid = human.db.fuwenBag[index]
  305. if oldFuwenID == nil then
  306. oldFuwenID = fuwenGrid.id
  307. else
  308. if oldFuwenID ~= fuwenGrid.id then
  309. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  310. end
  311. end
  312. indexTable[index] = true
  313. end
  314. -- 校验是否有合成配置
  315. local hechengConfig = FuwenExcel.hechengRule[oldFuwenID]
  316. if hechengConfig == nil then
  317. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_CONFIG_ERR)
  318. end
  319. -- 校验是否达到合成限制等级
  320. if hechengConfig.limit > human.db.lv then
  321. return Broadcast.sendErr(human,Util.format(Lang.ROLE_LV_TOO_LOW, hechengConfig.limit))
  322. end
  323. -- 校验金币数量够不够
  324. local costJinbi = hechengConfig.hechengCost[cnt - 1]
  325. if human.db.jinbi < costJinbi then
  326. return Broadcast.sendErr(human,Lang.COMMON_NO_JINBI)
  327. end
  328. newFuwenID = hechengConfig.newFuwenID
  329. local rate = hechengConfig.hechengRate[cnt - 1]
  330. ObjHuman.updateJinbi(human, -costJinbi, "fuwen_hecheng")
  331. local randomNum = math.random(1,100)
  332. local newFuwenGrid = nil
  333. local fenjieList = {}
  334. if randomNum <= rate then
  335. -- 合成成功
  336. for i = 1,cnt do
  337. local index = fuwenIndexList[i]
  338. del(human, index, "fuwen_hecheng")
  339. end
  340. local msgRet = Msg.gc.GC_FUWEN_HECHENG_SUCCESS
  341. newFuwenGrid = FuwenGrid.create(newFuwenID)
  342. local newIndex = addByGrid(human, newFuwenGrid, "fuwen_hecheng")
  343. Grid.makeItem(msgRet.fuwen, newFuwenGrid.id, 1, nil, newFuwenGrid, newIndex,0)
  344. Msg.send(msgRet,human.fd)
  345. else
  346. -- 合成失败
  347. for i = 1,cnt do
  348. local index = fuwenIndexList[i]
  349. local fenjieConfig = FuwenExcel.fuwen[oldFuwenID]
  350. del(human, index, "fuwen_fenjie")
  351. local jhCnt = math.floor(fenjieConfig.fenjieJinghua/2)
  352. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] or 0
  353. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] + jhCnt
  354. end
  355. BagLogic.addItemList(human, fenjieList, "fuwen_fenjie")
  356. local baseCnt = hechengConfig.failRonglian
  357. local failRonglian_cnt = baseCnt + math.floor((cnt-2) * baseCnt/2)
  358. human.db.smeltVal = human.db.smeltVal or 0
  359. human.db.smeltVal = human.db.smeltVal + failRonglian_cnt
  360. local fenjieConfig = FuwenExcel.fuwen[oldFuwenID]
  361. local fenjieJinghua_cnt = math.floor(fenjieConfig.fenjieJinghua/2) * cnt
  362. local msgRet = Msg.gc.GC_FUWEN_HECHENG_FAIL
  363. msgRet.smeltVal = hechengConfig.failRonglian
  364. msgRet.accountSmeltVal = human.db.smeltVal
  365. Grid.makeItem(msgRet.fuwenJinghua, ItemDefine.ITEM_FUWEN_JINGHUA, fenjieJinghua_cnt)
  366. Msg.send(msgRet,human.fd)
  367. end
  368. -- 符文合成回调
  369. ChengjiuLogic.onCallback(human,ChengjiuDefine.CJ_TASK_TYPE_22,1)
  370. HeroGrowUp.onCallback(human, HeroGrowUp.TASKTYPE8, 1)
  371. YunYingLogic.onCallBack(human, "onFuwenHecheng",1)
  372. end
  373. -- 分解符文
  374. function fuwenFenjieDo(human,fuwenID,fuwenIndex,fenjieType)
  375. -- 校验符文是否可分解
  376. local fenjieConfig = FuwenExcel.fuwen[fuwenID]
  377. if fenjieConfig == nil then
  378. return Broadcast.sendErr(human,Lang.FUWEN_FENJIE_CONFIG_ERR)
  379. end
  380. -- 符文为空
  381. local fuwenGrid = human.db.fuwenBag[fuwenIndex]
  382. if fuwenGrid == nil then
  383. return Broadcast.sendErr(human,Lang.FUWEN_GRID_ERR)
  384. end
  385. -- 符文对不上
  386. if fuwenGrid.id ~= fuwenID then
  387. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  388. end
  389. del(human, fuwenIndex, "fuwen_fenjie")
  390. local fenjieList = {}
  391. if fenjieType == nil then
  392. local msgRet = Msg.gc.GC_FUWEN_FENJIE
  393. Msg.send(msgRet,human.fd)
  394. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = fenjieConfig.fenjieJinghua
  395. else
  396. local cnt = math.floor(fenjieConfig.fenjieJinghua/2)
  397. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = cnt
  398. end
  399. BagLogic.addItemList(human, fenjieList, "fuwen_fenjie")
  400. end
  401. -- 符文兑换
  402. function fuwenExhcange(human)
  403. if human.db.smeltVal == nil or human.db.smeltVal < FuwenDefine.FUWEN_EXCHANGE_CNT then
  404. return Broadcast.sendErr(human,Lang.FUWEN_EXCHANGE_ERR) -- 熔炼值不够
  405. end
  406. human.db.smeltVal = human.db.smeltVal - FuwenDefine.FUWEN_EXCHANGE_CNT
  407. local index = add(human, FuwenDefine.FUWEN_EXCHANGE_ID, 1, "fuwen_exchange")
  408. local fuwenGrid = human.db.fuwenBag[index]
  409. local msgRet = Msg.gc.GC_FUWEN_EXCHANGE
  410. if fuwenGrid ~= nil then
  411. Grid.makeItem(msgRet.fuwen, fuwenGrid.id, 1, nil, fuwenGrid, 1)
  412. Msg.send(msgRet,human.fd)
  413. end
  414. fuwenSmeltValQuery(human)
  415. end
  416. -- 符文刷新查询
  417. function fuwenRefreshQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  418. local fuwen = nil
  419. if fuwenIndex == -1 then
  420. -- 英雄身上符文
  421. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  422. if heroGrid == nil then
  423. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  424. end
  425. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  426. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  427. end
  428. fuwen = heroGrid.fuwen[pos]
  429. else
  430. fuwen = human.db.fuwenBag[fuwenIndex]
  431. end
  432. if fuwen == nil or fuwen.id == nil then
  433. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  434. end
  435. if fuwen.id ~= fuwenID then
  436. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  437. end
  438. local refreshConfig = FuwenExcel.fuwen[fuwenID]
  439. if refreshConfig == nil then
  440. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_CONFIG_ERR) -- 没有相关id分解配置
  441. end
  442. if human.db.fuwenRefreshCnt == nil then
  443. human.db.fuwenRefreshCnt = {}
  444. human.db.fuwenRefreshCnt.sh = 0
  445. human.db.fuwenRefreshCnt.cs = 0
  446. end
  447. local msgRet = Msg.gc.GC_FUWEN_REFRESH_QUERY
  448. -- 本体符文
  449. Grid.makeItemFuwen(msgRet.fuwen,fuwen.id,FuwenExcel.fuwen[fuwen.id],fuwen,fuwenIndex)
  450. -- 临时符文
  451. Grid.makeItemFuwen(msgRet.fuwenTemp,fuwen.id,FuwenExcel.fuwen[fuwen.id],fuwen,fuwenIndex)
  452. if fuwen.attrTemp == nil then
  453. fuwen.attrTemp = {}
  454. end
  455. -- 临时属性备份
  456. local attrLen = #fuwen.attrTemp
  457. for zz = 1,attrLen do
  458. msgRet.fuwenTemp.attrs[zz].key = fuwen.attrTemp[zz][1]
  459. msgRet.fuwenTemp.attrs[zz].value = fuwen.attrTemp[zz][2]
  460. end
  461. msgRet.fuwenTemp.attrs[0] = attrLen
  462. -- 临时技能备份
  463. if fuwen.skillTemp == nil then
  464. msgRet.fuwenTemp.skills[0] = 0
  465. else
  466. local skillLen = #fuwen.skillTemp
  467. for zz = 1,skillLen do
  468. Grid.makeFuwenSkill(msgRet.fuwenTemp.skills[zz], fuwen.skillTemp[zz])
  469. end
  470. msgRet.fuwenTemp.skills[0] = skillLen
  471. end
  472. if attrLen == 0 and fuwen.skillTemp == nil then
  473. msgRet.fuwenTemp.id = 0
  474. else
  475. msgRet.fuwenTemp.id = fuwen.id
  476. end
  477. local lenth = #refreshConfig.expend
  478. for i = 1,lenth do
  479. Grid.makeItem(msgRet.expend[i],refreshConfig.expend[i][1],refreshConfig.expend[i][2])
  480. end
  481. msgRet.expend[0] = lenth
  482. msgRet.refreshCnt = 0
  483. if refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_5 then
  484. msgRet.refreshCnt = human.db.fuwenRefreshCnt.sh
  485. elseif refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_6 then
  486. msgRet.refreshCnt = human.db.fuwenRefreshCnt.cs
  487. end
  488. msgRet.needCnt = refreshConfig.luckRefresh or 0
  489. Msg.send(msgRet,human.fd)
  490. end
  491. -- 符文刷新
  492. function fuwenRefreshDo(human,fuwenID,fuwenIndex,heroID,heroIndex,pos)
  493. local refreshConfig = FuwenExcel.fuwen[fuwenID]
  494. if refreshConfig == nil then
  495. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_CONFIG_ERR) -- 传入参数非法
  496. end
  497. local fuwenGrid = nil
  498. if fuwenIndex == -1 then -- 刷英雄身上的
  499. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  500. if heroGrid == nil then
  501. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR) -- 传入的英雄数据非法
  502. end
  503. if pos == nil then
  504. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR) -- 传入的参数非法
  505. end
  506. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil or heroGrid.fuwen[pos].id == nil then
  507. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR) -- 传入的参数非法
  508. end
  509. fuwenGrid = heroGrid.fuwen[pos]
  510. else -- 刷背包里的
  511. if human.db.fuwenBag == nil or human.db.fuwenBag[fuwenIndex] == nil then
  512. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  513. end
  514. fuwenGrid = human.db.fuwenBag[fuwenIndex]
  515. end
  516. if fuwenGrid == nil or fuwenGrid.id == nil then
  517. return
  518. end
  519. if fuwenGrid.id ~= nil and fuwenGrid.id ~= fuwenID then
  520. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  521. end
  522. -- 幸运重铸判定
  523. local luckRefresh = 0
  524. local refreshCnt = 0
  525. human.db.fuwenRefreshCnt.cs = human.db.fuwenRefreshCnt.cs or 0
  526. human.db.fuwenRefreshCnt.sh = human.db.fuwenRefreshCnt.sh or 0
  527. if refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_5 then
  528. refreshCnt = human.db.fuwenRefreshCnt.sh or 0
  529. elseif refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_6 then
  530. refreshCnt = human.db.fuwenRefreshCnt.cs or 0
  531. end
  532. if refreshConfig.luckRefresh ~= nil and refreshConfig.luckRefresh ~= 0 and refreshCnt >= refreshConfig.luckRefresh then
  533. luckRefresh = 1
  534. end
  535. local jinghuaCnt = BagLogic.getItemCnt(human, ItemDefine.ITEM_FUWEN_JINGHUA)
  536. if human.db.jinbi < refreshConfig.expend[1][2] or jinghuaCnt < refreshConfig.expend[2][2] then
  537. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_FILL_ERR) -- 材料不够
  538. end
  539. if refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_5 then
  540. human.db.fuwenRefreshCnt.sh = human.db.fuwenRefreshCnt.sh + 1
  541. elseif refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_6 then
  542. human.db.fuwenRefreshCnt.cs = human.db.fuwenRefreshCnt.cs + 1
  543. end
  544. if human.db.fuwenRefreshCnt.cs > 15 then
  545. human.db.fuwenRefreshCnt.cs = 0
  546. end
  547. if human.db.fuwenRefreshCnt.sh > 25 then
  548. human.db.fuwenRefreshCnt.sh = 0
  549. end
  550. -- 扣消耗
  551. local fuwenGridTemp = Util.copyTable(fuwenGrid)
  552. ObjHuman.updateJinbi(human, -refreshConfig.expend[1][2], "fuwen_refresh")
  553. BagLogic.delItem(human, ItemDefine.ITEM_FUWEN_JINGHUA, refreshConfig.expend[2][2], "fuwen_refresh")
  554. -- 改属性
  555. FuwenGrid.genFuwenAttr(fuwenGridTemp,luckRefresh)
  556. fuwenGrid.attrTemp = fuwenGridTemp.attr or {}
  557. fuwenGrid.skillTemp = fuwenGridTemp.skill
  558. local msgRet = Msg.gc.GC_FUWEN_REFRESH_DO
  559. Grid.makeItem(msgRet.fuwen, fuwenGridTemp.id, 1, nil, fuwenGridTemp, fuwenIndex)
  560. Msg.send(msgRet,human.fd)
  561. fuwenRefreshQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  562. end
  563. local function cmpSkill(a, b)
  564. if a.sortID ~= b.sortID then
  565. return a.sortID < b.sortID
  566. end
  567. return a.skillID < b.skillID
  568. end
  569. local SORT_SKILL_LIST = nil
  570. function getSortSkillList()
  571. if not SORT_SKILL_LIST then
  572. SORT_SKILL_LIST = {}
  573. for skillID, config in pairs(FuwenExcel.skill) do
  574. config.skillID = skillID
  575. SORT_SKILL_LIST[#SORT_SKILL_LIST + 1] = config
  576. end
  577. if #SORT_SKILL_LIST > 1 then
  578. table.sort(SORT_SKILL_LIST, cmpSkill)
  579. end
  580. end
  581. return SORT_SKILL_LIST
  582. end
  583. -- 技能查询
  584. function fuwenRareSkillQuery(human, lv)
  585. local configs = getSortSkillList()
  586. local msgRet = Msg.gc.GC_FUWEN_RARE_SKILL_QUERY
  587. msgRet.type = lv
  588. local cnt = 0
  589. for _, config in ipairs(configs) do
  590. if config.lv == lv then
  591. cnt = cnt + 1
  592. Grid.makeFuwenSkill(msgRet.skillInfo[cnt], config.skillID)
  593. end
  594. end
  595. if cnt > 0 then
  596. msgRet.skillInfo[0] = cnt
  597. Msg.send(msgRet, human.fd)
  598. end
  599. end
  600. -- 计算属性
  601. local tbSkillGroupID = {}
  602. function doCalcHero(obj,attrs)
  603. Util.initTable(tbSkillGroupID)
  604. if obj.fuwen then
  605. for i = 1, 2 do
  606. local fuwenGrid = obj.fuwen[i]
  607. if fuwenGrid and fuwenGrid.id ~= nil then
  608. for k, v in ipairs(fuwenGrid.attr) do
  609. RoleAttr.updateValue(v[1], v[2], attrs)
  610. end
  611. local skillLen = fuwenGrid.skill and #fuwenGrid.skill or 0
  612. for j = 1, skillLen do
  613. local skillID = fuwenGrid.skill[j]
  614. local skillConfig = FuwenExcel.skill[skillID]
  615. local groupID = skillConfig.groupID
  616. if (tbSkillGroupID[groupID] or 0) < skillID then
  617. tbSkillGroupID[groupID] = skillID
  618. end
  619. end
  620. end
  621. end
  622. end
  623. -- 兵书技能
  624. if obj.bingshu then
  625. for i = 1, BingshuLogic.BINGSHU_MAXCNT do
  626. local bingshuGrid = obj.bingshu[i]
  627. if bingshuGrid then
  628. local skillID = bingshuGrid.skillID
  629. local skillConfig = FuwenExcel.skill[skillID]
  630. local groupID = skillConfig.groupID
  631. if (tbSkillGroupID[groupID] or 0) < skillID then
  632. tbSkillGroupID[groupID] = skillID
  633. end
  634. end
  635. end
  636. end
  637. -- 符文技能效果这里 如果有多个同类型的技能 效果不叠加 只取最高等级的那个技能的效果
  638. for groupID, skillIDTemp in pairs(tbSkillGroupID) do
  639. local skillConfig = FuwenExcel.skill[skillIDTemp]
  640. local cnt = #skillConfig.attrs
  641. if cnt > 0 then
  642. for k, v in ipairs(skillConfig.attrs) do
  643. RoleAttr.updateValue(v[1], v[2], attrs)
  644. end
  645. end
  646. end
  647. end
  648. -- 熔炼值查询
  649. function fuwenSmeltValQuery(human)
  650. local msgRet = Msg.gc.GC_FUWEN_SMELT_VAL_QUERY
  651. msgRet.accountSmeltVal = human.db.smeltVal or 0
  652. Msg.send(msgRet,human.fd)
  653. end
  654. -- 符文刷新保存
  655. function fuwenRefreshSave(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  656. local fuwen = nil
  657. if fuwenIndex == -1 then
  658. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  659. if heroGrid == nil then
  660. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  661. end
  662. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  663. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  664. end
  665. fuwen = heroGrid.fuwen[pos]
  666. else
  667. fuwen = human.db.fuwenBag[fuwenIndex]
  668. end
  669. if fuwen == nil or fuwen.id == nil then
  670. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR)
  671. end
  672. if fuwen.id ~= fuwenID then
  673. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  674. end
  675. if fuwen.attrTemp ~= nil or fuwen.skillTemp ~= nil then
  676. if next(fuwen.attrTemp) then
  677. fuwen.attr = fuwen.attrTemp
  678. fuwen.attrTemp = {}
  679. else
  680. Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave attrTemp is empty")
  681. end
  682. if next(fuwen.skillTemp) then
  683. fuwen.skill = fuwen.skillTemp
  684. fuwen.skillTemp = nil
  685. else
  686. Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave skillTemp is empty")
  687. end
  688. end
  689. Broadcast.sendErr(human,Lang.FUWEN_SAVE_SUCCESS)
  690. if fuwenIndex == -1 then
  691. ObjHuman.doCalcHero(human,heroIndex)
  692. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  693. HeroEquip.query(human, heroID, heroIndex)
  694. else
  695. sendFuwenItemChange(human, fuwenIndex, fuwen, FuwenDefine.FUWEN_BAG_OP_ADD)
  696. end
  697. fuwenRefreshQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  698. end
  699. -- 符文兑换查询
  700. function fuwenExchangeQuery(human)
  701. local msgRet = Msg.gc.GC_FUWEN_EXCHANGE_QUERY
  702. local gridTemp = FuwenGrid.create(FuwenDefine.FUWEN_EXCHANGE_ID)
  703. Grid.makeItem(msgRet.fuwen, gridTemp.id, 1, nil, gridTemp, 1)
  704. Msg.send(msgRet,human.fd)
  705. end
  706. -- 符文格子解锁
  707. function fuwenGridUnlock(human,heroID,heroIndex,pos)
  708. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  709. if heroGrid == nil then
  710. return
  711. end
  712. if heroGrid.fuwen ~= nil and heroGrid.fuwen[pos] ~= nil then
  713. return
  714. end
  715. if pos == 1 then
  716. if heroGrid.lv < 100 then
  717. else
  718. heroGrid.fuwen = heroGrid.fuwen or {}
  719. heroGrid.fuwen[1] = {}
  720. end
  721. elseif pos == 2 then
  722. if heroGrid.star < 7 then
  723. else
  724. heroGrid.fuwen = heroGrid.fuwen or {}
  725. heroGrid.fuwen[2] = {}
  726. end
  727. end
  728. end
  729. function wrapFuwenAttrNet(net,fuwenConf)
  730. local len = 0
  731. for _,attr in ipairs(fuwenConf.absAttrPool) do
  732. len = len + 1
  733. net.base_attrs[len].key = attr[1]
  734. net.base_attrs[len].value = attr[2]
  735. end
  736. net.base_attrs[0] = len
  737. local len2 = 0
  738. for _, attr in ipairs(fuwenConf.percentAttrPool) do
  739. len2 = len2 + 1
  740. net.percent_attrs[len2].key = attr[1]
  741. net.percent_attrs[len2].value = attr[2]
  742. end
  743. net.percent_attrs[0] = len2
  744. end
  745. -- 符文属性查询
  746. function CG_FUWEN_ATTR_QUERY(human,fuwenID)
  747. if fuwenID == nil then
  748. return Broadcast.sendErr(human,Lang.FUWEN_ITEMID_ERR)
  749. end
  750. local fuwenConfig = FuwenExcel.fuwen[fuwenID]
  751. if fuwenConfig == nil then
  752. return
  753. end
  754. local msgRet = Msg.gc.GC_FUWEN_ATTR_QUERY
  755. wrapFuwenAttrNet(msgRet,fuwenConfig)
  756. Msg.send(msgRet,human.fd)
  757. end
  758. -- 符文精炼预览
  759. function fuwenRefinePreview(human)
  760. local fuwenGrid = {}
  761. fuwenGrid = FuwenGrid.create(FuwenDefine.FUWEN_REFINE_ID)
  762. local msgRet = Msg.gc.GC_FUWEN_REFINE_PREVIEW_QUERY
  763. Grid.makeItem(msgRet.fuwen, fuwenGrid.id, 1, nil, fuwenGrid, 1)
  764. Msg.send(msgRet,human.fd)
  765. end
  766. -- 符文精炼查询
  767. function fuwenRefineQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  768. local fuwen = nil
  769. if fuwenIndex == -1 then
  770. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  771. if heroGrid == nil then
  772. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  773. end
  774. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  775. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  776. end
  777. fuwen = heroGrid.fuwen[pos]
  778. else
  779. fuwen = human.db.fuwenBag[fuwenIndex]
  780. end
  781. if fuwen == nil or fuwen.id == nil then
  782. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  783. end
  784. if fuwen.id ~= fuwenID then
  785. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  786. end
  787. if FuwenExcel.fuwen[fuwen.id].refine ~= 1 then
  788. return
  789. end
  790. local jinglianExcel = FuwenExcel.jinglian
  791. local refine = fuwen.refine or 0
  792. local refineExcel = jinglianExcel[refine + 1]
  793. -- 构造预览符文
  794. local previewFuwen = Util.copyTable(fuwen)
  795. previewFuwen.refine = refine + 1
  796. if refine == 0 then
  797. -- 第1次精炼
  798. local newValue = previewFuwen.attr[1][2] * 2
  799. previewFuwen.attr[1][2] = newValue
  800. elseif refine == 1 then
  801. -- 第2次精炼
  802. local fuwenConfig = FuwenExcel.fuwen[fuwen.id]
  803. cnt = #fuwenConfig.percentAttrPool
  804. if cnt > 0 then
  805. local randIndex = math.random(1, cnt)
  806. local attrKey = fuwenConfig.percentAttrPool[randIndex][1]
  807. local attrVal = fuwenConfig.percentAttrPool[randIndex][2]
  808. previewFuwen.attr[3] = {attrKey, attrVal}
  809. end
  810. elseif refine == 2 then
  811. -- 第3次精炼
  812. local skillConfig = FuwenExcel.skill
  813. local skillLen = #previewFuwen.skill
  814. for i = 1,skillLen do
  815. local skillID = previewFuwen.skill[i]
  816. local skillLv = skillConfig[skillID].lv
  817. if skillLv < 3 then
  818. skillID = skillID + 1000
  819. end
  820. previewFuwen.skill[i] = skillID
  821. end
  822. previewFuwen.id = fuwen.id + 1
  823. end
  824. -- 发数据
  825. local msgRet = Msg.gc.GC_FUWEN_REFINE_QUERY
  826. Grid.makeItem(msgRet.fuwen,previewFuwen.id, 1, nil,previewFuwen, 1)
  827. local expendLen = #refineExcel.expend
  828. for i = 1,expendLen do
  829. Grid.makeItem(msgRet.expend[i],refineExcel.expend[i][1],refineExcel.expend[i][2])
  830. end
  831. msgRet.expend[0] = expendLen
  832. local jinglianLen = #jinglianExcel
  833. for i = 1,jinglianLen do
  834. msgRet.refineDesc[i].desc = jinglianExcel[i].desc
  835. end
  836. msgRet.refineDesc[0] = jinglianLen
  837. Msg.send(msgRet,human.fd)
  838. end
  839. -- 符文精炼
  840. function fuwenRefineDo(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  841. local fuwen = nil
  842. if fuwenIndex == -1 then
  843. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  844. if heroGrid == nil then
  845. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  846. end
  847. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  848. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  849. end
  850. fuwen = heroGrid.fuwen[pos]
  851. else
  852. fuwen = human.db.fuwenBag[fuwenIndex]
  853. end
  854. if fuwen == nil or fuwen.id == nil then
  855. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  856. end
  857. if fuwen.id ~= fuwenID then
  858. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  859. end
  860. if FuwenExcel.fuwen[fuwen.id].refine ~= 1 then
  861. return
  862. end
  863. local newRefine = fuwen.refine or 0
  864. newRefine = newRefine + 1
  865. local jinglianExcel = FuwenExcel.jinglian
  866. local refineExcel = jinglianExcel[newRefine]
  867. local expendLen = #refineExcel.expend
  868. for i = 1,expendLen do
  869. local v = refineExcel.expend[i]
  870. local haveCnt = BagLogic.getItemCnt(human,v[1])
  871. if haveCnt < v[2] then
  872. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_FILL_ERR) -- 材料不够
  873. end
  874. end
  875. --删除材料
  876. for i = 1,expendLen do
  877. local v = refineExcel.expend[i]
  878. BagLogic.delItem(human, v[1], v[2], "fuwen_refine")
  879. end
  880. if newRefine == 1 then
  881. -- 第1次精炼
  882. fuwen.refine = newRefine
  883. local newValue = fuwen.attr[1][2] * 2
  884. fuwen.attr[1][2] = newValue
  885. elseif newRefine == 2 then
  886. -- 第2次精炼
  887. fuwen.refine = newRefine
  888. local fuwenConfig = FuwenExcel.fuwen[fuwen.id]
  889. cnt = #fuwenConfig.percentAttrPool
  890. if cnt > 0 then
  891. local randIndex = math.random(1, cnt)
  892. local attrKey = fuwenConfig.percentAttrPool[randIndex][1]
  893. local attrVal = fuwenConfig.percentAttrPool[randIndex][2]
  894. fuwen.attr[3] = {attrKey, attrVal}
  895. end
  896. elseif newRefine == 3 then
  897. -- 第3次精炼
  898. fuwen.refine = newRefine
  899. local skillConfig = FuwenExcel.skill
  900. local skillLen = #fuwen.skill
  901. for i = 1,skillLen do
  902. local skillID = fuwen.skill[i]
  903. local skillLv = skillConfig[skillID].lv
  904. if skillLv < 4 then
  905. skillID = skillID + 1000
  906. end
  907. fuwen.skill[i] = skillID
  908. end
  909. fuwen.id = fuwen.id + 1
  910. fuwen.refine = 0
  911. else
  912. return
  913. end
  914. if fuwenIndex == -1 then
  915. ObjHuman.doCalcHero(human,heroIndex)
  916. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  917. HeroEquip.query(human, heroID, heroIndex)
  918. else
  919. sendFuwenItemChange(human, fuwenIndex, fuwen, FuwenDefine.FUWEN_BAG_OP_ADD)
  920. end
  921. local msgRet = Msg.gc.GC_FUWEN_REFINE_DO
  922. Grid.makeItem(msgRet.fuwen,fuwen.id, 1,nil, fuwen, 1)
  923. Msg.send(msgRet,human.fd)
  924. end
  925. -- 是否有符文红点
  926. function isFuwenDot(human, heroGrid)
  927. if not heroGrid then return end
  928. local heroConfig = HeroExcel[heroGrid.id]
  929. if not heroConfig then return end
  930. if human.db.lv < 9 then
  931. return false
  932. end
  933. local haveFuwen = nil
  934. local emptyCnt = FuwenGrid.getEmptyCnt(human)
  935. if emptyCnt < FuwenDefine.FUWEN_BAG_MAX_CNT then
  936. haveFuwen = true
  937. end
  938. for pos = 1, 2 do
  939. local fuwenGrid = heroGrid.fuwen and heroGrid.fuwen[pos]
  940. if fuwenGrid ~= nil and fuwenGrid.id == nil and haveFuwen then
  941. return true
  942. end
  943. end
  944. end
  945. -- 是否有装备红点
  946. function isFuwenDotByPos(human, heroGrid, pos)
  947. if not heroGrid then return end
  948. local heroConfig = HeroExcel[heroGrid.id]
  949. if not heroConfig then return end
  950. local haveFuwen = nil
  951. local emptyCnt = FuwenGrid.getEmptyCnt(human)
  952. if emptyCnt < FuwenDefine.FUWEN_BAG_MAX_CNT then
  953. haveFuwen = true
  954. end
  955. local fuwenGrid = heroGrid.fuwen and heroGrid.fuwen[pos]
  956. if fuwenGrid ~= nil and fuwenGrid.id == nil and haveFuwen then
  957. return true
  958. end
  959. end
  960. function sendFuwenGetWay(human)
  961. local msgRet = Msg.gc.GC_FUWEN_GET_WAY_QUERY
  962. local fuwenGrid = FuwenGrid.create(80001)
  963. local hechengConfig = FuwenExcel.hechengRule[80001]
  964. Grid.makeItem(msgRet.newFuwen, 80001, 1, nil, fuwenGrid, 1)
  965. msgRet.desc1 = hechengConfig.desc1
  966. msgRet.desc2 = hechengConfig.desc2
  967. Msg.send(msgRet,human.fd)
  968. end