Grid.lua 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663
  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, isShowEquipBaseAttrArea)
  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, isShowEquipBaseAttrArea)
  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, isShowEquipBaseAttrArea)
  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][1] or 1
  151. local baseAttrMulMax = itemConfig.baserandom[1][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. -- net.equip[1].baseAttrMin[0] = 0
  215. -- net.equip[1].baseAttrMax[0] = 0
  216. for i=1, net.equip[1].baseAttr[0] do
  217. net.equip[1].baseAttr[i] = net.equip[1].baseAttr[i] or {}
  218. net.equip[1].baseAttr[i].key = baseAttrInfo[i][1]
  219. net.equip[1].baseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * baseAttrRandVal)
  220. -- 基础属性范围
  221. -- if isShowEquipBaseAttrArea then
  222. -- net.equip[1].baseAttrMin[0] = i
  223. -- net.equip[1].baseAttrMin[i].key = baseAttrInfo[i][1]
  224. -- net.equip[1].baseAttrMin[i].value = math.floor(baseAttrInfo[i][2] * baseRate * baseAttrMulMin)
  225. -- net.equip[1].baseAttrMax[0] = i
  226. -- net.equip[1].baseAttrMax[i].key = baseAttrInfo[i][1]
  227. -- net.equip[1].baseAttrMax[i].value = math.floor(baseAttrInfo[i][2] * baseRate * baseAttrMulMax)
  228. -- end
  229. if gemBonus then
  230. net.equip[1].gemBaseAttr[i].key = baseAttrInfo[i][1]
  231. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
  232. net.equip[1].gemBaseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * gemBonus.sp_base)
  233. else
  234. net.equip[1].gemBaseAttr[i].value = math.floor(baseAttrInfo[i][2] * baseRate * gemBonus.base)
  235. end
  236. end
  237. end
  238. -- 洗练属性
  239. local attrLen = 0
  240. net.equip[1].tzAttr = net.equip[1].tzAttr or {}
  241. if equipGrid then
  242. EquipLogic.checkAttr(equipGrid)
  243. -- for key, value in pairs(equipGrid.attr) do
  244. -- attrLen = attrLen + 1
  245. -- net.equip[1].tzAttr[attrLen] = net.equip[1].tzAttr[attrLen] or {}
  246. -- net.equip[1].tzAttr[attrLen].attr.key = key
  247. -- net.equip[1].tzAttr[attrLen].value = math.floor(value * baseRate)
  248. -- end
  249. for idx, v in ipairs(equipGrid.attr) do
  250. net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
  251. net.equip[1].tzAttr[idx].attr.key = v[1]
  252. net.equip[1].tzAttr[idx].attr.value = math.floor(v[2] * succinctRate)
  253. net.equip[1].tzAttr[idx].color = v[3] or 1
  254. net.equip[1].tzAttr[idx].lock = v[4] or 0
  255. net.equip[1].tzAttr[0] = idx
  256. end
  257. else
  258. local randomAttr = EquipLogic.getEquipTzAttr(itemConfig)
  259. if randomAttr then
  260. -- for _, attr in pairs(randomAttr) do
  261. -- attrLen = attrLen + 1
  262. -- net.equip[1].tzAttr[attrLen] = net.equip[1].tzAttr[attrLen] or {}
  263. -- net.equip[1].tzAttr[attrLen].key = attr[1]
  264. -- net.equip[1].tzAttr[attrLen].value = attr[2]
  265. -- end
  266. for idx, v in ipairs(randomAttr) do
  267. attrLen = attrLen + 1
  268. net.equip[1].tzAttr[idx] = net.equip[1].tzAttr[idx] or {}
  269. net.equip[1].tzAttr[idx].attr.key = v[1]
  270. net.equip[1].tzAttr[idx].attr.value = v[2]
  271. net.equip[1].tzAttr[idx].color = v[3] or 1
  272. net.equip[1].tzAttr[idx].lock = v[4] or 0
  273. -- net.equip[1].tzAttr[0] = idx
  274. end
  275. end
  276. net.equip[1].tzAttr[0] = attrLen
  277. end
  278. -- net.equip[1].tzAttr[0] = attrLen
  279. end
  280. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_SHENQI then
  281. local shenqiUpNeedConfig = EquipExcel.shenqiUpNeed[net.id]
  282. local nextID = shenqiUpNeedConfig and shenqiUpNeedConfig.nextID
  283. net.equip[1].args = net.equip[1].args or {}
  284. net.equip[1].args[0] = 1
  285. net.equip[1].args[1] = (not nextID or nextID < 1) and 1 or 0
  286. end
  287. -- 装备套装属性
  288. net.equip[1].suit = net.equip[1].suit or {}
  289. net.equip[1].suit[0] = 0
  290. if itemConfig.suitIm then
  291. net.equip[1].suit = net.equip[1].suit or {}
  292. net.equip[1].suit[0] = 1
  293. net.equip[1].suit[1] = net.equip[1].suit[1] or {}
  294. net.equip[1].suit[1].attr = net.equip[1].suit[1].attr or {}
  295. net.equip[1].suit[1].attr[0] = #itemConfig.suitIm
  296. net.equip[1].suit[1].gemAttr[0] = 0
  297. if gemBonus then
  298. net.equip[1].suit[1].gemAttr[0] = #itemConfig.suitIm
  299. end
  300. for i=1,net.equip[1].suit[1].attr[0] do
  301. net.equip[1].suit[1].attr[i] = net.equip[1].suit[1].attr[i] or {}
  302. net.equip[1].suit[1].attr[i].key = itemConfig.suitIm[i][1]
  303. net.equip[1].suit[1].attr[i].value = itemConfig.suitIm[i][2]
  304. if gemBonus and (gemBonus[i+1] or gemBonus.sp_suit) then
  305. net.equip[1].suit[1].gemAttr[i] = net.equip[1].suit[1].gemAttr[i] or {}
  306. net.equip[1].suit[1].gemAttr[i].key = itemConfig.suitIm[i][1]
  307. if itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_RING or itemConfig.subType == ItemDefine.EQUIP_SUBTYPE_AMULET then
  308. net.equip[1].suit[1].gemAttr[i].value = gemBonus.sp_suit * 100
  309. else
  310. --这里i+1的原因是,装备套装属性配置suitIm中, idx为1的value是2件套加成, idx为2的是3件套加成,以此类推
  311. net.equip[1].suit[1].gemAttr[i].value = gemBonus[i+1] * 100 --转成百分比发给客户端
  312. end
  313. end
  314. end
  315. net.equip[1].suit[1].id = itemConfig.suit
  316. net.equip[1].suit[1].name = itemConfig.suitName
  317. net.equip[1].suit[1].num = itemConfig.suitNum
  318. end
  319. -- 装备职业专属属性
  320. net.equip[1].job = itemConfig.job
  321. net.equip[1].jobAttr = net.equip[1].jobAttr or {}
  322. net.equip[1].jobAttr[0] = #itemConfig.jobAttr
  323. for i = 1, net.equip[1].jobAttr[0] do
  324. net.equip[1].jobAttr[i] = net.equip[1].jobAttr[i] or {}
  325. net.equip[1].jobAttr[i].key = itemConfig.jobAttr[i][1]
  326. net.equip[1].jobAttr[i].value = itemConfig.jobAttr[i][2]
  327. end
  328. -- 装备阵营专属属性
  329. net.equip[1].camp = itemConfig.camp
  330. net.equip[1].campAttr = net.equip[1].campAttr or {}
  331. net.equip[1].campAttr[0] = #itemConfig.campAttr
  332. for i = 1, net.equip[1].campAttr[0] do
  333. net.equip[1].campAttr[i] = net.equip[1].campAttr[i] or {}
  334. net.equip[1].campAttr[i].key = itemConfig.campAttr[i][1]
  335. net.equip[1].campAttr[i].value = itemConfig.campAttr[i][2]
  336. end
  337. end
  338. -- 封装碎片信息 Suipian
  339. function makeItemSuipian(net, itemConfig)
  340. if itemConfig.mainType ~= ItemDefine.MAINTYPE_ITEM then
  341. return
  342. end
  343. if itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN and
  344. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN and
  345. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM and
  346. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_RELIC and
  347. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_ELF then
  348. return
  349. end
  350. net.suipian[0] = 1
  351. net.suipian[1] = net.suipian[1] or {}
  352. net.suipian[1].fullcnt = itemConfig.fullCnt
  353. net.suipian[1].get = itemConfig.get[1] or 0
  354. if itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN or itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN then
  355. net.suipian[1].camp = itemConfig.cond[1] or 0
  356. net.suipian[1].star = itemConfig.cond[2] or 0
  357. local heroID = itemConfig.get[3]
  358. local heroConfig = HeroExcel.hero[heroID]
  359. net.suipian[1].grade = heroConfig and heroConfig.grade or 0
  360. if itemConfig.get[1] == SuipianLogic.SUMMON_TYPE_TARGET then
  361. local dropType = itemConfig.get[2]
  362. if dropType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  363. local heroID = itemConfig.get[3]
  364. local heroConfig = HeroExcel.hero[heroID]
  365. if heroConfig then
  366. net.suipian[1].camp = heroConfig.camp
  367. net.suipian[1].star = heroConfig.star
  368. net.icon = heroConfig.head
  369. end
  370. end
  371. end
  372. elseif itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM or
  373. itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_RELIC or
  374. itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_ELF then
  375. net.suipian[1].camp = 0
  376. net.suipian[1].star = 0
  377. net.suipian[1].grade = itemConfig.rare or 0
  378. end
  379. end
  380. --------------------------------------------- 可操作 -------------------------------------------------------
  381. -- 可操作行为
  382. function getOpflagAtBag(id)
  383. local itemConfig = ItemDefine.getConfig(id)
  384. if not itemConfig then return flag end
  385. if itemConfig then
  386. itemConfig.id = id
  387. end
  388. local flag = 0
  389. -- 使用道具
  390. if canUse(itemConfig) then
  391. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE)
  392. end
  393. -- 使用箱子
  394. if canUseBox(itemConfig) then
  395. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BOX)
  396. end
  397. -- 批量使用
  398. if canUseBatch(itemConfig) then
  399. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BATCH)
  400. end
  401. -- 详情
  402. if canDetail(itemConfig) then
  403. flag = Util.setBit(flag, ItemDefine.ITEM_OP_DETAIL)
  404. end
  405. -- 是否可出售
  406. if canSell(itemConfig) then
  407. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SELL)
  408. end
  409. -- 是否用来源
  410. if canSource(itemConfig) then
  411. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  412. end
  413. -- 是否可以合成
  414. if canHeCheng(itemConfig) then
  415. flag = Util.setBit(flag, ItemDefine.ITEM_OP_HECHENG)
  416. end
  417. -- 能否穿戴
  418. if canEquip(itemConfig) then
  419. flag = Util.setBit(flag, ItemDefine.ITEM_OP_EQUIP)
  420. end
  421. -- 能否重铸
  422. if canCZhu(itemConfig) then
  423. flag = Util.setBit(flag, ItemDefine.ITEM_OP_CZHU)
  424. end
  425. -- 能否分解
  426. if canFJie(itemConfig) then
  427. flag = Util.setBit(flag, ItemDefine.ITEM_OP_FJIE)
  428. end
  429. -- 能否兑换
  430. if canDuiHuang(itemConfig) then
  431. flag = Util.setBit(flag, ItemDefine.ITEM_OP_DUIHUAN)
  432. end
  433. return flag
  434. end
  435. function getOpflag(itemConfig)
  436. local flag = 0
  437. if not itemConfig then return flag end
  438. -- 预览
  439. if canYulan(itemConfig) then
  440. flag = Util.setBit(flag, ItemDefine.ITEM_OP_YULAN)
  441. end
  442. -- 是否用来源
  443. if canSource(itemConfig) then
  444. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  445. end
  446. return flag
  447. end
  448. -- 可否使用
  449. function canUse(itemConfig)
  450. if not itemConfig then return end
  451. if not itemConfig.panelID then return end
  452. return itemConfig.panelID > 0
  453. end
  454. -- 可否使用
  455. function canUseBox(itemConfig)
  456. if not itemConfig then return end
  457. if not itemConfig.cmd then return end
  458. local cmdstr = itemConfig.cmd[1]
  459. if not cmdstr then return end
  460. if cmdstr == "box" then
  461. return true
  462. end
  463. end
  464. -- 是否可出售
  465. function canSell(itemConfig)
  466. if not itemConfig then return end
  467. if not itemConfig.price then return end
  468. return #itemConfig.price > 0
  469. end
  470. -- 是否可出售
  471. function canSource(itemConfig)
  472. if not itemConfig then return end
  473. if not itemConfig.getway then return end
  474. return #itemConfig.getway > 0
  475. end
  476. -- 可否批量使用
  477. function canUseBatch(itemConfig)
  478. if not itemConfig then return end
  479. if not itemConfig.cmd then return end
  480. local cmdstr = itemConfig.cmd[1]
  481. if not cmdstr then return end
  482. if cmdstr == "box" or "UseSkinItem" == cmdstr then
  483. return
  484. end
  485. return true
  486. end
  487. -- 可否预览
  488. function canYulan(itemConfig)
  489. if not itemConfig then return end
  490. local cmdStr = itemConfig.cmd and itemConfig.cmd[1]
  491. if cmdStr and cmdStr == "box" then
  492. return true
  493. end
  494. --[[local getWay = itemConfig.get and itemConfig.get[1]
  495. if getWay == SuipianLogic.SUMMON_TYPE_DROP or
  496. getWay == SuipianLogic.SUMMON_TYPE_HERO_SP or
  497. getWay == SuipianLogic.SUMMON_TYPE_SHENQI_SP then
  498. local suipianType = itemConfig.get[2]
  499. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO or
  500. suipianType == SuipianLogic.SUMMON_SUBTYPE_EQUIP then
  501. return true
  502. end
  503. end]]
  504. end
  505. -- 可否查看英雄详情
  506. function canDetail(itemConfig)
  507. local getWay = itemConfig.get and itemConfig.get[1]
  508. if getWay == SuipianLogic.SUMMON_TYPE_TARGET then
  509. local suipianType = itemConfig.get[2]
  510. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  511. local heroID = itemConfig.get[3]
  512. if HeroExcel.hero[heroID] then
  513. return true
  514. end
  515. end
  516. if suipianType == SuipianLogic.SUMMON_SUBTYPE_SKIN then
  517. local skinID = itemConfig.get[3]
  518. if SkinExcel.skin[skinID] then
  519. return true
  520. end
  521. end
  522. end
  523. end
  524. -- 可否合成
  525. function canHeCheng(itemConfig)
  526. local getWay = itemConfig.get and itemConfig.get[1]
  527. if getWay == SuipianLogic.SUMMON_TYPE_TARGET or getWay == SuipianLogic.SUMMON_TYPE_DROP then
  528. local suipianType = itemConfig.get[2]
  529. if true == SuipianLogic.SuipianLogic_CanHeCheng(suipianType) then
  530. return true
  531. end
  532. end
  533. if ItemDefine.isFuwen(itemConfig.id) then
  534. return true
  535. end
  536. end
  537. -- 可否穿戴
  538. function canEquip(itemConfig)
  539. if ItemDefine.isEquip(itemConfig.id) then
  540. return true
  541. end
  542. if ItemDefine.isFuwen(itemConfig.id) then
  543. return true
  544. end
  545. end
  546. -- 可否重铸
  547. function canCZhu(itemConfig)
  548. if ItemDefine.isFuwen(itemConfig.id) then
  549. return true
  550. end
  551. end
  552. -- 可否重铸
  553. function canFJie(itemConfig)
  554. if ItemDefine.isFuwen(itemConfig.id) then
  555. return true
  556. end
  557. end
  558. function canDuiHuang(itemConfig)
  559. local nID = itemConfig.id
  560. local getWay = itemConfig.get and itemConfig.get[1]
  561. if getWay == SuipianLogic.SUMMON_TYPE_TARGET then
  562. local nDuiHuangType = itemConfig.get[2]
  563. if true == SuipianLogic.SuipianLogic_CanDuiHuang(nDuiHuangType) then
  564. return true
  565. end
  566. end
  567. end