HeroSkinLogic.lua 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. --- 英雄皮肤
  2. local Grid = require("bag.Grid")
  3. local BuyExcel = require("excel.buy").buy
  4. local BagLogic = require("bag.BagLogic")
  5. local HeroSkinExcel = require("excel.present").heroSkin
  6. local SkinExcel = require("excel.skin").skin
  7. local SkinLogic = require("skin.SkinLogic")
  8. local HeadFrameExcel = require("excel.role").headFrame
  9. local RoleHeadLogic = require("role.RoleHeadLogic")
  10. local Msg = require("core.Msg")
  11. local Json = require("common.Json")
  12. local BuyLogic = require("topup.BuyLogic")
  13. local GC_SKIN_QUERY = 54
  14. local function genSkinUnit(human,id)
  15. local cfg = HeroSkinExcel[id]
  16. local buyCfg = BuyExcel[cfg.buyId]
  17. local region = human.region or "CN"
  18. local buyItem = {}
  19. BuyLogic.fontBuyItem(human, buyItem, cfg.buyId)
  20. local skinId = cfg.content[1]
  21. local skinCfg = SkinExcel[skinId]
  22. local attrs = {}
  23. for _,v in pairs(skinCfg.attrs) do
  24. attrs[#attrs + 1] = {
  25. key = v[1],
  26. value = v[2],
  27. }
  28. end
  29. local iconframeId = cfg.content[2]
  30. local iconframeCfg = HeadFrameExcel[iconframeId]
  31. local headNet = {}
  32. headNet.id = iconframeId
  33. headNet.desc = iconframeCfg.desc or ""
  34. headNet.keepTime = iconframeCfg.keepTime
  35. headNet.name = iconframeCfg.name or ""
  36. headNet.camp = iconframeCfg.camp or 0
  37. local len = #iconframeCfg.attrs
  38. headNet.attrs = {}
  39. for i = 1,len do
  40. headNet.attrs[i] = {
  41. key = iconframeCfg.attrs[i][1],
  42. value = iconframeCfg.attrs[i][2],
  43. }
  44. end
  45. return {
  46. id = id,
  47. buyItem = buyItem,
  48. skinData = {
  49. Id = skinId,
  50. attrs = attrs
  51. },
  52. Iconframe = headNet
  53. }
  54. end
  55. -----------------------------------------
  56. function query(human,panelId)
  57. local ret = {}
  58. for id,cfg in pairs(HeroSkinExcel) do
  59. if cfg.panelId == panelId then
  60. ret[#ret+1] = genSkinUnit(human,id)
  61. end
  62. end
  63. return {
  64. list = ret
  65. }
  66. end
  67. function buy(human,buyId)
  68. local skinCfg
  69. for _,cfg in pairs(HeroSkinExcel) do
  70. if cfg.buyId == buyId then
  71. skinCfg = cfg
  72. break
  73. end
  74. end
  75. assert(skinCfg,"invalid buyId")
  76. -- 解锁皮肤和头像
  77. SkinLogic.skinUnlock(human,skinCfg.content[1]) --BagLogic.addItemList(human,skinCfg.content,"skin_buy")
  78. RoleHeadLogic.active(human,RoleHeadLogic.HEAD_TYPE_2,skinCfg.content[2])
  79. --刷新
  80. local data=query(human,skinCfg.panelId)
  81. RefreshClient(human,GC_SKIN_QUERY,data)
  82. end
  83. function RefreshClient(human,type,data)
  84. local msgRet = Msg.gc.GC_ROLE_CHANGE_BASEINFO
  85. msgRet.ret = type
  86. msgRet.tip = Json.Encode(data)
  87. Msg.send(msgRet,human.fd)
  88. end
  89. function SendSkinInfoByMoney(human, nMoney, nItemID)
  90. if not human or 0 >= nMoney then
  91. return
  92. end
  93. local ret = {}
  94. for id,cfg in pairs(HeroSkinExcel) do
  95. local nBuyID = cfg.buyId
  96. local tBuyCfg = BuyExcel[nBuyID]
  97. if tBuyCfg then
  98. local region = human.region or "CN"
  99. local nTrueMoney = tBuyCfg[region]
  100. if nMoney == nTrueMoney then
  101. ret[#ret+1] = genSkinUnit(human,id)
  102. end
  103. end
  104. end
  105. local data = {
  106. list = ret
  107. }
  108. local msgRet = Msg.gc.GC_ITEM_SKIN_INFO
  109. msgRet.nItemID = nItemID
  110. msgRet.data = Json.Encode(data)
  111. Msg.send(msgRet,human.fd)
  112. end
  113. function BuySkinBySuiPian(human, nSkinID, nItemID)
  114. local skinCfg
  115. for _,cfg in pairs(HeroSkinExcel) do
  116. if cfg.content[1] == nSkinID then
  117. skinCfg = cfg
  118. break
  119. end
  120. end
  121. assert(skinCfg,"invalid buyId")
  122. SkinLogic.skinUnlock(human,skinCfg.content[1]) --BagLogic.addItemList(human,skinCfg.content,"skin_buy")
  123. RoleHeadLogic.active(human,RoleHeadLogic.HEAD_TYPE_2,skinCfg.content[2])
  124. --刷新
  125. local data=query(human,skinCfg.panelId)
  126. RefreshClient(human,GC_SKIN_QUERY,data)
  127. BagLogic.delItem(human, nItemID, 1, "item_use")
  128. end