FuwenLogic.lua 39 KB

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