FuwenLogic.lua 43 KB

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