KLFirstChargePanel.lua 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. ---@class KLFirstChargePanel:UIKmlLuaPanelBase
  2. ---@field view KLFirstChargePanelView
  3. local KLFirstChargePanel = class(UIKmlLuaPanelBase)
  4. local this = KLFirstChargePanel
  5. ---创建时调用一次
  6. function this:Init()
  7. self.ChargeList = {}
  8. local ChargeTbl = SL:GetConfigTable("cfg_recharge")
  9. for _, v in pairs(ChargeTbl) do
  10. if v.type == ERechargeType.FirstChargeGift then
  11. table.insert(self.ChargeList, v)
  12. end
  13. end
  14. self.CoinRate = 10 --货币转换率
  15. end
  16. ---界面显示时调用一次
  17. function this:Show()
  18. self.message = nil
  19. self.needCount = 0
  20. self.rechargeTbl = nil
  21. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_RECHARGE_ACTION, { type = 3, action = "panel" })
  22. self.ItemList = {}
  23. self.selectIndex = 1---当前页数
  24. if self.args and self.args.PanelType then
  25. self.selectIndex = self.args.PanelType
  26. end
  27. self:ShowBtnToggle(self.selectIndex)--默认展示
  28. SL:HideMainPanel()
  29. GUI:UIPanel_Close("dev/outui/FirstCharge/Panel/KLFirstChargeAD/KLFirstChargeADPanel")
  30. end
  31. ---注册UI事件和服务器消息
  32. function this:RegistEvents()
  33. GUI:AddOnClickEvent(self.view.btn_Close, self, self.btn_CloseOnClick)
  34. GUI:SetToggleOnValueChange(self.view.panel_day1, self, self.ChangeDay1Page)
  35. GUI:SetToggleOnValueChange(self.view.panel_day2, self, self.ChangeDay2Page)
  36. GUI:SetToggleOnValueChange(self.view.panel_day3, self, self.ChangeDay3Page)
  37. GUI:AddOnClickEvent(self.view.btn_tips, self, self.btn_tipsOnClick)
  38. GUI:AddOnClickEvent(self.view.btn_charge, self, self.btn_chargeOnClick)
  39. SL:RegisterLUAEvent(LUA_EVENT_RES_FIRST_CHARGE_GIFT_INFO, self.RES_FirstChargeGift_Info, self)
  40. end
  41. function this:RES_FirstChargeGift_Info(_, message)
  42. if message then
  43. self.message = message
  44. --self:SetBtnShow(message)
  45. self:SetBtnShow(message)
  46. --self:UpdateUIData(message)
  47. end
  48. end
  49. function this:UpdateUIData(message)
  50. if message then
  51. GUI:SetScrollView_scrollpos(self.view.scrollviewItemList, 0)
  52. local countTbl = SL:GetConfig("cfg_recharge", self:GetIdByIndex(self.selectIndex))
  53. self.needCount, self.rechargeTbl = self:SetNeedCount(countTbl, message)
  54. ----UI
  55. GUI:Text_setString(self.view.Text_tips, tostring(self.needCount*self.CoinRate))
  56. GUI:SetActive(self.view.Text_accumulation, true)
  57. if self.needCount <= 0 then
  58. GUI:SetActive(self.view.Text_tips, false)
  59. -- GUI:Text_setString(self.view.charge_Text, "领取")
  60. GUI:SetActive(self.view.GetText, true)
  61. GUI:SetActive(self.view.ChargeText, false)
  62. GUI:Text_setString(self.view.Text_accumulation, Misc.ReturnRichTextByColorAndText(EColor[EGradColor.red], "0元"))
  63. GUI:SetActive(self.view.Text_accumulation, false)
  64. else
  65. GUI:Text_setString(self.view.Text_accumulation, Misc.ReturnRichTextByColorAndText(EColor[EGradColor.red], self.needCount .. "元"))
  66. GUI:SetActive(self.view.Text_tips, false)
  67. --GUI:SetActive(self.view.panel_68, false)
  68. --GUI:SetActive(self.view.bg1, false)
  69. for _, v in pairs(self.ChargeList) do
  70. if v.amount == self.needCount then
  71. if v.gain and v.gain[1] and v.gain[1][2] then
  72. GUI:Text_setString(self.view.Text_tips, tostring(v.gain[1][2]))
  73. --[[ local numStr = tostring(v.gain[1][2])
  74. local num = #numStr - 3
  75. GUI:setAnchorPoint(self.view.Text_tips, 312 - 5 * num, -109)]]
  76. GUI:SetActive(self.view.Text_tips, true)
  77. --GUI:SetActive(self.view.panel_68, true)
  78. --GUI:SetActive(self.view.bg1, true)
  79. else
  80. GUI:Text_setString(self.view.Text_tips, tostring(self.needCount * self.CoinRate))
  81. end
  82. end
  83. end
  84. GUI:SetActive(self.view.ChargeText, true)
  85. -- GUI:Text_setString(self.view.charge_Text, "充值")
  86. GUI:SetActive(self.view.GetText, false)
  87. end
  88. GUI:SetActive(self.view.red1, false)
  89. GUI:SetActive(self.view.red2, false)
  90. GUI:SetActive(self.view.red3, false)
  91. GUI:SetActive(self.view.btn_charge, true)
  92. GUI:SetActive(self.view.hasReceive_text, false)
  93. self.IsGet = false
  94. for id, state in pairs(message.data.rewards) do
  95. if countTbl.id == tonumber(id) then
  96. if state ~= 2 then
  97. GUI:SetActive(self.view.btn_charge, true)
  98. GUI:SetActive(self.view.hasReceive_text, false)
  99. self.IsGet = false
  100. else
  101. GUI:SetActive(self.view.btn_charge, false)
  102. GUI:SetActive(self.view.hasReceive_text, true)
  103. self.IsGet = true
  104. end
  105. end
  106. if tonumber(id) == EFirstRechargeLevel.one and state == 1 then
  107. GUI:SetActive(self.view.red1, true)
  108. end
  109. if tonumber(id) == EFirstRechargeLevel.two and state == 1 then
  110. GUI:SetActive(self.view.red2, true)
  111. end
  112. if tonumber(id) == EFirstRechargeLevel.three and state == 1 then
  113. GUI:SetActive(self.view.red3, true)
  114. end
  115. end
  116. end
  117. end
  118. function this:SetNeedCount(countTbl, message)
  119. local needCount = 0
  120. local rechargeTbl = nil
  121. if message then
  122. ---先计算获得金额
  123. local count = 0
  124. local reward1 = false
  125. local reward2 = false
  126. local reward3 = false
  127. for id, state in pairs(message.data.rewards) do
  128. if state == 1 or state == 2 then
  129. --已领取和充值的的
  130. if self:GetIndexByID(tonumber(id)) == 1 then
  131. reward1 = true
  132. elseif self:GetIndexByID(tonumber(id)) == 2 then
  133. reward2 = true
  134. elseif self:GetIndexByID(tonumber(id)) == 3 then
  135. reward3 = true
  136. end
  137. count = count + SL:GetConfig("cfg_recharge", tonumber(id)).amount
  138. end
  139. end
  140. --6情况列举
  141. if self.selectIndex == 1 then
  142. --第一个界面
  143. if count >= countTbl.amount or reward1 then
  144. needCount = 0
  145. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.one)
  146. return needCount, rechargeTbl
  147. end
  148. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.one)
  149. needCount = rechargeTbl.amount
  150. end
  151. if self.selectIndex == 2 then
  152. --第2个界面
  153. if count >= countTbl.amount or reward2 then
  154. needCount = 0
  155. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.two)
  156. return needCount, rechargeTbl
  157. end
  158. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.two)
  159. if reward1 then
  160. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.four)
  161. end
  162. needCount = rechargeTbl.amount
  163. end
  164. if self.selectIndex == 3 then
  165. --第3个界面
  166. if count >= countTbl.amount or reward3 then
  167. needCount = 0
  168. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.three)
  169. return needCount, rechargeTbl
  170. end
  171. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.three)
  172. if reward1 then
  173. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.six)
  174. end
  175. if reward2 then
  176. rechargeTbl = SL:GetConfig("cfg_recharge", EFirstRechargeLevel.five)
  177. end
  178. needCount = rechargeTbl.amount
  179. end
  180. end
  181. return needCount, rechargeTbl
  182. end
  183. function this:SetBtnShow(message)
  184. if message then
  185. if message.data.rewards then
  186. --默认跳转页面
  187. local sortIndex = {}
  188. local allGot = true
  189. for i = 1, 3 do
  190. local state = message.data.rewards[tostring(i + 300)]
  191. allGot = allGot and state == 2
  192. table.insert(sortIndex,{id = i + 300, state = state})
  193. end
  194. if allGot then
  195. self:ShowBtnToggle(3)
  196. else
  197. table.sort(sortIndex, function(a,b)
  198. local wa = a.state == 2 and 100 or 0
  199. local wb = b.state == 2 and 100 or 0
  200. return wa + a.id < wb + b.id
  201. end)
  202. self:ShowBtnToggle(sortIndex[1].id - 300)
  203. end
  204. end
  205. end
  206. end
  207. function this:ShowBtnToggle(index)
  208. if index == 1 then
  209. self.selectIndex = 1
  210. GUI:Toggle_setIsOn(self.view.panel_day1, true)
  211. self:UpdatePanelData(1)
  212. elseif index == 2 then
  213. self.selectIndex = 2
  214. GUI:Toggle_setIsOn(self.view.panel_day2, true)
  215. self:UpdatePanelData(2)
  216. else
  217. self.selectIndex = 3
  218. GUI:Toggle_setIsOn(self.view.panel_day3, true)
  219. self:UpdatePanelData(3)
  220. end
  221. end
  222. function this:btn_chargeOnClick()
  223. if self.rechargeTbl then
  224. if self.needCount <= 0 then
  225. if not self.IsGet then
  226. SL:SendLuaNetMsg(LuaMessageIdToSever.REQ_RECHARGE_ACTION, { type = 3, action = "reward", id = self.rechargeTbl.id })
  227. end
  228. else
  229. GUIUtil.SDKPay(self.rechargeTbl, 1)
  230. end
  231. end
  232. end
  233. function this:btn_tipsOnClick()
  234. SL:CommonStrTipsMessage({ title = "提示", str = SL:GetConfig("cfg_rule_text", 105).location, ui = self })
  235. end
  236. --第一天
  237. function this:ChangeDay1Page(control, eventData)
  238. if GUI:Toggle_getIsOn(control) == "1" then
  239. self.selectIndex = 1
  240. self:ShowAdImage(1)
  241. self:UpdatePanelData(1)
  242. end
  243. end
  244. --第二天
  245. function this:ChangeDay2Page(control, eventData)
  246. if GUI:Toggle_getIsOn(control) == "1" then
  247. self.selectIndex = 2
  248. self:ShowAdImage(2)
  249. self:UpdatePanelData(2)
  250. end
  251. end
  252. --第三天
  253. function this:ChangeDay3Page(control, eventData)
  254. if GUI:Toggle_getIsOn(control) == "1" then
  255. self.selectIndex = 3
  256. self:ShowAdImage(3)
  257. self:UpdatePanelData(3)
  258. end
  259. end
  260. function this:GetIdByIndex(index)
  261. return index + 300
  262. end
  263. function this:GetIndexByID(cfgId)
  264. return cfgId - 300
  265. end
  266. function this:UpdatePanelData(index)
  267. --显示奖励
  268. ---@type cfg_recharge_column
  269. local firstTbl = SL:GetConfig("cfg_recharge", self:GetIdByIndex(index))
  270. local firstChargeTbl = SL:GetConfig("cfg_first_charge", self:GetIdByIndex(index))
  271. self:SetTextShow(index)
  272. GUI:Text_setString(self.view.number, firstTbl.amount)
  273. if firstChargeTbl.font then
  274. GUI:Text_setString(self.view.ShowInfoText, firstChargeTbl.font)
  275. else
  276. GUI:Text_setString(self.view.ShowInfoText, "")
  277. end
  278. local careerId = SL:GetMetaValue(EMetaVarGetKey.JOB)
  279. local index = 1
  280. --[[ for _, award in pairs(firstTbl.gain) do
  281. --货币类型道具
  282. local itemId = award[1]
  283. local count = award[2]
  284. local data = {
  285. width = "100",
  286. height = "100",
  287. itemid = itemId,
  288. mfixsize = "100,100",
  289. mscale = "2,2,2",
  290. tips = "1",
  291. itemcustomcount = count
  292. }
  293. if self.ItemList[index] then
  294. GUI:Item_UpdataData(self.ItemList[index], data)
  295. else
  296. local item = GUI:Item_Create(self.view.layout2, data)
  297. self.ItemList[index] = item
  298. end
  299. GUI:AddOnClickEvent(self.ItemList[index], self, function()
  300. SL:OpenTips(nil, itemId)
  301. end)
  302. end]]
  303. for i, award in pairs(firstChargeTbl.firstReward) do
  304. --首充道具
  305. if award[1] == nil or (careerId ~= nil and careerId == award[1]) then
  306. index = index + 1
  307. local itemId = award[2]
  308. local count = award[3]
  309. local data = {
  310. width = "100",
  311. height = "100",
  312. itemid = itemId,
  313. mfixsize = "100,100",
  314. tips = "1",
  315. itemcustomcount = count
  316. }
  317. if self.ItemList[index] then
  318. GUI:Item_UpdataData(self.ItemList[index], data)
  319. else
  320. local item = GUI:Item_Create(self.view.layout2, data)
  321. self.ItemList[index] = item
  322. end
  323. GUI:AddOnClickEvent(self.ItemList[index], self, function()
  324. SL:OpenTips(nil, itemId,nil,nil,nil,{firstCharge=true})
  325. end)
  326. end
  327. end
  328. self:ShowMountModel(firstChargeTbl,careerId)
  329. GUI:SetActive(self.view.Imager11, true)
  330. self:UpdateUIData(self.message)
  331. end
  332. function this:SetTextShow(index)
  333. ---@type cfg_recharge_column
  334. local firstTbl1 = SL:GetConfig("cfg_recharge", self:GetIdByIndex(1))
  335. ---@type cfg_recharge_column
  336. local firstTbl2 = SL:GetConfig("cfg_recharge", self:GetIdByIndex(2))
  337. ---@type cfg_recharge_column
  338. local firstTbl3 = SL:GetConfig("cfg_recharge", self:GetIdByIndex(3))
  339. ---@type cfg_first_charge_column
  340. local firstTbl11 = SL:GetConfig("cfg_first_charge", self:GetIdByIndex(1))
  341. ---@type cfg_first_charge_column
  342. local firstTbl22 = SL:GetConfig("cfg_first_charge", self:GetIdByIndex(2))
  343. ---@type cfg_first_charge_column
  344. local firstTbl33 = SL:GetConfig("cfg_first_charge", self:GetIdByIndex(3))
  345. local curGainId = 0
  346. if index == 1 then
  347. curGainId = (firstTbl1.gain[1] and firstTbl1.gain[1][1]) or 0
  348. GUI:Text_setString(self.view.text_recharge_num,tostring(firstTbl1.amount))
  349. GUI:Text_setString(self.view.text_reward_num,tostring(firstTbl11.count))
  350. GUI:Text_setString(self.view.Text_tips, tostring(firstTbl1.amount * self.CoinRate))
  351. GUI:Text_setString(self.view.RebateText, tostring(firstTbl11.count2) .. "%")
  352. GUI:Text_setString(self.view.togText_day1, "<color=#FFFDDA>" .. "累充" .. firstTbl1.amount .. "元" .. "</color>")
  353. else
  354. GUI:Text_setString(self.view.togText_day1, "<color=#D6AA8F>" .. "累充" .. firstTbl1.amount .. "元" .. "</color>")
  355. end
  356. if index == 2 then
  357. curGainId = (firstTbl2.gain[1] and firstTbl2.gain[1][1]) or 0
  358. GUI:Text_setString(self.view.text_recharge_num,tostring(firstTbl2.amount))
  359. GUI:Text_setString(self.view.text_reward_num,tostring(firstTbl22.count))
  360. GUI:Text_setString(self.view.Text_tips, tostring(firstTbl2.amount * self.CoinRate))
  361. GUI:Text_setString(self.view.RebateText, tostring(firstTbl22.count2) .. "%")
  362. GUI:Text_setString(self.view.togText_day2, "<color=#FFFDDA>" .. "累充" .. firstTbl2.amount .. "元" .. "</color>")
  363. else
  364. GUI:Text_setString(self.view.togText_day2, "<color=#D6AA8F>" .. "累充" .. firstTbl2.amount .. "元" .. "</color>")
  365. end
  366. if index == 3 then
  367. curGainId = (firstTbl3.gain[1] and firstTbl3.gain[1][1]) or 0
  368. GUI:Text_setString(self.view.text_recharge_num,tostring(firstTbl3.amount))
  369. GUI:Text_setString(self.view.text_reward_num,tostring(firstTbl33.count))
  370. GUI:Text_setString(self.view.Text_tips, tostring(firstTbl3.amount * self.CoinRate))
  371. GUI:Text_setString(self.view.RebateText, tostring(firstTbl33.count2) .. "%")
  372. GUI:Text_setString(self.view.togText_day3, "<color=#FFFDDA>" .. "累充" .. firstTbl3.amount .. "元" .. "</color>")
  373. else
  374. GUI:Text_setString(self.view.togText_day3, "<color=#D6AA8F>" .. "累充" .. firstTbl3.amount .. "元" .. "</color>")
  375. end
  376. local isGainDiamond = curGainId == 10040001
  377. GUI:setVisible(self.view.img_70,isGainDiamond)
  378. GUI:setVisible(self.view.img_72,isGainDiamond)
  379. GUI:setVisible(self.view.text_reward_num,isGainDiamond)
  380. GUI:setVisible(self.view.img_text1,isGainDiamond)
  381. GUI:setVisible(self.view.img_text4,not isGainDiamond)
  382. end
  383. function this:ShowAdImage(index)
  384. GUI:SetActive(self.view.font_ad, index == 1)
  385. GUI:SetActive(self.view.font_ad2, index == 1)
  386. GUI:SetActive(self.view.font_ad3, index == 1)
  387. end
  388. function this:btn_CloseOnClick()
  389. GUI:UIPanel_Close("dev/outui/FirstCharge/Panel/KLFirstCharge/KLFirstChargePanel")
  390. end
  391. function this:ShowMountModel(FirstChargeTbl,careerId)
  392. if not FirstChargeTbl then
  393. return
  394. end
  395. local scale =1/10
  396. local mrotate = "0,0,0"
  397. local x = "0"
  398. local y = "0"
  399. local z="0"
  400. local path = ""
  401. local ani = ""
  402. local rX=1
  403. local rY=0
  404. local rZ=0
  405. for _, model1 in pairs(FirstChargeTbl.model) do
  406. if tonumber(model1[3]) == careerId then
  407. path = model1[1]
  408. GUI:Text_setString(self.view.ShowInfoText, tostring(model1[2]))
  409. end
  410. end
  411. for _, model2 in pairs(FirstChargeTbl.modelCondition) do
  412. if tonumber(model2[5]) == careerId then
  413. x=model2[1]
  414. y =model2[2]
  415. z = model2[3]
  416. scale = tonumber(model2[4])
  417. end
  418. end
  419. for _, model3 in pairs(FirstChargeTbl.modelRevolve) do
  420. if tonumber(model3[4]) == careerId then
  421. --mrotate = model3[1].. "," .. model3[2] .. "," .. model3[3]
  422. rX = tonumber(model3[1])
  423. rY = tonumber(model3[2])
  424. rZ = tonumber(model3[3])
  425. end
  426. end
  427. for _, model4 in pairs(FirstChargeTbl.modelBehavior) do
  428. if tonumber(model4[2]) == careerId then
  429. ani=model4[1]
  430. end
  431. end
  432. local data = {
  433. mscale = 1 .. "," .. 1 .. "," .. 1,
  434. mrotate = "0,0,0",
  435. x = x,
  436. y = y,
  437. z = z,
  438. a = "00",
  439. src = path,
  440. ani = ani,
  441. }
  442. if self.cur_mount_model then
  443. GUI:Item_UpdataData(self.cur_mount_model, data)
  444. else
  445. self.cur_mount_model = GUI:Model_Create(self.view.Model_item, data)
  446. end
  447. GUI:setScale(self.cur_mount_model, scale/10)
  448. --GUI:setAllRotation(self.cur_mount_model,{rX,rY,rZ})
  449. GUI:setRotationSkewX(self.cur_mount_model,rX)
  450. GUI:setRotationSkewY(self.cur_mount_model,rY)
  451. GUI:setRotation(self.cur_mount_model,rZ)
  452. end
  453. --[[function this:ShowUIModel(itemId)
  454. local data = {
  455. itemid = itemId,
  456. }
  457. GUI:Item_UpdataData(self.view.Model_item, data)
  458. end]]
  459. ---创建或者刷新界面数据时调用
  460. function this:Refresh()
  461. end
  462. function this:Close()
  463. SL:ShowMainPanel()
  464. end
  465. return this