FuwenLogic.lua 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154
  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, noSend)
  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. if not noSend then
  228. -- 通知客户端
  229. local msgRet = Msg.gc.GC_FUWEN_PUTOFF
  230. msgRet.heroID = heroID
  231. msgRet.heroIndex = heroIndex
  232. msgRet.pos = pos
  233. Msg.send(msgRet, human.fd)
  234. end
  235. end
  236. function putOffQuick(human, heroID, heroIndex, noSys)
  237. putOff(human, heroID, heroIndex, 1, true)
  238. putOff(human, heroID, heroIndex, 2, true)
  239. if not noSys then
  240. ObjHuman.doCalcHero(human,heroIndex)
  241. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  242. HeroEquip.query(human, heroID, heroIndex)
  243. end
  244. end
  245. -- 符文合成查询
  246. local cacheFuwenGrid = {}
  247. function fuwenHechengQuery(human,fuwenID,fuwenCnt)
  248. local hechengConfig = FuwenExcel.hechengRule[fuwenID]
  249. if hechengConfig == nil then
  250. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_CONFIG_ERR)
  251. end
  252. local fuwenConfig = FuwenExcel.fuwen[fuwenID]
  253. if fuwenConfig == nil then
  254. return
  255. end
  256. local sub = fuwenCnt - 1
  257. local costJinbi = hechengConfig.hechengCost[sub]
  258. local succRate = hechengConfig.hechengRate[sub]
  259. local newFuwenID = hechengConfig.newFuwenID
  260. local failSmeltVal = hechengConfig.failRonglian
  261. local msgRet = Msg.gc.GC_FUWEN_HECHENG_QUERY
  262. msgRet.costJinbi = costJinbi
  263. msgRet.successRate = succRate
  264. if fuwenCnt < 2 then
  265. msgRet.costJinbi = 0
  266. msgRet.successRate = 0
  267. end
  268. if cacheFuwenGrid[newFuwenID] == nil then
  269. cacheFuwenGrid[newFuwenID] = FuwenGrid.create(newFuwenID)
  270. end
  271. local fuwenGrid = cacheFuwenGrid[newFuwenID]
  272. Grid.makeItem(msgRet.newFuwen, newFuwenID, 1, nil, fuwenGrid, 1)
  273. msgRet.smeltVal = failSmeltVal
  274. msgRet.accountSmeltVal = human.db.smeltVal or 0
  275. msgRet.desc1 = hechengConfig.desc1
  276. msgRet.desc2 = hechengConfig.desc2
  277. local newFuwenConfig = FuwenExcel.fuwen[newFuwenID]
  278. wrapFuwenAttrNet(msgRet,newFuwenConfig)
  279. Msg.send(msgRet,human.fd)
  280. end
  281. -- 合成符文
  282. function fuwenHechengDo(human,fuwenIndexList)
  283. if human.db.lv < 30 then
  284. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_LIMIT)
  285. end
  286. -- 校验材料个数
  287. local cnt = fuwenIndexList[0]
  288. if cnt < 2 then
  289. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_CNR_ERR)
  290. end
  291. local newFuwenID = nil
  292. local oldFuwenID = nil
  293. local config = FuwenExcel.hechengRule
  294. local indexTable = {}
  295. for i = 1,cnt do
  296. -- 防止添加同一个符文
  297. local index = fuwenIndexList[i]
  298. if indexTable[index] then
  299. return
  300. end
  301. -- 背包中没有该符文
  302. if human.db.fuwenBag[index] == nil then
  303. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR)
  304. end
  305. -- 校验材料是否相同
  306. local fuwenGrid = human.db.fuwenBag[index]
  307. if oldFuwenID == nil then
  308. oldFuwenID = fuwenGrid.id
  309. else
  310. if oldFuwenID ~= fuwenGrid.id then
  311. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  312. end
  313. end
  314. indexTable[index] = true
  315. end
  316. -- 校验是否有合成配置
  317. local hechengConfig = FuwenExcel.hechengRule[oldFuwenID]
  318. if hechengConfig == nil then
  319. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_CONFIG_ERR)
  320. end
  321. -- 校验是否达到合成限制等级
  322. if hechengConfig.limit > human.db.lv then
  323. return Broadcast.sendErr(human,Util.format(Lang.ROLE_LV_TOO_LOW, hechengConfig.limit))
  324. end
  325. -- 校验金币数量够不够
  326. local costJinbi = hechengConfig.hechengCost[cnt - 1]
  327. if human.db.jinbi < costJinbi then
  328. return Broadcast.sendErr(human,Lang.COMMON_NO_JINBI)
  329. end
  330. newFuwenID = hechengConfig.newFuwenID
  331. local rate = hechengConfig.hechengRate[cnt - 1]
  332. ObjHuman.updateJinbi(human, -costJinbi, "fuwen_hecheng")
  333. local randomNum = math.random(1,100)
  334. local newFuwenGrid = nil
  335. local fenjieList = {}
  336. if randomNum <= rate then
  337. -- 合成成功
  338. for i = 1,cnt do
  339. local index = fuwenIndexList[i]
  340. del(human, index, "fuwen_hecheng")
  341. end
  342. local msgRet = Msg.gc.GC_FUWEN_HECHENG_SUCCESS
  343. newFuwenGrid = FuwenGrid.create(newFuwenID)
  344. local newIndex = addByGrid(human, newFuwenGrid, "fuwen_hecheng")
  345. Grid.makeItem(msgRet.fuwen, newFuwenGrid.id, 1, nil, newFuwenGrid, newIndex,0)
  346. Msg.send(msgRet,human.fd)
  347. else
  348. -- 合成失败
  349. for i = 1,cnt do
  350. local index = fuwenIndexList[i]
  351. local fenjieConfig = FuwenExcel.fuwen[oldFuwenID]
  352. del(human, index, "fuwen_fenjie")
  353. local jhCnt = math.floor(fenjieConfig.fenjieJinghua/2)
  354. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] or 0
  355. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] + jhCnt
  356. end
  357. BagLogic.addItemList(human, fenjieList, "fuwen_fenjie")
  358. local baseCnt = hechengConfig.failRonglian
  359. local failRonglian_cnt = baseCnt + math.floor((cnt-2) * baseCnt/2)
  360. human.db.smeltVal = human.db.smeltVal or 0
  361. human.db.smeltVal = human.db.smeltVal + failRonglian_cnt
  362. local fenjieConfig = FuwenExcel.fuwen[oldFuwenID]
  363. local fenjieJinghua_cnt = math.floor(fenjieConfig.fenjieJinghua/2) * cnt
  364. local msgRet = Msg.gc.GC_FUWEN_HECHENG_FAIL
  365. msgRet.smeltVal = hechengConfig.failRonglian
  366. msgRet.accountSmeltVal = human.db.smeltVal
  367. Grid.makeItem(msgRet.fuwenJinghua, ItemDefine.ITEM_FUWEN_JINGHUA, fenjieJinghua_cnt)
  368. Msg.send(msgRet,human.fd)
  369. end
  370. -- 符文合成回调
  371. ChengjiuLogic.onCallback(human,ChengjiuDefine.CJ_TASK_TYPE_22,1)
  372. HeroGrowUp.onCallback(human, HeroGrowUp.TASKTYPE8, 1)
  373. YunYingLogic.onCallBack(human, "onFuwenHecheng",1)
  374. end
  375. -- 分解符文
  376. function fuwenFenjieDo(human,fuwenID,fuwenIndex,fenjieType)
  377. -- 校验符文是否可分解
  378. local fenjieConfig = FuwenExcel.fuwen[fuwenID]
  379. if fenjieConfig == nil then
  380. return Broadcast.sendErr(human,Lang.FUWEN_FENJIE_CONFIG_ERR)
  381. end
  382. -- 符文为空
  383. local fuwenGrid = human.db.fuwenBag[fuwenIndex]
  384. if fuwenGrid == nil then
  385. return Broadcast.sendErr(human,Lang.FUWEN_GRID_ERR)
  386. end
  387. -- 符文对不上
  388. if fuwenGrid.id ~= fuwenID then
  389. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  390. end
  391. del(human, fuwenIndex, "fuwen_fenjie")
  392. local fenjieList = {}
  393. if fenjieType == nil then
  394. local msgRet = Msg.gc.GC_FUWEN_FENJIE
  395. Msg.send(msgRet,human.fd)
  396. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = fenjieConfig.fenjieJinghua
  397. else
  398. local cnt = math.floor(fenjieConfig.fenjieJinghua/2)
  399. fenjieList[ItemDefine.ITEM_FUWEN_JINGHUA] = cnt
  400. end
  401. BagLogic.addItemList(human, fenjieList, "fuwen_fenjie")
  402. end
  403. -- 符文兑换
  404. function fuwenExhcange(human)
  405. if human.db.smeltVal == nil or human.db.smeltVal < FuwenDefine.FUWEN_EXCHANGE_CNT then
  406. return Broadcast.sendErr(human,Lang.FUWEN_EXCHANGE_ERR) -- 熔炼值不够
  407. end
  408. human.db.smeltVal = human.db.smeltVal - FuwenDefine.FUWEN_EXCHANGE_CNT
  409. local index = add(human, FuwenDefine.FUWEN_EXCHANGE_ID, 1, "fuwen_exchange")
  410. local fuwenGrid = human.db.fuwenBag[index]
  411. local msgRet = Msg.gc.GC_FUWEN_EXCHANGE
  412. if fuwenGrid ~= nil then
  413. Grid.makeItem(msgRet.fuwen, fuwenGrid.id, 1, nil, fuwenGrid, 1)
  414. Msg.send(msgRet,human.fd)
  415. end
  416. fuwenSmeltValQuery(human)
  417. end
  418. -- 符文刷新查询
  419. function fuwenRefreshQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  420. local fuwen = nil
  421. if fuwenIndex == -1 then
  422. -- 英雄身上符文
  423. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  424. if heroGrid == nil then
  425. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  426. end
  427. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  428. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  429. end
  430. fuwen = heroGrid.fuwen[pos]
  431. else
  432. fuwen = human.db.fuwenBag[fuwenIndex]
  433. end
  434. if fuwen == nil or fuwen.id == nil then
  435. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  436. end
  437. if fuwen.id ~= fuwenID then
  438. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  439. end
  440. local refreshConfig = FuwenExcel.fuwen[fuwenID]
  441. if refreshConfig == nil then
  442. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_CONFIG_ERR) -- 没有相关id分解配置
  443. end
  444. if human.db.fuwenRefreshCnt == nil then
  445. human.db.fuwenRefreshCnt = {}
  446. human.db.fuwenRefreshCnt.sh = 0
  447. human.db.fuwenRefreshCnt.cs = 0
  448. end
  449. local msgRet = Msg.gc.GC_FUWEN_REFRESH_QUERY
  450. -- 本体符文
  451. Grid.makeItemFuwen(msgRet.fuwen,fuwen.id,FuwenExcel.fuwen[fuwen.id],fuwen,fuwenIndex)
  452. -- 临时符文
  453. Grid.makeItemFuwen(msgRet.fuwenTemp,fuwen.id,FuwenExcel.fuwen[fuwen.id],fuwen,fuwenIndex)
  454. if fuwen.attrTemp == nil then
  455. fuwen.attrTemp = {}
  456. end
  457. -- 临时属性备份
  458. local attrLen = #fuwen.attrTemp
  459. for zz = 1,attrLen do
  460. msgRet.fuwenTemp.attrs[zz].key = fuwen.attrTemp[zz][1]
  461. msgRet.fuwenTemp.attrs[zz].value = fuwen.attrTemp[zz][2]
  462. end
  463. msgRet.fuwenTemp.attrs[0] = attrLen
  464. -- 临时技能备份
  465. if fuwen.skillTemp == nil then
  466. msgRet.fuwenTemp.skills[0] = 0
  467. else
  468. local skillLen = #fuwen.skillTemp
  469. for zz = 1,skillLen do
  470. Grid.makeFuwenSkill(msgRet.fuwenTemp.skills[zz], fuwen.skillTemp[zz])
  471. end
  472. msgRet.fuwenTemp.skills[0] = skillLen
  473. end
  474. if attrLen == 0 and fuwen.skillTemp == nil then
  475. msgRet.fuwenTemp.id = 0
  476. else
  477. msgRet.fuwenTemp.id = fuwen.id
  478. end
  479. local lenth = #refreshConfig.expend
  480. for i = 1,lenth do
  481. Grid.makeItem(msgRet.expend[i],refreshConfig.expend[i][1],refreshConfig.expend[i][2])
  482. end
  483. msgRet.expend[0] = lenth
  484. msgRet.refreshCnt = 0
  485. if refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_5 then
  486. msgRet.refreshCnt = human.db.fuwenRefreshCnt.sh
  487. elseif refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_6 then
  488. msgRet.refreshCnt = human.db.fuwenRefreshCnt.cs
  489. end
  490. msgRet.needCnt = refreshConfig.luckRefresh or 0
  491. Msg.send(msgRet,human.fd)
  492. end
  493. -- 符文刷新
  494. function fuwenRefreshDo(human,fuwenID,fuwenIndex,heroID,heroIndex,pos)
  495. local refreshConfig = FuwenExcel.fuwen[fuwenID]
  496. if refreshConfig == nil then
  497. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_CONFIG_ERR) -- 传入参数非法
  498. end
  499. local fuwenGrid = nil
  500. if fuwenIndex == -1 then -- 刷英雄身上的
  501. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  502. if heroGrid == nil then
  503. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR) -- 传入的英雄数据非法
  504. end
  505. if pos == nil then
  506. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR) -- 传入的参数非法
  507. end
  508. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil or heroGrid.fuwen[pos].id == nil then
  509. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR) -- 传入的参数非法
  510. end
  511. fuwenGrid = heroGrid.fuwen[pos]
  512. else -- 刷背包里的
  513. if human.db.fuwenBag == nil or human.db.fuwenBag[fuwenIndex] == nil then
  514. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  515. end
  516. fuwenGrid = human.db.fuwenBag[fuwenIndex]
  517. end
  518. if fuwenGrid == nil or fuwenGrid.id == nil then
  519. return
  520. end
  521. if fuwenGrid.id ~= nil and fuwenGrid.id ~= fuwenID then
  522. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  523. end
  524. -- 幸运重铸判定
  525. local luckRefresh = 0
  526. local refreshCnt = 0
  527. human.db.fuwenRefreshCnt.cs = human.db.fuwenRefreshCnt.cs or 0
  528. human.db.fuwenRefreshCnt.sh = human.db.fuwenRefreshCnt.sh or 0
  529. if refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_5 then
  530. refreshCnt = human.db.fuwenRefreshCnt.sh or 0
  531. elseif refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_6 then
  532. refreshCnt = human.db.fuwenRefreshCnt.cs or 0
  533. end
  534. if refreshConfig.luckRefresh ~= nil and refreshConfig.luckRefresh ~= 0 and refreshCnt >= refreshConfig.luckRefresh then
  535. luckRefresh = 1
  536. end
  537. local jinghuaCnt = BagLogic.getItemCnt(human, ItemDefine.ITEM_FUWEN_JINGHUA)
  538. if human.db.jinbi < refreshConfig.expend[1][2] or jinghuaCnt < refreshConfig.expend[2][2] then
  539. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_FILL_ERR) -- 材料不够
  540. end
  541. if refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_5 then
  542. human.db.fuwenRefreshCnt.sh = human.db.fuwenRefreshCnt.sh + 1
  543. elseif refreshConfig.rare == ItemDefine.ITEM_RARE_COLOR_6 then
  544. human.db.fuwenRefreshCnt.cs = human.db.fuwenRefreshCnt.cs + 1
  545. end
  546. if human.db.fuwenRefreshCnt.cs > 15 then
  547. human.db.fuwenRefreshCnt.cs = 0
  548. end
  549. if human.db.fuwenRefreshCnt.sh > 25 then
  550. human.db.fuwenRefreshCnt.sh = 0
  551. end
  552. -- 扣消耗
  553. local fuwenGridTemp = Util.copyTable(fuwenGrid)
  554. ObjHuman.updateJinbi(human, -refreshConfig.expend[1][2], "fuwen_refresh")
  555. BagLogic.delItem(human, ItemDefine.ITEM_FUWEN_JINGHUA, refreshConfig.expend[2][2], "fuwen_refresh")
  556. -- 改属性
  557. FuwenGrid.genFuwenAttr(fuwenGridTemp,luckRefresh)
  558. fuwenGrid.attrTemp = fuwenGridTemp.attr or {}
  559. fuwenGrid.skillTemp = fuwenGridTemp.skill
  560. local msgRet = Msg.gc.GC_FUWEN_REFRESH_DO
  561. Grid.makeItem(msgRet.fuwen, fuwenGridTemp.id, 1, nil, fuwenGridTemp, fuwenIndex)
  562. Msg.send(msgRet,human.fd)
  563. fuwenRefreshQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  564. end
  565. local function cmpSkill(a, b)
  566. if a.sortID ~= b.sortID then
  567. return a.sortID < b.sortID
  568. end
  569. return a.skillID < b.skillID
  570. end
  571. local SORT_SKILL_LIST = nil
  572. function getSortSkillList()
  573. if not SORT_SKILL_LIST then
  574. SORT_SKILL_LIST = {}
  575. for skillID, config in pairs(FuwenExcel.skill) do
  576. config.skillID = skillID
  577. SORT_SKILL_LIST[#SORT_SKILL_LIST + 1] = config
  578. end
  579. if #SORT_SKILL_LIST > 1 then
  580. table.sort(SORT_SKILL_LIST, cmpSkill)
  581. end
  582. end
  583. return SORT_SKILL_LIST
  584. end
  585. -- 技能查询
  586. function fuwenRareSkillQuery(human, lv)
  587. local configs = getSortSkillList()
  588. local msgRet = Msg.gc.GC_FUWEN_RARE_SKILL_QUERY
  589. msgRet.type = lv
  590. local cnt = 0
  591. for _, config in ipairs(configs) do
  592. if config.lv == lv then
  593. cnt = cnt + 1
  594. Grid.makeFuwenSkill(msgRet.skillInfo[cnt], config.skillID)
  595. end
  596. end
  597. if cnt > 0 then
  598. msgRet.skillInfo[0] = cnt
  599. Msg.send(msgRet, human.fd)
  600. end
  601. end
  602. -- 计算属性
  603. local tbSkillGroupID = {}
  604. function doCalcHero(obj,attrs)
  605. Util.initTable(tbSkillGroupID)
  606. if obj.fuwen then
  607. for i = 1, 2 do
  608. local fuwenGrid = obj.fuwen[i]
  609. if fuwenGrid and fuwenGrid.id ~= nil then
  610. for k, v in ipairs(fuwenGrid.attr) do
  611. RoleAttr.updateValue(v[1], v[2], attrs)
  612. end
  613. local skillLen = fuwenGrid.skill and #fuwenGrid.skill or 0
  614. for j = 1, skillLen do
  615. local skillID = fuwenGrid.skill[j]
  616. local skillConfig = FuwenExcel.skill[skillID]
  617. local groupID = skillConfig.groupID
  618. if (tbSkillGroupID[groupID] or 0) < skillID then
  619. tbSkillGroupID[groupID] = skillID
  620. end
  621. end
  622. end
  623. end
  624. end
  625. -- 兵书技能
  626. if obj.bingshu then
  627. for i = 1, BingshuLogic.BINGSHU_MAXCNT do
  628. local bingshuGrid = obj.bingshu[i]
  629. if bingshuGrid then
  630. local skillID = bingshuGrid.skillID
  631. local skillConfig = FuwenExcel.skill[skillID]
  632. local groupID = skillConfig.groupID
  633. if (tbSkillGroupID[groupID] or 0) < skillID then
  634. tbSkillGroupID[groupID] = skillID
  635. end
  636. end
  637. end
  638. end
  639. -- 符文技能效果这里 如果有多个同类型的技能 效果不叠加 只取最高等级的那个技能的效果
  640. for groupID, skillIDTemp in pairs(tbSkillGroupID) do
  641. local skillConfig = FuwenExcel.skill[skillIDTemp]
  642. local cnt = #skillConfig.attrs
  643. if cnt > 0 then
  644. for k, v in ipairs(skillConfig.attrs) do
  645. RoleAttr.updateValue(v[1], v[2], attrs)
  646. end
  647. end
  648. end
  649. end
  650. -- 熔炼值查询
  651. function fuwenSmeltValQuery(human)
  652. local msgRet = Msg.gc.GC_FUWEN_SMELT_VAL_QUERY
  653. msgRet.accountSmeltVal = human.db.smeltVal or 0
  654. Msg.send(msgRet,human.fd)
  655. end
  656. -- 符文刷新保存
  657. function fuwenRefreshSave(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  658. local fuwen = nil
  659. if fuwenIndex == -1 then
  660. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  661. if heroGrid == nil then
  662. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  663. end
  664. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  665. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  666. end
  667. fuwen = heroGrid.fuwen[pos]
  668. else
  669. fuwen = human.db.fuwenBag[fuwenIndex]
  670. end
  671. if fuwen == nil or fuwen.id == nil then
  672. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR)
  673. end
  674. if fuwen.id ~= fuwenID then
  675. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  676. end
  677. if fuwen.attrTemp ~= nil or fuwen.skillTemp ~= nil then
  678. if next(fuwen.attrTemp) then
  679. fuwen.attr = fuwen.attrTemp
  680. fuwen.attrTemp = {}
  681. else
  682. Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave attrTemp is empty")
  683. end
  684. if next(fuwen.skillTemp) then
  685. fuwen.skill = fuwen.skillTemp
  686. fuwen.skillTemp = nil
  687. else
  688. Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave skillTemp is empty")
  689. end
  690. end
  691. Broadcast.sendErr(human,Lang.FUWEN_SAVE_SUCCESS)
  692. if fuwenIndex == -1 then
  693. ObjHuman.doCalcHero(human,heroIndex)
  694. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  695. HeroEquip.query(human, heroID, heroIndex)
  696. else
  697. sendFuwenItemChange(human, fuwenIndex, fuwen, FuwenDefine.FUWEN_BAG_OP_ADD)
  698. end
  699. fuwenRefreshQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  700. end
  701. -- 符文兑换查询
  702. function fuwenExchangeQuery(human)
  703. local msgRet = Msg.gc.GC_FUWEN_EXCHANGE_QUERY
  704. local gridTemp = FuwenGrid.create(FuwenDefine.FUWEN_EXCHANGE_ID)
  705. Grid.makeItem(msgRet.fuwen, gridTemp.id, 1, nil, gridTemp, 1)
  706. Msg.send(msgRet,human.fd)
  707. end
  708. -- 符文格子解锁
  709. function fuwenGridUnlock(human,heroID,heroIndex,pos)
  710. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  711. if heroGrid == nil then
  712. return
  713. end
  714. if heroGrid.fuwen ~= nil and heroGrid.fuwen[pos] ~= nil then
  715. return
  716. end
  717. if pos == 1 then
  718. if heroGrid.lv < 100 then
  719. else
  720. heroGrid.fuwen = heroGrid.fuwen or {}
  721. heroGrid.fuwen[1] = {}
  722. end
  723. elseif pos == 2 then
  724. if heroGrid.star < 7 then
  725. else
  726. heroGrid.fuwen = heroGrid.fuwen or {}
  727. heroGrid.fuwen[2] = {}
  728. end
  729. end
  730. end
  731. function wrapFuwenAttrNet(net,fuwenConf)
  732. local len = 0
  733. for _,attr in ipairs(fuwenConf.absAttrPool) do
  734. len = len + 1
  735. net.base_attrs[len].key = attr[1]
  736. net.base_attrs[len].value = attr[2]
  737. end
  738. net.base_attrs[0] = len
  739. local len2 = 0
  740. for _, attr in ipairs(fuwenConf.percentAttrPool) do
  741. len2 = len2 + 1
  742. net.percent_attrs[len2].key = attr[1]
  743. net.percent_attrs[len2].value = attr[2]
  744. end
  745. net.percent_attrs[0] = len2
  746. end
  747. -- 符文属性查询
  748. function CG_FUWEN_ATTR_QUERY(human,fuwenID)
  749. if fuwenID == nil then
  750. return Broadcast.sendErr(human,Lang.FUWEN_ITEMID_ERR)
  751. end
  752. local fuwenConfig = FuwenExcel.fuwen[fuwenID]
  753. if fuwenConfig == nil then
  754. return
  755. end
  756. local msgRet = Msg.gc.GC_FUWEN_ATTR_QUERY
  757. wrapFuwenAttrNet(msgRet,fuwenConfig)
  758. Msg.send(msgRet,human.fd)
  759. end
  760. -- 符文精炼预览
  761. function fuwenRefinePreview(human)
  762. local fuwenGrid = {}
  763. fuwenGrid = FuwenGrid.create(FuwenDefine.FUWEN_REFINE_ID)
  764. local msgRet = Msg.gc.GC_FUWEN_REFINE_PREVIEW_QUERY
  765. Grid.makeItem(msgRet.fuwen, fuwenGrid.id, 1, nil, fuwenGrid, 1)
  766. Msg.send(msgRet,human.fd)
  767. end
  768. -- 符文精炼查询
  769. function fuwenRefineQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  770. local fuwen = nil
  771. if fuwenIndex == -1 then
  772. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  773. if heroGrid == nil then
  774. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  775. end
  776. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  777. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  778. end
  779. fuwen = heroGrid.fuwen[pos]
  780. else
  781. fuwen = human.db.fuwenBag[fuwenIndex]
  782. end
  783. if fuwen == nil or fuwen.id == nil then
  784. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  785. end
  786. if fuwen.id ~= fuwenID then
  787. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  788. end
  789. if FuwenExcel.fuwen[fuwen.id].refine ~= 1 then
  790. return
  791. end
  792. local jinglianExcel = FuwenExcel.jinglian
  793. local refine = fuwen.refine or 0
  794. local refineExcel = jinglianExcel[refine + 1]
  795. -- 构造预览符文
  796. local previewFuwen = Util.copyTable(fuwen)
  797. previewFuwen.refine = refine + 1
  798. if refine == 0 then
  799. -- 第1次精炼
  800. local newValue = previewFuwen.attr[1][2] * 2
  801. previewFuwen.attr[1][2] = newValue
  802. elseif refine == 1 then
  803. -- 第2次精炼
  804. local fuwenConfig = FuwenExcel.fuwen[fuwen.id]
  805. cnt = #fuwenConfig.percentAttrPool
  806. if cnt > 0 then
  807. local randIndex = math.random(1, cnt)
  808. local attrKey = fuwenConfig.percentAttrPool[randIndex][1]
  809. local attrVal = fuwenConfig.percentAttrPool[randIndex][2]
  810. previewFuwen.attr[3] = {attrKey, attrVal}
  811. end
  812. elseif refine == 2 then
  813. -- 第3次精炼
  814. local skillConfig = FuwenExcel.skill
  815. local skillLen = #previewFuwen.skill
  816. for i = 1,skillLen do
  817. local skillID = previewFuwen.skill[i]
  818. local skillLv = skillConfig[skillID].lv
  819. if skillLv < 3 then
  820. skillID = skillID + 1000
  821. end
  822. previewFuwen.skill[i] = skillID
  823. end
  824. previewFuwen.id = fuwen.id + 1
  825. end
  826. -- 发数据
  827. local msgRet = Msg.gc.GC_FUWEN_REFINE_QUERY
  828. Grid.makeItem(msgRet.fuwen,previewFuwen.id, 1, nil,previewFuwen, 1)
  829. local expendLen = #refineExcel.expend
  830. for i = 1,expendLen do
  831. Grid.makeItem(msgRet.expend[i],refineExcel.expend[i][1],refineExcel.expend[i][2])
  832. end
  833. msgRet.expend[0] = expendLen
  834. local jinglianLen = #jinglianExcel
  835. for i = 1,jinglianLen do
  836. msgRet.refineDesc[i].desc = jinglianExcel[i].desc
  837. end
  838. msgRet.refineDesc[0] = jinglianLen
  839. Msg.send(msgRet,human.fd)
  840. end
  841. -- 符文精炼
  842. function fuwenRefineDo(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  843. local fuwen = nil
  844. if fuwenIndex == -1 then
  845. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  846. if heroGrid == nil then
  847. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  848. end
  849. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  850. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  851. end
  852. fuwen = heroGrid.fuwen[pos]
  853. else
  854. fuwen = human.db.fuwenBag[fuwenIndex]
  855. end
  856. if fuwen == nil or fuwen.id == nil then
  857. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  858. end
  859. if fuwen.id ~= fuwenID then
  860. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  861. end
  862. if FuwenExcel.fuwen[fuwen.id].refine ~= 1 then
  863. return
  864. end
  865. local newRefine = fuwen.refine or 0
  866. newRefine = newRefine + 1
  867. local jinglianExcel = FuwenExcel.jinglian
  868. local refineExcel = jinglianExcel[newRefine]
  869. local expendLen = #refineExcel.expend
  870. for i = 1,expendLen do
  871. local v = refineExcel.expend[i]
  872. local haveCnt = BagLogic.getItemCnt(human,v[1])
  873. if haveCnt < v[2] then
  874. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_FILL_ERR) -- 材料不够
  875. end
  876. end
  877. --删除材料
  878. for i = 1,expendLen do
  879. local v = refineExcel.expend[i]
  880. BagLogic.delItem(human, v[1], v[2], "fuwen_refine")
  881. end
  882. if newRefine == 1 then
  883. -- 第1次精炼
  884. fuwen.refine = newRefine
  885. local newValue = fuwen.attr[1][2] * 2
  886. fuwen.attr[1][2] = newValue
  887. elseif newRefine == 2 then
  888. -- 第2次精炼
  889. fuwen.refine = newRefine
  890. local fuwenConfig = FuwenExcel.fuwen[fuwen.id]
  891. cnt = #fuwenConfig.percentAttrPool
  892. if cnt > 0 then
  893. local randIndex = math.random(1, cnt)
  894. local attrKey = fuwenConfig.percentAttrPool[randIndex][1]
  895. local attrVal = fuwenConfig.percentAttrPool[randIndex][2]
  896. fuwen.attr[3] = {attrKey, attrVal}
  897. end
  898. elseif newRefine == 3 then
  899. -- 第3次精炼
  900. fuwen.refine = newRefine
  901. local skillConfig = FuwenExcel.skill
  902. local skillLen = #fuwen.skill
  903. for i = 1,skillLen do
  904. local skillID = fuwen.skill[i]
  905. local skillLv = skillConfig[skillID].lv
  906. if skillLv < 4 then
  907. skillID = skillID + 1000
  908. end
  909. fuwen.skill[i] = skillID
  910. end
  911. fuwen.id = fuwen.id + 1
  912. fuwen.refine = 0
  913. else
  914. return
  915. end
  916. if fuwenIndex == -1 then
  917. ObjHuman.doCalcHero(human,heroIndex)
  918. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  919. HeroEquip.query(human, heroID, heroIndex)
  920. else
  921. sendFuwenItemChange(human, fuwenIndex, fuwen, FuwenDefine.FUWEN_BAG_OP_ADD)
  922. end
  923. local msgRet = Msg.gc.GC_FUWEN_REFINE_DO
  924. Grid.makeItem(msgRet.fuwen,fuwen.id, 1,nil, fuwen, 1)
  925. Msg.send(msgRet,human.fd)
  926. end
  927. -- 是否有符文红点
  928. function isFuwenDot(human, heroGrid)
  929. if not heroGrid then return end
  930. local heroConfig = HeroExcel[heroGrid.id]
  931. if not heroConfig then return end
  932. if human.db.lv < 9 then
  933. return false
  934. end
  935. local haveFuwen = nil
  936. local emptyCnt = FuwenGrid.getEmptyCnt(human)
  937. if emptyCnt < FuwenDefine.FUWEN_BAG_MAX_CNT then
  938. haveFuwen = true
  939. end
  940. for pos = 1, 2 do
  941. local fuwenGrid = heroGrid.fuwen and heroGrid.fuwen[pos]
  942. if fuwenGrid ~= nil and fuwenGrid.id == nil and haveFuwen then
  943. return true
  944. end
  945. end
  946. end
  947. -- 是否有装备红点
  948. function isFuwenDotByPos(human, heroGrid, pos)
  949. if not heroGrid then return end
  950. local heroConfig = HeroExcel[heroGrid.id]
  951. if not heroConfig then return end
  952. local haveFuwen = nil
  953. local emptyCnt = FuwenGrid.getEmptyCnt(human)
  954. if emptyCnt < FuwenDefine.FUWEN_BAG_MAX_CNT then
  955. haveFuwen = true
  956. end
  957. local fuwenGrid = heroGrid.fuwen and heroGrid.fuwen[pos]
  958. if fuwenGrid ~= nil and fuwenGrid.id == nil and haveFuwen then
  959. return true
  960. end
  961. end
  962. function sendFuwenGetWay(human)
  963. local msgRet = Msg.gc.GC_FUWEN_GET_WAY_QUERY
  964. local fuwenGrid = FuwenGrid.create(80001)
  965. local hechengConfig = FuwenExcel.hechengRule[80001]
  966. Grid.makeItem(msgRet.newFuwen, 80001, 1, nil, fuwenGrid, 1)
  967. msgRet.desc1 = hechengConfig.desc1
  968. msgRet.desc2 = hechengConfig.desc2
  969. Msg.send(msgRet,human.fd)
  970. end