Grid.lua 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  1. ------------------------------------------------
  2. -- 道具格子
  3. ------------------------------------------------
  4. local HeroExcel = require("excel.hero")
  5. local EquipExcel = require("excel.equip")
  6. local FuwenExcel = require("excel.fuwen")
  7. local SkinExcel = require("excel.skin")
  8. local Util = require("common.Util")
  9. local ItemDefine = require("bag.ItemDefine")
  10. local SuipianLogic = require("bag.SuipianLogic")
  11. local RoleAttr = require("role.RoleAttr")
  12. local EquipLogic = require("equip.EquipLogic")
  13. -- 填充装备,道具信息
  14. function makeItem(net, itemID, itemCnt, shuijingAttrID, itemGrid, itemIndex, opFlag, equipQuality, gemBonus)
  15. local itemConfig = ItemDefine.getConfig(itemID)
  16. net.id = itemConfig and itemID or 0
  17. net.cnt = itemConfig and itemCnt or 0
  18. net.name = itemConfig and itemConfig.name or ""
  19. net.mainType = itemConfig and itemConfig.mainType or 0
  20. net.subType = itemConfig and itemConfig.subType or 0
  21. net.order = itemConfig and itemConfig.order or 0
  22. net.icon = itemConfig and itemConfig.icon or 0
  23. net.desc1 = itemConfig and itemConfig.desc1 or ""
  24. net.desc2 = itemConfig and itemConfig.desc2 or ""
  25. local priceId = itemConfig and itemConfig.price and itemConfig.price[1] or 0
  26. local priceConfig = ItemDefine.getConfig(priceId)
  27. net.priceIcon = priceConfig and priceConfig.icon or 0
  28. net.price = itemConfig and itemConfig.price and itemConfig.price[2] or 0
  29. net.rare = itemConfig and itemConfig.rare or 0
  30. net.score = itemConfig and itemConfig.score or 0
  31. net.getway = net.getway or {}
  32. net.getway[0] = (itemConfig and itemConfig.getway) and #itemConfig.getway or 0
  33. for i=1, net.getway[0] do
  34. net.getway[i] = itemConfig.getway[i]
  35. end
  36. net.panelID = itemConfig and itemConfig.panelID or 0
  37. net.isShow = itemConfig and itemConfig.isShow or 0
  38. net.effects = itemConfig and itemConfig.effects or 0
  39. net.opflag = opFlag or getOpflag(itemConfig) or 0
  40. net.suipian = net.suipian or {}
  41. net.equip = net.equip or {}
  42. net.fuwen= net.fuwen or {}
  43. net.suipian[0] = 0
  44. net.equip[0] = 0
  45. net.fuwen[0] = 0
  46. if not itemConfig then return end
  47. makeItemSuipian(net, itemConfig)
  48. makeItemFuwen(net, itemID, itemConfig, itemGrid, itemIndex)
  49. makeItemEquip(net, itemConfig, itemGrid, itemIndex, shuijingAttrID, equipQuality, gemBonus)
  50. end
  51. function makeFuwenSkill(net, skillID)
  52. local skillConfig = FuwenExcel.skill[skillID]
  53. net.skillID = skillID
  54. net.skillIcon = skillConfig.icon
  55. net.skillName = skillConfig.name
  56. net.skillDesc = skillConfig.desc
  57. net.lv = skillConfig.lv
  58. net.isRare = skillConfig.rare or 0
  59. net.isOnlyBinshu = 0
  60. if skillConfig.isBingshuSkill == 1 and skillConfig.isFuwenSkill == 0 then
  61. net.isOnlyBinshu = 1
  62. end
  63. end
  64. function makeItemFuwen(net, itemID, itemConfig, fuwenGrid, fuwenIndex)
  65. if itemConfig.mainType ~= ItemDefine.MAINTYPE_FUWEN then
  66. return
  67. end
  68. local netTemp = nil
  69. if net.fuwen then
  70. net.fuwen[0] = 1
  71. net.fuwen[1] = net.fuwen[1] or {}
  72. netTemp = net.fuwen[1]
  73. else
  74. netTemp = net
  75. end
  76. netTemp.id = itemID
  77. netTemp.index = fuwenIndex or 0
  78. netTemp.fenjieGet = itemConfig.fenjieJinghua
  79. netTemp.refine = 0
  80. netTemp.attrs = netTemp.attrs or {}
  81. netTemp.attrs[0] = 0
  82. netTemp.skills = netTemp.skills or {}
  83. netTemp.skills[0] = 0
  84. netTemp.zhandouli = 0
  85. if fuwenGrid ~= nil then
  86. netTemp.refine = fuwenGrid.refine or 0
  87. local zhandouli = 0
  88. for zz = 1, #fuwenGrid.attr do
  89. local key = fuwenGrid.attr[zz][1]
  90. local value = fuwenGrid.attr[zz][2]
  91. netTemp.attrs[zz] = netTemp.attrs[zz] or {}
  92. netTemp.attrs[zz].key = key
  93. netTemp.attrs[zz].value = value
  94. zhandouli = zhandouli + RoleAttr.getPointByKey(key) * value
  95. end
  96. netTemp.attrs[0] = #fuwenGrid.attr
  97. if fuwenGrid.skill == nil then
  98. netTemp.skills[0] = 0
  99. else
  100. for zz = 1,#fuwenGrid.skill do
  101. local skillID = fuwenGrid.skill[zz]
  102. netTemp.skills[zz] = netTemp.skills[zz] or {}
  103. makeFuwenSkill(netTemp.skills[zz], skillID)
  104. end
  105. netTemp.skills[0] = #fuwenGrid.skill
  106. end
  107. netTemp.zhandouli = math.floor(zhandouli)
  108. end
  109. end
  110. function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, equipQuality, gemBonus)
  111. if itemConfig.mainType ~= ItemDefine.MAINTYPE_EQUIP then
  112. return
  113. end
  114. net.equip[0] = 1
  115. net.equip[1] = net.equip[1] or {}
  116. net.equip[1].index = equipIndex or 0
  117. net.equip[1].level = itemConfig.level
  118. net.equip[1].exp = itemConfig.shenqiExp or 0
  119. net.equip[1].star = itemConfig.star or 0
  120. net.equip[1].uuid = equipGrid and equipGrid.uuid or ""
  121. net.equip[1].putUuid = equipGrid and equipGrid.putUuid or ""
  122. net.equip[1].args = net.equip[1].args or {}
  123. net.equip[1].args[0] = 0
  124. local maxQuality = EquipLogic.getEquipMaxQuality(itemConfig)
  125. net.rare = equipGrid and equipGrid.quality or equipQuality or maxQuality
  126. -- 装备基础属性
  127. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then
  128. -- 水晶属性
  129. net.equip[1].attr = net.equip[1].attr or {}
  130. net.equip[1].attr[0] = 0
  131. net.equip[1].args[0] = 1
  132. local upcf = EquipExcel.shuijingUpNeed[net.id]
  133. net.equip[1].args[1] = (not upcf or upcf.nextID < 1) and 1 or 0 -- 是否满级
  134. if shuijingAttrID then
  135. local shuijingConfig = EquipExcel.shuijingAttr[shuijingAttrID]
  136. local shuijingAttrTB = shuijingConfig.attr
  137. net.equip[1].attr[0] = #shuijingAttrTB
  138. for i=1, net.equip[1].attr[0] do
  139. net.equip[1].attr[i] = net.equip[1].attr[i] or {}
  140. net.equip[1].attr[i].key = shuijingAttrTB[i][1]
  141. net.equip[1].attr[i].value = shuijingAttrTB[i][2]
  142. end
  143. end
  144. else
  145. local baseRate = EquipLogic.getEquipBaseRate(net.rare)
  146. net.score = math.floor(net.score * baseRate)
  147. -- 基础属性
  148. net.equip[1].baseAttr = {}
  149. net.equip[1].baseAttr[0] = #itemConfig.base
  150. --宝石
  151. net.equip[1].gemBaseAttr[0] = 0
  152. if gemBonus then
  153. net.equip[1].gemBaseAttr[0] = #itemConfig.base
  154. end
  155. for i=1, net.equip[1].baseAttr[0] do
  156. net.equip[1].baseAttr[i] = net.equip[1].baseAttr[i] or {}
  157. net.equip[1].baseAttr[i].key = itemConfig.base[i][1]
  158. net.equip[1].baseAttr[i].value = math.floor(itemConfig.base[i][2] * baseRate)
  159. if gemBonus then
  160. net.equip[1].gemBaseAttr[i].key = itemConfig.base[i][1]
  161. net.equip[1].gemBaseAttr[i].value = math.floor(itemConfig.base[i][2] * baseRate * gemBonus.base)
  162. end
  163. end
  164. -- 随机属性
  165. local attrLen = 0
  166. net.equip[1].tzAttr = net.equip[1].tzAttr or {}
  167. if equipGrid then
  168. EquipLogic.checkAttr(equipGrid)
  169. -- for key, value in pairs(equipGrid.attr) do
  170. -- attrLen = attrLen + 1
  171. -- net.equip[1].tzAttr[attrLen] = net.equip[1].tzAttr[attrLen] or {}
  172. -- net.equip[1].tzAttr[attrLen].attr.key = key
  173. -- net.equip[1].tzAttr[attrLen].value = math.floor(value * baseRate)
  174. -- end
  175. for idx, v in ipairs(equipGrid.attr) do
  176. net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
  177. net.equip[1].tzAttr[idx].attr.key = v[1]
  178. net.equip[1].tzAttr[idx].attr.value = math.floor(v[2] * baseRate)
  179. net.equip[1].tzAttr[idx].color = v[3] or 1
  180. net.equip[1].tzAttr[0] = idx
  181. end
  182. else
  183. local randomAttr = EquipLogic.getEquipTzAttr(itemConfig)
  184. if randomAttr then
  185. -- for _, attr in pairs(randomAttr) do
  186. -- attrLen = attrLen + 1
  187. -- net.equip[1].tzAttr[attrLen] = net.equip[1].tzAttr[attrLen] or {}
  188. -- net.equip[1].tzAttr[attrLen].key = attr[1]
  189. -- net.equip[1].tzAttr[attrLen].value = attr[2]
  190. -- end
  191. for idx, v in ipairs(randomAttr) do
  192. net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
  193. net.equip[1].tzAttr[idx].attr.key = v[1]
  194. net.equip[1].tzAttr[idx].attr.value = v[2]
  195. net.equip[1].tzAttr[idx].color = v[3] or 1
  196. net.equip[1].tzAttr[0] = idx
  197. end
  198. end
  199. -- net.equip[1].tzAttr[0] = attrLen
  200. end
  201. -- net.equip[1].tzAttr[0] = attrLen
  202. end
  203. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_SHENQI then
  204. local shenqiUpNeedConfig = EquipExcel.shenqiUpNeed[net.id]
  205. local nextID = shenqiUpNeedConfig and shenqiUpNeedConfig.nextID
  206. net.equip[1].args = net.equip[1].args or {}
  207. net.equip[1].args[0] = 1
  208. net.equip[1].args[1] = (not nextID or nextID < 1) and 1 or 0
  209. end
  210. -- 装备套装属性
  211. net.equip[1].suit = net.equip[1].suit or {}
  212. net.equip[1].suit[0] = 0
  213. if itemConfig.suitIm then
  214. net.equip[1].suit = net.equip[1].suit or {}
  215. net.equip[1].suit[0] = 1
  216. net.equip[1].suit[1] = net.equip[1].suit[1] or {}
  217. net.equip[1].suit[1].attr = net.equip[1].suit[1].attr or {}
  218. net.equip[1].suit[1].attr[0] = #itemConfig.suitIm
  219. net.equip[1].suit[1].gemAttr[0] = 0
  220. if gemBonus then
  221. net.equip[1].suit[1].gemAttr[0] = #itemConfig.suitIm
  222. end
  223. for i=1,net.equip[1].suit[1].attr[0] do
  224. net.equip[1].suit[1].attr[i] = net.equip[1].suit[1].attr[i] or {}
  225. net.equip[1].suit[1].attr[i].key = itemConfig.suitIm[i][1]
  226. net.equip[1].suit[1].attr[i].value = itemConfig.suitIm[i][2]
  227. --宝石
  228. if gemBonus and gemBonus[i+1] then
  229. net.equip[1].suit[1].gemAttr[i] = net.equip[1].suit[1].gemAttr[i] or {}
  230. net.equip[1].suit[1].gemAttr[i].key = itemConfig.suitIm[i][1]
  231. --这里i+1的原因是,装备套装属性配置suitIm中, idx为1的value是2件套加成, idx为2的是3件套加成,以此类推
  232. net.equip[1].suit[1].gemAttr[i].value = gemBonus[i+1] * 100 --转成百分比发给客户端
  233. end
  234. end
  235. net.equip[1].suit[1].id = itemConfig.suit
  236. net.equip[1].suit[1].name = itemConfig.suitName
  237. net.equip[1].suit[1].num = itemConfig.suitNum
  238. end
  239. -- 装备职业专属属性
  240. net.equip[1].job = itemConfig.job
  241. net.equip[1].jobAttr = net.equip[1].jobAttr or {}
  242. net.equip[1].jobAttr[0] = #itemConfig.jobAttr
  243. for i = 1, net.equip[1].jobAttr[0] do
  244. net.equip[1].jobAttr[i] = net.equip[1].jobAttr[i] or {}
  245. net.equip[1].jobAttr[i].key = itemConfig.jobAttr[i][1]
  246. net.equip[1].jobAttr[i].value = itemConfig.jobAttr[i][2]
  247. end
  248. -- 装备阵营专属属性
  249. net.equip[1].camp = itemConfig.camp
  250. net.equip[1].campAttr = net.equip[1].campAttr or {}
  251. net.equip[1].campAttr[0] = #itemConfig.campAttr
  252. for i = 1, net.equip[1].campAttr[0] do
  253. net.equip[1].campAttr[i] = net.equip[1].campAttr[i] or {}
  254. net.equip[1].campAttr[i].key = itemConfig.campAttr[i][1]
  255. net.equip[1].campAttr[i].value = itemConfig.campAttr[i][2]
  256. end
  257. end
  258. -- 封装碎片信息 Suipian
  259. function makeItemSuipian(net, itemConfig)
  260. if itemConfig.mainType ~= ItemDefine.MAINTYPE_ITEM then
  261. return
  262. end
  263. if itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN and
  264. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN and
  265. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM and
  266. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_RELIC then
  267. return
  268. end
  269. net.suipian[0] = 1
  270. net.suipian[1] = net.suipian[1] or {}
  271. net.suipian[1].fullcnt = itemConfig.fullCnt
  272. net.suipian[1].get = itemConfig.get[1] or 0
  273. if itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN or itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN then
  274. net.suipian[1].camp = itemConfig.cond[1] or 0
  275. net.suipian[1].star = itemConfig.cond[2] or 0
  276. local heroID = itemConfig.get[3]
  277. local heroConfig = HeroExcel.hero[heroID]
  278. net.suipian[1].grade = heroConfig and heroConfig.grade or 0
  279. if itemConfig.get[1] == SuipianLogic.SUMMON_TYPE_TARGET then
  280. local dropType = itemConfig.get[2]
  281. if dropType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  282. local heroID = itemConfig.get[3]
  283. local heroConfig = HeroExcel.hero[heroID]
  284. if heroConfig then
  285. net.suipian[1].camp = heroConfig.camp
  286. net.suipian[1].star = heroConfig.star
  287. net.icon = heroConfig.head
  288. end
  289. end
  290. end
  291. elseif itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM or itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_RELIC then
  292. net.suipian[1].camp = 0
  293. net.suipian[1].star = 0
  294. net.suipian[1].grade = itemConfig.rare or 0
  295. end
  296. end
  297. --------------------------------------------- 可操作 -------------------------------------------------------
  298. -- 可操作行为
  299. function getOpflagAtBag(id)
  300. local itemConfig = ItemDefine.getConfig(id)
  301. if not itemConfig then return flag end
  302. if itemConfig then
  303. itemConfig.id = id
  304. end
  305. local flag = 0
  306. -- 使用道具
  307. if canUse(itemConfig) then
  308. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE)
  309. end
  310. -- 使用箱子
  311. if canUseBox(itemConfig) then
  312. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BOX)
  313. end
  314. -- 批量使用
  315. if canUseBatch(itemConfig) then
  316. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BATCH)
  317. end
  318. -- 详情
  319. if canDetail(itemConfig) then
  320. flag = Util.setBit(flag, ItemDefine.ITEM_OP_DETAIL)
  321. end
  322. -- 是否可出售
  323. if canSell(itemConfig) then
  324. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SELL)
  325. end
  326. -- 是否用来源
  327. if canSource(itemConfig) then
  328. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  329. end
  330. -- 是否可以合成
  331. if canHeCheng(itemConfig) then
  332. flag = Util.setBit(flag, ItemDefine.ITEM_OP_HECHENG)
  333. end
  334. -- 能否穿戴
  335. if canEquip(itemConfig) then
  336. flag = Util.setBit(flag, ItemDefine.ITEM_OP_EQUIP)
  337. end
  338. -- 能否重铸
  339. if canCZhu(itemConfig) then
  340. flag = Util.setBit(flag, ItemDefine.ITEM_OP_CZHU)
  341. end
  342. -- 能否分解
  343. if canFJie(itemConfig) then
  344. flag = Util.setBit(flag, ItemDefine.ITEM_OP_FJIE)
  345. end
  346. return flag
  347. end
  348. function getOpflag(itemConfig)
  349. local flag = 0
  350. if not itemConfig then return flag end
  351. -- 预览
  352. if canYulan(itemConfig) then
  353. flag = Util.setBit(flag, ItemDefine.ITEM_OP_YULAN)
  354. end
  355. -- 是否用来源
  356. if canSource(itemConfig) then
  357. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  358. end
  359. return flag
  360. end
  361. -- 可否使用
  362. function canUse(itemConfig)
  363. if not itemConfig then return end
  364. if not itemConfig.panelID then return end
  365. return itemConfig.panelID > 0
  366. end
  367. -- 可否使用
  368. function canUseBox(itemConfig)
  369. if not itemConfig then return end
  370. if not itemConfig.cmd then return end
  371. local cmdstr = itemConfig.cmd[1]
  372. if not cmdstr then return end
  373. if cmdstr == "box" then
  374. return true
  375. end
  376. end
  377. -- 是否可出售
  378. function canSell(itemConfig)
  379. if not itemConfig then return end
  380. if not itemConfig.price then return end
  381. return #itemConfig.price > 0
  382. end
  383. -- 是否可出售
  384. function canSource(itemConfig)
  385. if not itemConfig then return end
  386. if not itemConfig.getway then return end
  387. return #itemConfig.getway > 0
  388. end
  389. -- 可否批量使用
  390. function canUseBatch(itemConfig)
  391. if not itemConfig then return end
  392. if not itemConfig.cmd then return end
  393. local cmdstr = itemConfig.cmd[1]
  394. if not cmdstr then return end
  395. if cmdstr == "box" or "UseSkinItem" == cmdstr then
  396. return
  397. end
  398. return true
  399. end
  400. -- 可否预览
  401. function canYulan(itemConfig)
  402. if not itemConfig then return end
  403. local cmdStr = itemConfig.cmd and itemConfig.cmd[1]
  404. if cmdStr and cmdStr == "box" then
  405. return true
  406. end
  407. --[[local getWay = itemConfig.get and itemConfig.get[1]
  408. if getWay == SuipianLogic.SUMMON_TYPE_DROP or
  409. getWay == SuipianLogic.SUMMON_TYPE_HERO_SP or
  410. getWay == SuipianLogic.SUMMON_TYPE_SHENQI_SP then
  411. local suipianType = itemConfig.get[2]
  412. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO or
  413. suipianType == SuipianLogic.SUMMON_SUBTYPE_EQUIP then
  414. return true
  415. end
  416. end]]
  417. end
  418. -- 可否查看英雄详情
  419. function canDetail(itemConfig)
  420. local getWay = itemConfig.get and itemConfig.get[1]
  421. if getWay == SuipianLogic.SUMMON_TYPE_TARGET then
  422. local suipianType = itemConfig.get[2]
  423. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  424. local heroID = itemConfig.get[3]
  425. if HeroExcel.hero[heroID] then
  426. return true
  427. end
  428. end
  429. if suipianType == SuipianLogic.SUMMON_SUBTYPE_SKIN then
  430. local skinID = itemConfig.get[3]
  431. if SkinExcel.skin[skinID] then
  432. return true
  433. end
  434. end
  435. end
  436. end
  437. -- 可否合成
  438. function canHeCheng(itemConfig)
  439. local getWay = itemConfig.get and itemConfig.get[1]
  440. if getWay == SuipianLogic.SUMMON_TYPE_TARGET or getWay == SuipianLogic.SUMMON_TYPE_DROP then
  441. local suipianType = itemConfig.get[2]
  442. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  443. return true
  444. end
  445. if suipianType == SuipianLogic.SUMMON_SUBTYPE_SKIN then
  446. return true
  447. end
  448. if suipianType == SuipianLogic.SUMMON_SUBTYPE_TALISAM then
  449. return true
  450. end
  451. if suipianType == SuipianLogic.SUMMON_SUBTYPE_RELIC then
  452. return true
  453. end
  454. end
  455. if ItemDefine.isFuwen(itemConfig.id) then
  456. return true
  457. end
  458. end
  459. -- 可否穿戴
  460. function canEquip(itemConfig)
  461. if ItemDefine.isEquip(itemConfig.id) then
  462. return true
  463. end
  464. if ItemDefine.isFuwen(itemConfig.id) then
  465. return true
  466. end
  467. end
  468. -- 可否重铸
  469. function canCZhu(itemConfig)
  470. if ItemDefine.isFuwen(itemConfig.id) then
  471. return true
  472. end
  473. end
  474. -- 可否重铸
  475. function canFJie(itemConfig)
  476. if ItemDefine.isFuwen(itemConfig.id) then
  477. return true
  478. end
  479. end