FuwenLogic.lua 38 KB

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