import { _decorator, Component, Node } from 'cc'; import { RewardVideoSystem } from '../ad/RewardVideoSystem'; import { BattleData } from '../battle/BattleData'; import { DataSystem } from '../core/data/DataSystem'; import { Http } from '../core/net/Http'; import { HttpSystem } from '../core/net/HttpSystem'; import { WindowOpenMode } from '../core/ui/window/WindowOpenMode'; import { WindowSystem } from '../core/ui/window/WindowSystem'; import { ConfigData } from '../data/ConfigData'; import { HttpErrorCode } from '../data/HttpErrorCode'; import { platform } from '../data/jsb/platform'; import { UserData } from '../data/UserData'; import { NoviceGuideData } from '../guide/NoviceGuideData'; import { ReportThinking } from '../ReportThinking'; import { LevelBonusData } from './LevelBonusData'; const { ccclass, property, requireComponent } = _decorator; @ccclass('LevelBonus') @requireComponent(Http) export class LevelBonus extends Component { private hadBonus = false;//当前关卡是否已经领取过红包 private serverConfig; start() { this.serverConfig = DataSystem.getData(ConfigData).get("serverConfig"); DataSystem.createData(LevelBonusData); this.initData(); } //更新关卡红包数据 private async initData() { let result = await this.node.getComponent(Http).send("/api/battle/getBonusTimes"); if (result && result.code == 0) { DataSystem.getData(LevelBonusData).dailyTimes = result.data.dailyTimes; DataSystem.getData(LevelBonusData).saveTimes = result.data.times; DataSystem.getData(LevelBonusData).showSaveTimes = result.data.times; } } update() { DataSystem.watch(BattleData, "_monsterKilledNode") && this.produceBonus(); } //红包产出 private async produceBonus() { if (DataSystem.getData(LevelBonusData).dailyTimes == 0) {//今日次数不足 return; } if (DataSystem.getData(LevelBonusData).saveTimes == this.serverConfig.saveLimit) {//红包数达到上线 return; } let positionData = DataSystem.getData(BattleData)._monsterKilledNode; if (positionData.length) { if (!this.hadBonus && Math.random() * 10000 < this.serverConfig.redbagDrop) { // if (!this.hadBonus && Math.random() * 10000 > this.serverConfig.redbagDrop) {//測試 let result = await this.node.getComponent(Http).send("/api/battle/receiveBonusTimes"); if (result && result.code == 0) { DataSystem.getData(LevelBonusData).dailyTimes--; this.hadBonus = true; if (DataSystem.getData(NoviceGuideData).isShow) { DataSystem.getData(LevelBonusData).saveTimes++; WindowSystem.open("prefabs/ui/turntable/prizeFly", WindowOpenMode.NotCloseAndAdd, [{ type: 4, num: 1, position: positionData[positionData.length - 1] }]); } else { await WindowSystem.open("prefabs/ui/redEnvelopes", WindowOpenMode.NotCloseAndAdd, [{ type: 5, num: 0 }]); } } } } else { this.hadBonus = false; } } private isOpening = false; //视频广告 private async openVideo() { if (this.isOpening) { return; } this.isOpening = true; if (DataSystem.getData(LevelBonusData).showSaveTimes > 0) { let result = await this.getComponent(Http).send("/api/ad/watchVideoAD"); if (result && result.code == 0) { ReportThinking.ad_init('levelbonus_get'); let adData = await RewardVideoSystem.show(); if (adData) {//观看视频成功 let _result = await this.getComponent(Http).send("/api/battle/receiveBonus", { adData: adData.obj }); if (_result && _result.code == 0) {//打开红包成功 ReportThinking.ad_end('levelbonus_get', _result.data); this.openRedBox(_result.data); } else if (_result && _result.code == HttpErrorCode.VideoADCD) { this.isOpening = false; WindowSystem.showTips('视频观看时间不足'); } } else {//观看视频失败 this.isOpening = false; WindowSystem.showTips('视频观看时间不足'); } } else {//返回错误信息,无法观看视频 this.isOpening = false; WindowSystem.showTips('视频次数不足'); } } else {//次数不足 this.isOpening = false; WindowSystem.showTips('挂机可以产生红包'); } } //开红包 private async openRedBox(num: number) { DataSystem.getData(LevelBonusData).saveTimes--; DataSystem.getData(LevelBonusData).showSaveTimes--; await WindowSystem.open("prefabs/ui/redEnvelopes", WindowOpenMode.NotCloseAndCover, [{ type: 0, num: num }]); this.scheduleOnce(() => { this.isOpening = false; }, 1); } }