Grid.lua 21 KB

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