Grid.lua 19 KB

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