Grid.lua 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  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, sourceType)
  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. net.sourceType = sourceType or 0
  47. if not itemConfig then return end
  48. makeItemSuipian(net, itemConfig)
  49. makeItemFuwen(net, itemID, itemConfig, itemGrid, itemIndex)
  50. makeItemEquip(net, itemConfig, itemGrid, itemIndex, shuijingAttrID, equipQuality, gemBonus)
  51. end
  52. function makeFuwenSkill(net, skillID, skillLockList)
  53. local skillConfig = FuwenExcel.skill[skillID]
  54. if not skillConfig then
  55. -- 如果技能配置不存在,设置默认值
  56. net.skillID = skillID or 0
  57. net.skillIcon = 0
  58. net.skillName = ""
  59. net.skillDesc = ""
  60. net.lv = 0
  61. net.isRare = 0
  62. net.isOnlyBinshu = 0
  63. net.isLock = 0
  64. return
  65. end
  66. net.skillID = skillID
  67. net.skillIcon = skillConfig.icon
  68. net.skillName = skillConfig.name
  69. net.skillDesc = skillConfig.desc
  70. net.lv = skillConfig.lv
  71. net.isRare = skillConfig.rare or 0
  72. net.isOnlyBinshu = 0
  73. if skillConfig.isBingshuSkill == 1 and skillConfig.isFuwenSkill == 0 then
  74. net.isOnlyBinshu = 1
  75. end
  76. net.isLock = 0
  77. if skillLockList and skillLockList[skillID] then
  78. net.isLock = 1
  79. end
  80. end
  81. function makeItemFuwen(net, itemID, itemConfig, fuwenGrid, fuwenIndex)
  82. if itemConfig.mainType ~= ItemDefine.MAINTYPE_FUWEN then
  83. return
  84. end
  85. local netTemp = nil
  86. if net.fuwen then
  87. net.fuwen[0] = 1
  88. net.fuwen[1] = net.fuwen[1] or {}
  89. netTemp = net.fuwen[1]
  90. else
  91. netTemp = net
  92. end
  93. netTemp.id = itemID
  94. netTemp.index = fuwenIndex or 0
  95. netTemp.fenjieGet = itemConfig.fenjieJinghua
  96. netTemp.refine = 0
  97. netTemp.attrs = netTemp.attrs or {}
  98. netTemp.attrs[0] = 0
  99. netTemp.skills = netTemp.skills or {}
  100. netTemp.skills[0] = 0
  101. netTemp.zhandouli = 0
  102. if fuwenGrid ~= nil then
  103. netTemp.refine = fuwenGrid.refine or 0
  104. local zhandouli = 0
  105. for zz = 1, #fuwenGrid.attr do
  106. local key = fuwenGrid.attr[zz][1]
  107. local value = fuwenGrid.attr[zz][2]
  108. local isLock = fuwenGrid.attr[zz][3]
  109. netTemp.attrs[zz] = netTemp.attrs[zz] or {}
  110. -- netTemp.attrs[zz].key = key
  111. -- netTemp.attrs[zz].value = value
  112. netTemp.attrs[zz].attrArray = netTemp.attrs[zz].attrArray or {key = 0, value = 0}
  113. netTemp.attrs[zz].attrArray.key = key
  114. netTemp.attrs[zz].attrArray.value = value
  115. netTemp.attrs[zz].isLock = isLock or 0
  116. zhandouli = zhandouli + RoleAttr.getPointByKey(key) * value
  117. end
  118. netTemp.attrs[0] = #fuwenGrid.attr
  119. if fuwenGrid.skill == nil then
  120. netTemp.skills[0] = 0
  121. else
  122. local skillLockList = fuwenGrid.skillLockList
  123. for zz = 1,#fuwenGrid.skill do
  124. local skillID = fuwenGrid.skill[zz]
  125. netTemp.skills[zz] = netTemp.skills[zz] or {}
  126. makeFuwenSkill(netTemp.skills[zz], skillID, skillLockList)
  127. end
  128. netTemp.skills[0] = #fuwenGrid.skill
  129. end
  130. netTemp.zhandouli = math.floor(zhandouli)
  131. end
  132. end
  133. function makeItemEquip(net, itemConfig, equipGrid, equipIndex, shuijingAttrID, equipQuality, gemBonus)
  134. if itemConfig.mainType ~= ItemDefine.MAINTYPE_EQUIP then
  135. return
  136. end
  137. net.equip[0] = 1
  138. net.equip[1] = net.equip[1] or {}
  139. net.equip[1].index = equipIndex or 0
  140. net.equip[1].level = itemConfig.level
  141. net.equip[1].exp = itemConfig.shenqiExp or 0
  142. net.equip[1].star = itemConfig.star or 0
  143. net.equip[1].uuid = equipGrid and equipGrid.uuid or ""
  144. net.equip[1].putUuid = equipGrid and equipGrid.putUuid or ""
  145. net.equip[1].args = net.equip[1].args or {}
  146. net.equip[1].args[0] = 0
  147. net.equip[1].suitID = itemConfig.suit or 0
  148. local maxQuality = EquipLogic.getEquipMaxQuality(itemConfig)
  149. net.rare = equipGrid and equipGrid.quality or equipQuality or maxQuality
  150. local baseAttrMulMin = itemConfig.baserandom[1] or 1
  151. local baseAttrMulMax = itemConfig.baserandom[2] or 1
  152. -- 装备基础属性
  153. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_SHUIJIN then
  154. -- 水晶属性
  155. net.equip[1].attr = net.equip[1].attr or {}
  156. net.equip[1].attr[0] = 0
  157. net.equip[1].args[0] = 1
  158. local upcf = EquipExcel.shuijingUpNeed[net.id]
  159. net.equip[1].args[1] = (not upcf or upcf.nextID < 1) and 1 or 0 -- 是否满级
  160. if shuijingAttrID then
  161. local shuijingConfig = EquipExcel.shuijingAttr[shuijingAttrID]
  162. local shuijingAttrTB = shuijingConfig.attr
  163. net.equip[1].attr[0] = #shuijingAttrTB
  164. for i=1, net.equip[1].attr[0] do
  165. net.equip[1].attr[i] = net.equip[1].attr[i] or {}
  166. net.equip[1].attr[i].key = shuijingAttrTB[i][1]
  167. net.equip[1].attr[i].value = shuijingAttrTB[i][2]
  168. end
  169. end
  170. else
  171. local baseRate = EquipLogic.getEquipBaseRate(net.rare)
  172. net.score = math.floor(net.score * baseRate)
  173. local succinctRate = baseRate
  174. local baseAttrInfo = itemConfig.base
  175. if equipGrid and equipGrid.baseAttr then
  176. baseAttrInfo = equipGrid.baseAttr
  177. end
  178. local baseAttrRandVal = 1
  179. if equipGrid and equipGrid.baseRandVal then
  180. baseAttrRandVal = equipGrid.baseRandVal
  181. end
  182. net.equip[1].effects[0] = 0
  183. net.equip[1].heroExclusive = ""
  184. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
  185. baseRate = 1
  186. --装备特效
  187. if equipGrid then
  188. local effectLen = 0
  189. local msgEffects = net.equip[1].effects
  190. for effectId in pairs(equipGrid.effectList or {}) do
  191. effectLen = effectLen + 1
  192. local effectCfg = EquipExcel.texiao[effectId]
  193. msgEffects[effectLen].name = effectCfg.name
  194. msgEffects[effectLen].color = effectCfg.quality
  195. msgEffects[effectLen].attr.key = effectCfg.attrs[1][1]
  196. msgEffects[effectLen].attr.value = effectCfg.attrs[1][2]
  197. end
  198. msgEffects[0] = effectLen
  199. -- 英雄专属
  200. if equipGrid.exclusiveHeroId then
  201. local heroCfg = HeroExcel.hero[equipGrid.exclusiveHeroId]
  202. net.equip[1].heroExclusive = heroCfg.name
  203. end
  204. end
  205. end
  206. --宝石
  207. net.equip[1].gemBaseAttr[0] = 0
  208. if gemBonus then
  209. net.equip[1].gemBaseAttr[0] = #baseAttrInfo
  210. end
  211. -- 基础属性
  212. net.equip[1].baseAttr = {}
  213. net.equip[1].baseAttr[0] = #baseAttrInfo
  214. for i=1, net.equip[1].baseAttr[0] do
  215. net.equip[1].baseAttr[i] = net.equip[1].baseAttr[i] or {}
  216. net.equip[1].baseAttr[i].key = baseAttrInfo[i][1]
  217. net.equip[1].baseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * baseAttrRandVal)
  218. -- 基础属性范围
  219. net.equip[1].baseAttrMin[i] = net.equip[1].baseAttrMin[i] or {}
  220. net.equip[1].baseAttrMin[i].key = baseAttrInfo[i][1]
  221. net.equip[1].baseAttrMin[i].value = math.floor(baseAttrInfo[i][2] * baseRate * baseAttrMulMin)
  222. net.equip[1].baseAttrMax[i] = net.equip[1].baseAttrMax[i] or {}
  223. net.equip[1].baseAttrMax[i].key = baseAttrInfo[i][1]
  224. net.equip[1].baseAttrMax[i].value = math.floor(baseAttrInfo[i][2] * baseRate * baseAttrMulMax)
  225. if gemBonus then
  226. net.equip[1].gemBaseAttr[i].key = baseAttrInfo[i][1]
  227. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
  228. net.equip[1].gemBaseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * gemBonus.sp_base)
  229. else
  230. net.equip[1].gemBaseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * gemBonus.base)
  231. end
  232. end
  233. end
  234. -- 洗练属性
  235. local attrLen = 0
  236. net.equip[1].tzAttr = net.equip[1].tzAttr or {}
  237. if equipGrid then
  238. EquipLogic.checkAttr(equipGrid)
  239. -- for key, value in pairs(equipGrid.attr) do
  240. -- attrLen = attrLen + 1
  241. -- net.equip[1].tzAttr[attrLen] = net.equip[1].tzAttr[attrLen] or {}
  242. -- net.equip[1].tzAttr[attrLen].attr.key = key
  243. -- net.equip[1].tzAttr[attrLen].value = math.floor(value * baseRate)
  244. -- end
  245. for idx, v in ipairs(equipGrid.attr) do
  246. net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
  247. net.equip[1].tzAttr[idx].attr.key = v[1]
  248. net.equip[1].tzAttr[idx].attr.value = math.floor(v[2] * succinctRate)
  249. net.equip[1].tzAttr[idx].color = v[3] or 1
  250. net.equip[1].tzAttr[idx].lock = v[4] or 0
  251. net.equip[1].tzAttr[0] = idx
  252. end
  253. else
  254. local randomAttr = EquipLogic.getEquipTzAttr(itemConfig)
  255. if randomAttr then
  256. -- for _, attr in pairs(randomAttr) do
  257. -- attrLen = attrLen + 1
  258. -- net.equip[1].tzAttr[attrLen] = net.equip[1].tzAttr[attrLen] or {}
  259. -- net.equip[1].tzAttr[attrLen].key = attr[1]
  260. -- net.equip[1].tzAttr[attrLen].value = attr[2]
  261. -- end
  262. for idx, v in ipairs(randomAttr) do
  263. attrLen = attrLen + 1
  264. net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
  265. net.equip[1].tzAttr[idx].attr.key = v[1]
  266. net.equip[1].tzAttr[idx].attr.value = v[2]
  267. net.equip[1].tzAttr[idx].color = v[3] or 1
  268. net.equip[1].tzAttr[idx].lock = v[4] or 0
  269. -- net.equip[1].tzAttr[0] = idx
  270. end
  271. end
  272. net.equip[1].tzAttr[0] = attrLen
  273. end
  274. -- net.equip[1].tzAttr[0] = attrLen
  275. end
  276. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_SHENQI then
  277. local shenqiUpNeedConfig = EquipExcel.shenqiUpNeed[net.id]
  278. local nextID = shenqiUpNeedConfig and shenqiUpNeedConfig.nextID
  279. net.equip[1].args = net.equip[1].args or {}
  280. net.equip[1].args[0] = 1
  281. net.equip[1].args[1] = (not nextID or nextID < 1) and 1 or 0
  282. end
  283. -- 装备套装属性
  284. net.equip[1].suit = net.equip[1].suit or {}
  285. net.equip[1].suit[0] = 0
  286. if itemConfig.suitIm then
  287. net.equip[1].suit = net.equip[1].suit or {}
  288. net.equip[1].suit[0] = 1
  289. net.equip[1].suit[1] = net.equip[1].suit[1] or {}
  290. net.equip[1].suit[1].attr = net.equip[1].suit[1].attr or {}
  291. net.equip[1].suit[1].attr[0] = #itemConfig.suitIm
  292. net.equip[1].suit[1].gemAttr[0] = 0
  293. if gemBonus then
  294. net.equip[1].suit[1].gemAttr[0] = #itemConfig.suitIm
  295. end
  296. for i=1,net.equip[1].suit[1].attr[0] do
  297. net.equip[1].suit[1].attr[i] = net.equip[1].suit[1].attr[i] or {}
  298. net.equip[1].suit[1].attr[i].key = itemConfig.suitIm[i][1]
  299. net.equip[1].suit[1].attr[i].value = itemConfig.suitIm[i][2]
  300. if gemBonus and (gemBonus[i+1] or gemBonus.sp_suit) then
  301. net.equip[1].suit[1].gemAttr[i] = net.equip[1].suit[1].gemAttr[i] or {}
  302. net.equip[1].suit[1].gemAttr[i].key = itemConfig.suitIm[i][1]
  303. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
  304. net.equip[1].suit[1].gemAttr[i].value = gemBonus.sp_suit * 100
  305. else
  306. --这里i+1的原因是,装备套装属性配置suitIm中, idx为1的value是2件套加成, idx为2的是3件套加成,以此类推
  307. net.equip[1].suit[1].gemAttr[i].value = gemBonus[i+1] * 100 --转成百分比发给客户端
  308. end
  309. end
  310. end
  311. net.equip[1].suit[1].id = itemConfig.suit
  312. net.equip[1].suit[1].name = itemConfig.suitName
  313. net.equip[1].suit[1].num = itemConfig.suitNum
  314. end
  315. -- 装备职业专属属性
  316. net.equip[1].job = itemConfig.job
  317. net.equip[1].jobAttr = net.equip[1].jobAttr or {}
  318. net.equip[1].jobAttr[0] = #itemConfig.jobAttr
  319. for i = 1, net.equip[1].jobAttr[0] do
  320. net.equip[1].jobAttr[i] = net.equip[1].jobAttr[i] or {}
  321. net.equip[1].jobAttr[i].key = itemConfig.jobAttr[i][1]
  322. net.equip[1].jobAttr[i].value = itemConfig.jobAttr[i][2]
  323. end
  324. -- 装备阵营专属属性
  325. net.equip[1].camp = itemConfig.camp
  326. net.equip[1].campAttr = net.equip[1].campAttr or {}
  327. net.equip[1].campAttr[0] = #itemConfig.campAttr
  328. for i = 1, net.equip[1].campAttr[0] do
  329. net.equip[1].campAttr[i] = net.equip[1].campAttr[i] or {}
  330. net.equip[1].campAttr[i].key = itemConfig.campAttr[i][1]
  331. net.equip[1].campAttr[i].value = itemConfig.campAttr[i][2]
  332. end
  333. end
  334. -- 封装碎片信息 Suipian
  335. function makeItemSuipian(net, itemConfig)
  336. if itemConfig.mainType ~= ItemDefine.MAINTYPE_ITEM then
  337. return
  338. end
  339. if itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN and
  340. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN and
  341. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM and
  342. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_RELIC and
  343. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_ELF then
  344. return
  345. end
  346. net.suipian[0] = 1
  347. net.suipian[1] = net.suipian[1] or {}
  348. net.suipian[1].fullcnt = itemConfig.fullCnt
  349. net.suipian[1].get = itemConfig.get[1] or 0
  350. if itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN or itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN then
  351. net.suipian[1].camp = itemConfig.cond[1] or 0
  352. net.suipian[1].star = itemConfig.cond[2] or 0
  353. local heroID = itemConfig.get[3]
  354. local heroConfig = HeroExcel.hero[heroID]
  355. net.suipian[1].grade = heroConfig and heroConfig.grade or 0
  356. if itemConfig.get[1] == SuipianLogic.SUMMON_TYPE_TARGET then
  357. local dropType = itemConfig.get[2]
  358. if dropType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  359. local heroID = itemConfig.get[3]
  360. local heroConfig = HeroExcel.hero[heroID]
  361. if heroConfig then
  362. net.suipian[1].camp = heroConfig.camp
  363. net.suipian[1].star = heroConfig.star
  364. net.icon = heroConfig.head
  365. end
  366. end
  367. end
  368. elseif itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM or
  369. itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_RELIC or
  370. itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_ELF then
  371. net.suipian[1].camp = 0
  372. net.suipian[1].star = 0
  373. net.suipian[1].grade = itemConfig.rare or 0
  374. end
  375. end
  376. --------------------------------------------- 可操作 -------------------------------------------------------
  377. -- 可操作行为
  378. function getOpflagAtBag(id)
  379. local itemConfig = ItemDefine.getConfig(id)
  380. if not itemConfig then return flag end
  381. if itemConfig then
  382. itemConfig.id = id
  383. end
  384. local flag = 0
  385. -- 使用道具
  386. if canUse(itemConfig) then
  387. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE)
  388. end
  389. -- 使用箱子
  390. if canUseBox(itemConfig) then
  391. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BOX)
  392. end
  393. -- 批量使用
  394. if canUseBatch(itemConfig) then
  395. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BATCH)
  396. end
  397. -- 详情
  398. if canDetail(itemConfig) then
  399. flag = Util.setBit(flag, ItemDefine.ITEM_OP_DETAIL)
  400. end
  401. -- 是否可出售
  402. if canSell(itemConfig) then
  403. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SELL)
  404. end
  405. -- 是否用来源
  406. if canSource(itemConfig) then
  407. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  408. end
  409. -- 是否可以合成
  410. if canHeCheng(itemConfig) then
  411. flag = Util.setBit(flag, ItemDefine.ITEM_OP_HECHENG)
  412. end
  413. -- 能否穿戴
  414. if canEquip(itemConfig) then
  415. flag = Util.setBit(flag, ItemDefine.ITEM_OP_EQUIP)
  416. end
  417. -- 能否重铸
  418. if canCZhu(itemConfig) then
  419. flag = Util.setBit(flag, ItemDefine.ITEM_OP_CZHU)
  420. end
  421. -- 能否分解
  422. if canFJie(itemConfig) then
  423. flag = Util.setBit(flag, ItemDefine.ITEM_OP_FJIE)
  424. end
  425. -- 能否兑换
  426. if canDuiHuang(itemConfig) then
  427. flag = Util.setBit(flag, ItemDefine.ITEM_OP_DUIHUAN)
  428. end
  429. return flag
  430. end
  431. function getOpflag(itemConfig)
  432. local flag = 0
  433. if not itemConfig then return flag end
  434. -- 预览
  435. if canYulan(itemConfig) then
  436. flag = Util.setBit(flag, ItemDefine.ITEM_OP_YULAN)
  437. end
  438. -- 是否用来源
  439. if canSource(itemConfig) then
  440. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  441. end
  442. return flag
  443. end
  444. -- 可否使用
  445. function canUse(itemConfig)
  446. if not itemConfig then return end
  447. if not itemConfig.panelID then return end
  448. return itemConfig.panelID > 0
  449. end
  450. -- 可否使用
  451. function canUseBox(itemConfig)
  452. if not itemConfig then return end
  453. if not itemConfig.cmd then return end
  454. local cmdstr = itemConfig.cmd[1]
  455. if not cmdstr then return end
  456. if cmdstr == "box" then
  457. return true
  458. end
  459. end
  460. -- 是否可出售
  461. function canSell(itemConfig)
  462. if not itemConfig then return end
  463. if not itemConfig.price then return end
  464. return #itemConfig.price > 0
  465. end
  466. -- 是否可出售
  467. function canSource(itemConfig)
  468. if not itemConfig then return end
  469. if not itemConfig.getway then return end
  470. return #itemConfig.getway > 0
  471. end
  472. -- 可否批量使用
  473. function canUseBatch(itemConfig)
  474. if not itemConfig then return end
  475. if not itemConfig.cmd then return end
  476. local cmdstr = itemConfig.cmd[1]
  477. if not cmdstr then return end
  478. if cmdstr == "box" or "UseSkinItem" == cmdstr then
  479. return
  480. end
  481. return true
  482. end
  483. -- 可否预览
  484. function canYulan(itemConfig)
  485. if not itemConfig then return end
  486. local cmdStr = itemConfig.cmd and itemConfig.cmd[1]
  487. if cmdStr and cmdStr == "box" then
  488. return true
  489. end
  490. --[[local getWay = itemConfig.get and itemConfig.get[1]
  491. if getWay == SuipianLogic.SUMMON_TYPE_DROP or
  492. getWay == SuipianLogic.SUMMON_TYPE_HERO_SP or
  493. getWay == SuipianLogic.SUMMON_TYPE_SHENQI_SP then
  494. local suipianType = itemConfig.get[2]
  495. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO or
  496. suipianType == SuipianLogic.SUMMON_SUBTYPE_EQUIP then
  497. return true
  498. end
  499. end]]
  500. end
  501. -- 可否查看英雄详情
  502. function canDetail(itemConfig)
  503. local getWay = itemConfig.get and itemConfig.get[1]
  504. if getWay == SuipianLogic.SUMMON_TYPE_TARGET then
  505. local suipianType = itemConfig.get[2]
  506. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  507. local heroID = itemConfig.get[3]
  508. if HeroExcel.hero[heroID] then
  509. return true
  510. end
  511. end
  512. if suipianType == SuipianLogic.SUMMON_SUBTYPE_SKIN then
  513. local skinID = itemConfig.get[3]
  514. if SkinExcel.skin[skinID] then
  515. return true
  516. end
  517. end
  518. end
  519. end
  520. -- 可否合成
  521. function canHeCheng(itemConfig)
  522. local getWay = itemConfig.get and itemConfig.get[1]
  523. if getWay == SuipianLogic.SUMMON_TYPE_TARGET or getWay == SuipianLogic.SUMMON_TYPE_DROP then
  524. local suipianType = itemConfig.get[2]
  525. if true == SuipianLogic.SuipianLogic_CanHeCheng(suipianType) then
  526. return true
  527. end
  528. end
  529. if ItemDefine.isFuwen(itemConfig.id) then
  530. return true
  531. end
  532. end
  533. -- 可否穿戴
  534. function canEquip(itemConfig)
  535. if ItemDefine.isEquip(itemConfig.id) then
  536. return true
  537. end
  538. if ItemDefine.isFuwen(itemConfig.id) then
  539. return true
  540. end
  541. end
  542. -- 可否重铸
  543. function canCZhu(itemConfig)
  544. if ItemDefine.isFuwen(itemConfig.id) then
  545. return true
  546. end
  547. end
  548. -- 可否重铸
  549. function canFJie(itemConfig)
  550. if ItemDefine.isFuwen(itemConfig.id) then
  551. return true
  552. end
  553. end
  554. function canDuiHuang(itemConfig)
  555. local nID = itemConfig.id
  556. local getWay = itemConfig.get and itemConfig.get[1]
  557. if getWay == SuipianLogic.SUMMON_TYPE_TARGET then
  558. local nDuiHuangType = itemConfig.get[2]
  559. if true == SuipianLogic.SuipianLogic_CanDuiHuang(nDuiHuangType) then
  560. return true
  561. end
  562. end
  563. end