Grid.lua 20 KB

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