LevelBonus.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { _decorator, Component, Node } from 'cc';
  2. import { RewardVideoSystem } from '../ad/RewardVideoSystem';
  3. import { BattleData } from '../battle/BattleData';
  4. import { DataSystem } from '../core/data/DataSystem';
  5. import { Http } from '../core/net/Http';
  6. import { HttpSystem } from '../core/net/HttpSystem';
  7. import { WindowOpenMode } from '../core/ui/window/WindowOpenMode';
  8. import { WindowSystem } from '../core/ui/window/WindowSystem';
  9. import { ConfigData } from '../data/ConfigData';
  10. import { HttpErrorCode } from '../data/HttpErrorCode';
  11. import { platform } from '../data/jsb/platform';
  12. import { UserData } from '../data/UserData';
  13. import { NoviceGuideData } from '../guide/NoviceGuideData';
  14. import { ReportThinking } from '../ReportThinking';
  15. import { LevelBonusData } from './LevelBonusData';
  16. const { ccclass, property, requireComponent } = _decorator;
  17. @ccclass('LevelBonus')
  18. @requireComponent(Http)
  19. export class LevelBonus extends Component {
  20. private hadBonus = false;//当前关卡是否已经领取过红包
  21. private serverConfig;
  22. start() {
  23. this.serverConfig = DataSystem.getData(ConfigData).get("serverConfig");
  24. DataSystem.createData(LevelBonusData);
  25. this.initData();
  26. }
  27. //更新关卡红包数据
  28. private async initData() {
  29. let result = await this.node.getComponent(Http).send("/api/battle/getBonusTimes");
  30. if (result && result.code == 0) {
  31. DataSystem.getData(LevelBonusData).dailyTimes = result.data.dailyTimes;
  32. DataSystem.getData(LevelBonusData).saveTimes = result.data.times;
  33. DataSystem.getData(LevelBonusData).showSaveTimes = result.data.times;
  34. }
  35. }
  36. update() {
  37. DataSystem.watch(BattleData, "_monsterKilledNode") && this.produceBonus();
  38. }
  39. //红包产出
  40. private async produceBonus() {
  41. if (DataSystem.getData(LevelBonusData).dailyTimes == 0) {//今日次数不足
  42. return;
  43. }
  44. if (DataSystem.getData(LevelBonusData).saveTimes == this.serverConfig.saveLimit) {//红包数达到上线
  45. return;
  46. }
  47. let positionData = DataSystem.getData(BattleData)._monsterKilledNode;
  48. if (positionData.length) {
  49. if (!this.hadBonus && Math.random() * 10000 < this.serverConfig.redbagDrop) {
  50. // if (!this.hadBonus && Math.random() * 10000 > this.serverConfig.redbagDrop) {//測試
  51. let result = await this.node.getComponent(Http).send("/api/battle/receiveBonusTimes");
  52. if (result && result.code == 0) {
  53. DataSystem.getData(LevelBonusData).dailyTimes--;
  54. this.hadBonus = true;
  55. if (DataSystem.getData(NoviceGuideData).isShow) {
  56. DataSystem.getData(LevelBonusData).saveTimes++;
  57. WindowSystem.open("prefabs/ui/turntable/prizeFly", WindowOpenMode.NotCloseAndAdd, [{ type: 4, num: 1, position: positionData[positionData.length - 1] }]);
  58. } else {
  59. await WindowSystem.open("prefabs/ui/redEnvelopes", WindowOpenMode.NotCloseAndAdd, [{ type: 5, num: 0 }]);
  60. }
  61. }
  62. }
  63. } else {
  64. this.hadBonus = false;
  65. }
  66. }
  67. private isOpening = false;
  68. //视频广告
  69. private async openVideo() {
  70. if (this.isOpening) {
  71. return;
  72. }
  73. this.isOpening = true;
  74. if (DataSystem.getData(LevelBonusData).showSaveTimes > 0) {
  75. let result = await this.getComponent(Http).send("/api/ad/watchVideoAD");
  76. if (result && result.code == 0) {
  77. ReportThinking.ad_init('levelbonus_get');
  78. let adData = await RewardVideoSystem.show();
  79. if (adData) {//观看视频成功
  80. let _result = await this.getComponent(Http).send("/api/battle/receiveBonus", { adData: adData.obj });
  81. if (_result && _result.code == 0) {//打开红包成功
  82. ReportThinking.ad_end('levelbonus_get', _result.data);
  83. this.openRedBox(_result.data);
  84. } else if (_result && _result.code == HttpErrorCode.VideoADCD) {
  85. this.isOpening = false;
  86. WindowSystem.showTips('视频观看时间不足');
  87. }
  88. } else {//观看视频失败
  89. this.isOpening = false;
  90. WindowSystem.showTips('视频观看时间不足');
  91. }
  92. } else {//返回错误信息,无法观看视频
  93. this.isOpening = false;
  94. WindowSystem.showTips('视频次数不足');
  95. }
  96. } else {//次数不足
  97. this.isOpening = false;
  98. WindowSystem.showTips('挂机可以产生红包');
  99. }
  100. }
  101. //开红包
  102. private async openRedBox(num: number) {
  103. DataSystem.getData(LevelBonusData).saveTimes--;
  104. DataSystem.getData(LevelBonusData).showSaveTimes--;
  105. await WindowSystem.open("prefabs/ui/redEnvelopes", WindowOpenMode.NotCloseAndCover, [{ type: 0, num: num }]);
  106. this.scheduleOnce(() => {
  107. this.isOpening = false;
  108. }, 1);
  109. }
  110. }