FuwenLogic.lua 38 KB

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