Grid.lua 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  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 and
  318. itemConfig.subType ~= ItemDefine.ITEM_SUBTYPE_SUIPIAN_ELF then
  319. return
  320. end
  321. net.suipian[0] = 1
  322. net.suipian[1] = net.suipian[1] or {}
  323. net.suipian[1].fullcnt = itemConfig.fullCnt
  324. net.suipian[1].get = itemConfig.get[1] or 0
  325. if itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN or itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_SKIN then
  326. net.suipian[1].camp = itemConfig.cond[1] or 0
  327. net.suipian[1].star = itemConfig.cond[2] or 0
  328. local heroID = itemConfig.get[3]
  329. local heroConfig = HeroExcel.hero[heroID]
  330. net.suipian[1].grade = heroConfig and heroConfig.grade or 0
  331. if itemConfig.get[1] == SuipianLogic.SUMMON_TYPE_TARGET then
  332. local dropType = itemConfig.get[2]
  333. if dropType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  334. local heroID = itemConfig.get[3]
  335. local heroConfig = HeroExcel.hero[heroID]
  336. if heroConfig then
  337. net.suipian[1].camp = heroConfig.camp
  338. net.suipian[1].star = heroConfig.star
  339. net.icon = heroConfig.head
  340. end
  341. end
  342. end
  343. elseif itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_TALISMAM or
  344. itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_RELIC or
  345. itemConfig.subType == ItemDefine.ITEM_SUBTYPE_SUIPIAN_ELF then
  346. net.suipian[1].camp = 0
  347. net.suipian[1].star = 0
  348. net.suipian[1].grade = itemConfig.rare or 0
  349. end
  350. end
  351. --------------------------------------------- 可操作 -------------------------------------------------------
  352. -- 可操作行为
  353. function getOpflagAtBag(id)
  354. local itemConfig = ItemDefine.getConfig(id)
  355. if not itemConfig then return flag end
  356. if itemConfig then
  357. itemConfig.id = id
  358. end
  359. local flag = 0
  360. -- 使用道具
  361. if canUse(itemConfig) then
  362. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE)
  363. end
  364. -- 使用箱子
  365. if canUseBox(itemConfig) then
  366. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BOX)
  367. end
  368. -- 批量使用
  369. if canUseBatch(itemConfig) then
  370. flag = Util.setBit(flag, ItemDefine.ITEM_OP_USE_BATCH)
  371. end
  372. -- 详情
  373. if canDetail(itemConfig) then
  374. flag = Util.setBit(flag, ItemDefine.ITEM_OP_DETAIL)
  375. end
  376. -- 是否可出售
  377. if canSell(itemConfig) then
  378. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SELL)
  379. end
  380. -- 是否用来源
  381. if canSource(itemConfig) then
  382. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  383. end
  384. -- 是否可以合成
  385. if canHeCheng(itemConfig) then
  386. flag = Util.setBit(flag, ItemDefine.ITEM_OP_HECHENG)
  387. end
  388. -- 能否穿戴
  389. if canEquip(itemConfig) then
  390. flag = Util.setBit(flag, ItemDefine.ITEM_OP_EQUIP)
  391. end
  392. -- 能否重铸
  393. if canCZhu(itemConfig) then
  394. flag = Util.setBit(flag, ItemDefine.ITEM_OP_CZHU)
  395. end
  396. -- 能否分解
  397. if canFJie(itemConfig) then
  398. flag = Util.setBit(flag, ItemDefine.ITEM_OP_FJIE)
  399. end
  400. -- 能否兑换
  401. if canDuiHuang(itemConfig) then
  402. flag = Util.setBit(flag, ItemDefine.ITEM_OP_DUIHUAN)
  403. end
  404. return flag
  405. end
  406. function getOpflag(itemConfig)
  407. local flag = 0
  408. if not itemConfig then return flag end
  409. -- 预览
  410. if canYulan(itemConfig) then
  411. flag = Util.setBit(flag, ItemDefine.ITEM_OP_YULAN)
  412. end
  413. -- 是否用来源
  414. if canSource(itemConfig) then
  415. flag = Util.setBit(flag, ItemDefine.ITEM_OP_SOURCE)
  416. end
  417. return flag
  418. end
  419. -- 可否使用
  420. function canUse(itemConfig)
  421. if not itemConfig then return end
  422. if not itemConfig.panelID then return end
  423. return itemConfig.panelID > 0
  424. end
  425. -- 可否使用
  426. function canUseBox(itemConfig)
  427. if not itemConfig then return end
  428. if not itemConfig.cmd then return end
  429. local cmdstr = itemConfig.cmd[1]
  430. if not cmdstr then return end
  431. if cmdstr == "box" then
  432. return true
  433. end
  434. end
  435. -- 是否可出售
  436. function canSell(itemConfig)
  437. if not itemConfig then return end
  438. if not itemConfig.price then return end
  439. return #itemConfig.price > 0
  440. end
  441. -- 是否可出售
  442. function canSource(itemConfig)
  443. if not itemConfig then return end
  444. if not itemConfig.getway then return end
  445. return #itemConfig.getway > 0
  446. end
  447. -- 可否批量使用
  448. function canUseBatch(itemConfig)
  449. if not itemConfig then return end
  450. if not itemConfig.cmd then return end
  451. local cmdstr = itemConfig.cmd[1]
  452. if not cmdstr then return end
  453. if cmdstr == "box" or "UseSkinItem" == cmdstr then
  454. return
  455. end
  456. return true
  457. end
  458. -- 可否预览
  459. function canYulan(itemConfig)
  460. if not itemConfig then return end
  461. local cmdStr = itemConfig.cmd and itemConfig.cmd[1]
  462. if cmdStr and cmdStr == "box" then
  463. return true
  464. end
  465. --[[local getWay = itemConfig.get and itemConfig.get[1]
  466. if getWay == SuipianLogic.SUMMON_TYPE_DROP or
  467. getWay == SuipianLogic.SUMMON_TYPE_HERO_SP or
  468. getWay == SuipianLogic.SUMMON_TYPE_SHENQI_SP then
  469. local suipianType = itemConfig.get[2]
  470. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO or
  471. suipianType == SuipianLogic.SUMMON_SUBTYPE_EQUIP then
  472. return true
  473. end
  474. end]]
  475. end
  476. -- 可否查看英雄详情
  477. function canDetail(itemConfig)
  478. local getWay = itemConfig.get and itemConfig.get[1]
  479. if getWay == SuipianLogic.SUMMON_TYPE_TARGET then
  480. local suipianType = itemConfig.get[2]
  481. if suipianType == SuipianLogic.SUMMON_SUBTYPE_HERO then
  482. local heroID = itemConfig.get[3]
  483. if HeroExcel.hero[heroID] then
  484. return true
  485. end
  486. end
  487. if suipianType == SuipianLogic.SUMMON_SUBTYPE_SKIN then
  488. local skinID = itemConfig.get[3]
  489. if SkinExcel.skin[skinID] then
  490. return true
  491. end
  492. end
  493. end
  494. end
  495. -- 可否合成
  496. function canHeCheng(itemConfig)
  497. local getWay = itemConfig.get and itemConfig.get[1]
  498. if getWay == SuipianLogic.SUMMON_TYPE_TARGET or getWay == SuipianLogic.SUMMON_TYPE_DROP then
  499. local suipianType = itemConfig.get[2]
  500. if true == SuipianLogic.SuipianLogic_CanHeCheng(suipianType) then
  501. return true
  502. end
  503. end
  504. if ItemDefine.isFuwen(itemConfig.id) then
  505. return true
  506. end
  507. end
  508. -- 可否穿戴
  509. function canEquip(itemConfig)
  510. if ItemDefine.isEquip(itemConfig.id) then
  511. return true
  512. end
  513. if ItemDefine.isFuwen(itemConfig.id) then
  514. return true
  515. end
  516. end
  517. -- 可否重铸
  518. function canCZhu(itemConfig)
  519. if ItemDefine.isFuwen(itemConfig.id) then
  520. return true
  521. end
  522. end
  523. -- 可否重铸
  524. function canFJie(itemConfig)
  525. if ItemDefine.isFuwen(itemConfig.id) then
  526. return true
  527. end
  528. end
  529. function canDuiHuang(itemConfig)
  530. local nID = itemConfig.id
  531. local getWay = itemConfig.get and itemConfig.get[1]
  532. if getWay == SuipianLogic.SUMMON_TYPE_TARGET then
  533. local nDuiHuangType = itemConfig.get[2]
  534. if true == SuipianLogic.SuipianLogic_CanDuiHuang(nDuiHuangType) then
  535. return true
  536. end
  537. end
  538. end