FuwenLogic.lua 38 KB

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