FuwenLogic.lua 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155
  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. YunYingLogic.onCallBack(human, "onFuwenChongZhu",1)
  565. end
  566. local function cmpSkill(a, b)
  567. if a.sortID ~= b.sortID then
  568. return a.sortID < b.sortID
  569. end
  570. return a.skillID < b.skillID
  571. end
  572. local SORT_SKILL_LIST = nil
  573. function getSortSkillList()
  574. if not SORT_SKILL_LIST then
  575. SORT_SKILL_LIST = {}
  576. for skillID, config in pairs(FuwenExcel.skill) do
  577. config.skillID = skillID
  578. SORT_SKILL_LIST[#SORT_SKILL_LIST + 1] = config
  579. end
  580. if #SORT_SKILL_LIST > 1 then
  581. table.sort(SORT_SKILL_LIST, cmpSkill)
  582. end
  583. end
  584. return SORT_SKILL_LIST
  585. end
  586. -- 技能查询
  587. function fuwenRareSkillQuery(human, lv)
  588. local configs = getSortSkillList()
  589. local msgRet = Msg.gc.GC_FUWEN_RARE_SKILL_QUERY
  590. msgRet.type = lv
  591. local cnt = 0
  592. for _, config in ipairs(configs) do
  593. if config.lv == lv then
  594. cnt = cnt + 1
  595. Grid.makeFuwenSkill(msgRet.skillInfo[cnt], config.skillID)
  596. end
  597. end
  598. if cnt > 0 then
  599. msgRet.skillInfo[0] = cnt
  600. Msg.send(msgRet, human.fd)
  601. end
  602. end
  603. -- 计算属性
  604. local tbSkillGroupID = {}
  605. function doCalcHero(obj,attrs)
  606. Util.initTable(tbSkillGroupID)
  607. if obj.fuwen then
  608. for i = 1, 2 do
  609. local fuwenGrid = obj.fuwen[i]
  610. if fuwenGrid and fuwenGrid.id ~= nil then
  611. for k, v in ipairs(fuwenGrid.attr) do
  612. RoleAttr.updateValue(v[1], v[2], attrs)
  613. end
  614. local skillLen = fuwenGrid.skill and #fuwenGrid.skill or 0
  615. for j = 1, skillLen do
  616. local skillID = fuwenGrid.skill[j]
  617. local skillConfig = FuwenExcel.skill[skillID]
  618. local groupID = skillConfig.groupID
  619. if (tbSkillGroupID[groupID] or 0) < skillID then
  620. tbSkillGroupID[groupID] = skillID
  621. end
  622. end
  623. end
  624. end
  625. end
  626. -- 兵书技能
  627. if obj.bingshu then
  628. for i = 1, BingshuLogic.BINGSHU_MAXCNT do
  629. local bingshuGrid = obj.bingshu[i]
  630. if bingshuGrid then
  631. local skillID = bingshuGrid.skillID
  632. local skillConfig = FuwenExcel.skill[skillID]
  633. local groupID = skillConfig.groupID
  634. if (tbSkillGroupID[groupID] or 0) < skillID then
  635. tbSkillGroupID[groupID] = skillID
  636. end
  637. end
  638. end
  639. end
  640. -- 符文技能效果这里 如果有多个同类型的技能 效果不叠加 只取最高等级的那个技能的效果
  641. for groupID, skillIDTemp in pairs(tbSkillGroupID) do
  642. local skillConfig = FuwenExcel.skill[skillIDTemp]
  643. local cnt = #skillConfig.attrs
  644. if cnt > 0 then
  645. for k, v in ipairs(skillConfig.attrs) do
  646. RoleAttr.updateValue(v[1], v[2], attrs)
  647. end
  648. end
  649. end
  650. end
  651. -- 熔炼值查询
  652. function fuwenSmeltValQuery(human)
  653. local msgRet = Msg.gc.GC_FUWEN_SMELT_VAL_QUERY
  654. msgRet.accountSmeltVal = human.db.smeltVal or 0
  655. Msg.send(msgRet,human.fd)
  656. end
  657. -- 符文刷新保存
  658. function fuwenRefreshSave(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  659. local fuwen = nil
  660. if fuwenIndex == -1 then
  661. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  662. if heroGrid == nil then
  663. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  664. end
  665. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  666. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  667. end
  668. fuwen = heroGrid.fuwen[pos]
  669. else
  670. fuwen = human.db.fuwenBag[fuwenIndex]
  671. end
  672. if fuwen == nil or fuwen.id == nil then
  673. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR)
  674. end
  675. if fuwen.id ~= fuwenID then
  676. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  677. end
  678. if fuwen.attrTemp ~= nil or fuwen.skillTemp ~= nil then
  679. if next(fuwen.attrTemp) then
  680. fuwen.attr = fuwen.attrTemp
  681. fuwen.attrTemp = {}
  682. else
  683. Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave attrTemp is empty")
  684. end
  685. if next(fuwen.skillTemp) then
  686. fuwen.skill = fuwen.skillTemp
  687. fuwen.skillTemp = nil
  688. else
  689. Log.write(Log.LOGID_DEBUG, human.db._id, human.db.account, human.db.name, human.db.lv, fuwen.id,"refreshsave skillTemp is empty")
  690. end
  691. end
  692. Broadcast.sendErr(human,Lang.FUWEN_SAVE_SUCCESS)
  693. if fuwenIndex == -1 then
  694. ObjHuman.doCalcHero(human,heroIndex)
  695. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  696. HeroEquip.query(human, heroID, heroIndex)
  697. else
  698. sendFuwenItemChange(human, fuwenIndex, fuwen, FuwenDefine.FUWEN_BAG_OP_ADD)
  699. end
  700. fuwenRefreshQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  701. end
  702. -- 符文兑换查询
  703. function fuwenExchangeQuery(human)
  704. local msgRet = Msg.gc.GC_FUWEN_EXCHANGE_QUERY
  705. local gridTemp = FuwenGrid.create(FuwenDefine.FUWEN_EXCHANGE_ID)
  706. Grid.makeItem(msgRet.fuwen, gridTemp.id, 1, nil, gridTemp, 1)
  707. Msg.send(msgRet,human.fd)
  708. end
  709. -- 符文格子解锁
  710. function fuwenGridUnlock(human,heroID,heroIndex,pos)
  711. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  712. if heroGrid == nil then
  713. return
  714. end
  715. if heroGrid.fuwen ~= nil and heroGrid.fuwen[pos] ~= nil then
  716. return
  717. end
  718. if pos == 1 then
  719. if heroGrid.lv < 100 then
  720. else
  721. heroGrid.fuwen = heroGrid.fuwen or {}
  722. heroGrid.fuwen[1] = {}
  723. end
  724. elseif pos == 2 then
  725. if heroGrid.star < 7 then
  726. else
  727. heroGrid.fuwen = heroGrid.fuwen or {}
  728. heroGrid.fuwen[2] = {}
  729. end
  730. end
  731. end
  732. function wrapFuwenAttrNet(net,fuwenConf)
  733. local len = 0
  734. for _,attr in ipairs(fuwenConf.absAttrPool) do
  735. len = len + 1
  736. net.base_attrs[len].key = attr[1]
  737. net.base_attrs[len].value = attr[2]
  738. end
  739. net.base_attrs[0] = len
  740. local len2 = 0
  741. for _, attr in ipairs(fuwenConf.percentAttrPool) do
  742. len2 = len2 + 1
  743. net.percent_attrs[len2].key = attr[1]
  744. net.percent_attrs[len2].value = attr[2]
  745. end
  746. net.percent_attrs[0] = len2
  747. end
  748. -- 符文属性查询
  749. function CG_FUWEN_ATTR_QUERY(human,fuwenID)
  750. if fuwenID == nil then
  751. return Broadcast.sendErr(human,Lang.FUWEN_ITEMID_ERR)
  752. end
  753. local fuwenConfig = FuwenExcel.fuwen[fuwenID]
  754. if fuwenConfig == nil then
  755. return
  756. end
  757. local msgRet = Msg.gc.GC_FUWEN_ATTR_QUERY
  758. wrapFuwenAttrNet(msgRet,fuwenConfig)
  759. Msg.send(msgRet,human.fd)
  760. end
  761. -- 符文精炼预览
  762. function fuwenRefinePreview(human)
  763. local fuwenGrid = {}
  764. fuwenGrid = FuwenGrid.create(FuwenDefine.FUWEN_REFINE_ID)
  765. local msgRet = Msg.gc.GC_FUWEN_REFINE_PREVIEW_QUERY
  766. Grid.makeItem(msgRet.fuwen, fuwenGrid.id, 1, nil, fuwenGrid, 1)
  767. Msg.send(msgRet,human.fd)
  768. end
  769. -- 符文精炼查询
  770. function fuwenRefineQuery(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  771. local fuwen = nil
  772. if fuwenIndex == -1 then
  773. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  774. if heroGrid == nil then
  775. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  776. end
  777. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  778. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  779. end
  780. fuwen = heroGrid.fuwen[pos]
  781. else
  782. fuwen = human.db.fuwenBag[fuwenIndex]
  783. end
  784. if fuwen == nil or fuwen.id == nil then
  785. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  786. end
  787. if fuwen.id ~= fuwenID then
  788. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  789. end
  790. if FuwenExcel.fuwen[fuwen.id].refine ~= 1 then
  791. return
  792. end
  793. local jinglianExcel = FuwenExcel.jinglian
  794. local refine = fuwen.refine or 0
  795. local refineExcel = jinglianExcel[refine + 1]
  796. -- 构造预览符文
  797. local previewFuwen = Util.copyTable(fuwen)
  798. previewFuwen.refine = refine + 1
  799. if refine == 0 then
  800. -- 第1次精炼
  801. local newValue = previewFuwen.attr[1][2] * 2
  802. previewFuwen.attr[1][2] = newValue
  803. elseif refine == 1 then
  804. -- 第2次精炼
  805. local fuwenConfig = FuwenExcel.fuwen[fuwen.id]
  806. cnt = #fuwenConfig.percentAttrPool
  807. if cnt > 0 then
  808. local randIndex = math.random(1, cnt)
  809. local attrKey = fuwenConfig.percentAttrPool[randIndex][1]
  810. local attrVal = fuwenConfig.percentAttrPool[randIndex][2]
  811. previewFuwen.attr[3] = {attrKey, attrVal}
  812. end
  813. elseif refine == 2 then
  814. -- 第3次精炼
  815. local skillConfig = FuwenExcel.skill
  816. local skillLen = #previewFuwen.skill
  817. for i = 1,skillLen do
  818. local skillID = previewFuwen.skill[i]
  819. local skillLv = skillConfig[skillID].lv
  820. if skillLv < 3 then
  821. skillID = skillID + 1000
  822. end
  823. previewFuwen.skill[i] = skillID
  824. end
  825. previewFuwen.id = fuwen.id + 1
  826. end
  827. -- 发数据
  828. local msgRet = Msg.gc.GC_FUWEN_REFINE_QUERY
  829. Grid.makeItem(msgRet.fuwen,previewFuwen.id, 1, nil,previewFuwen, 1)
  830. local expendLen = #refineExcel.expend
  831. for i = 1,expendLen do
  832. Grid.makeItem(msgRet.expend[i],refineExcel.expend[i][1],refineExcel.expend[i][2])
  833. end
  834. msgRet.expend[0] = expendLen
  835. local jinglianLen = #jinglianExcel
  836. for i = 1,jinglianLen do
  837. msgRet.refineDesc[i].desc = jinglianExcel[i].desc
  838. end
  839. msgRet.refineDesc[0] = jinglianLen
  840. Msg.send(msgRet,human.fd)
  841. end
  842. -- 符文精炼
  843. function fuwenRefineDo(human,fuwenID,fuwenIndex,pos,heroID,heroIndex)
  844. local fuwen = nil
  845. if fuwenIndex == -1 then
  846. local heroGrid = HeroLogic.getHeroGrid(human, heroID, heroIndex)
  847. if heroGrid == nil then
  848. return Broadcast.sendErr(human,Lang.FUWEN_HERO_GRID_ERR)
  849. end
  850. if heroGrid.fuwen == nil or heroGrid.fuwen[pos] == nil then
  851. return Broadcast.sendErr(human,Lang.FUWEN_PUTOFF_ERR)
  852. end
  853. fuwen = heroGrid.fuwen[pos]
  854. else
  855. fuwen = human.db.fuwenBag[fuwenIndex]
  856. end
  857. if fuwen == nil or fuwen.id == nil then
  858. return Broadcast.sendErr(human,Lang.FUWEN_HECHENG_FILL_ERR) -- 材料不存在
  859. end
  860. if fuwen.id ~= fuwenID then
  861. return Broadcast.sendErr(human,Lang.FUWEN_ID_ERR)
  862. end
  863. if FuwenExcel.fuwen[fuwen.id].refine ~= 1 then
  864. return
  865. end
  866. local newRefine = fuwen.refine or 0
  867. newRefine = newRefine + 1
  868. local jinglianExcel = FuwenExcel.jinglian
  869. local refineExcel = jinglianExcel[newRefine]
  870. local expendLen = #refineExcel.expend
  871. for i = 1,expendLen do
  872. local v = refineExcel.expend[i]
  873. local haveCnt = BagLogic.getItemCnt(human,v[1])
  874. if haveCnt < v[2] then
  875. return Broadcast.sendErr(human,Lang.FUWEN_REFRESH_FILL_ERR) -- 材料不够
  876. end
  877. end
  878. --删除材料
  879. for i = 1,expendLen do
  880. local v = refineExcel.expend[i]
  881. BagLogic.delItem(human, v[1], v[2], "fuwen_refine")
  882. end
  883. if newRefine == 1 then
  884. -- 第1次精炼
  885. fuwen.refine = newRefine
  886. local newValue = fuwen.attr[1][2] * 2
  887. fuwen.attr[1][2] = newValue
  888. elseif newRefine == 2 then
  889. -- 第2次精炼
  890. fuwen.refine = newRefine
  891. local fuwenConfig = FuwenExcel.fuwen[fuwen.id]
  892. cnt = #fuwenConfig.percentAttrPool
  893. if cnt > 0 then
  894. local randIndex = math.random(1, cnt)
  895. local attrKey = fuwenConfig.percentAttrPool[randIndex][1]
  896. local attrVal = fuwenConfig.percentAttrPool[randIndex][2]
  897. fuwen.attr[3] = {attrKey, attrVal}
  898. end
  899. elseif newRefine == 3 then
  900. -- 第3次精炼
  901. fuwen.refine = newRefine
  902. local skillConfig = FuwenExcel.skill
  903. local skillLen = #fuwen.skill
  904. for i = 1,skillLen do
  905. local skillID = fuwen.skill[i]
  906. local skillLv = skillConfig[skillID].lv
  907. if skillLv < 4 then
  908. skillID = skillID + 1000
  909. end
  910. fuwen.skill[i] = skillID
  911. end
  912. fuwen.id = fuwen.id + 1
  913. fuwen.refine = 0
  914. else
  915. return
  916. end
  917. if fuwenIndex == -1 then
  918. ObjHuman.doCalcHero(human,heroIndex)
  919. HeroLogic.sendHeroBagDynamic(human, heroID, heroIndex)
  920. HeroEquip.query(human, heroID, heroIndex)
  921. else
  922. sendFuwenItemChange(human, fuwenIndex, fuwen, FuwenDefine.FUWEN_BAG_OP_ADD)
  923. end
  924. local msgRet = Msg.gc.GC_FUWEN_REFINE_DO
  925. Grid.makeItem(msgRet.fuwen,fuwen.id, 1,nil, fuwen, 1)
  926. Msg.send(msgRet,human.fd)
  927. end
  928. -- 是否有符文红点
  929. function isFuwenDot(human, heroGrid)
  930. if not heroGrid then return end
  931. local heroConfig = HeroExcel[heroGrid.id]
  932. if not heroConfig then return end
  933. if human.db.lv < 9 then
  934. return false
  935. end
  936. local haveFuwen = nil
  937. local emptyCnt = FuwenGrid.getEmptyCnt(human)
  938. if emptyCnt < FuwenDefine.FUWEN_BAG_MAX_CNT then
  939. haveFuwen = true
  940. end
  941. for pos = 1, 2 do
  942. local fuwenGrid = heroGrid.fuwen and heroGrid.fuwen[pos]
  943. if fuwenGrid ~= nil and fuwenGrid.id == nil and haveFuwen then
  944. return true
  945. end
  946. end
  947. end
  948. -- 是否有装备红点
  949. function isFuwenDotByPos(human, heroGrid, pos)
  950. if not heroGrid then return end
  951. local heroConfig = HeroExcel[heroGrid.id]
  952. if not heroConfig then return end
  953. local haveFuwen = nil
  954. local emptyCnt = FuwenGrid.getEmptyCnt(human)
  955. if emptyCnt < FuwenDefine.FUWEN_BAG_MAX_CNT then
  956. haveFuwen = true
  957. end
  958. local fuwenGrid = heroGrid.fuwen and heroGrid.fuwen[pos]
  959. if fuwenGrid ~= nil and fuwenGrid.id == nil and haveFuwen then
  960. return true
  961. end
  962. end
  963. function sendFuwenGetWay(human)
  964. local msgRet = Msg.gc.GC_FUWEN_GET_WAY_QUERY
  965. local fuwenGrid = FuwenGrid.create(80001)
  966. local hechengConfig = FuwenExcel.hechengRule[80001]
  967. Grid.makeItem(msgRet.newFuwen, 80001, 1, nil, fuwenGrid, 1)
  968. msgRet.desc1 = hechengConfig.desc1
  969. msgRet.desc2 = hechengConfig.desc2
  970. Msg.send(msgRet,human.fd)
  971. end