Grid.lua 20 KB

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