//********************* // create by 流云 // time: Thu Sep 25 2025 // desc: //********************* import { _decorator, Component, Node, find, instantiate, Label, sp } from 'cc'; import { Auto_BattleSuccess } from './Auto_BattleSuccess'; import { ChapterDataManager, BattleType, ChapterDifficulty } from '../../manager/ChapterDataManager'; import { StatisticsType, TaskType } from '../../game/GameData'; import { ItemData } from '../../game/ConfigProjectData'; import MTools from 'db://assets/mx/tools/MTools'; import { itemPic } from '../../com/itemPic'; import { NewFunType } from '../../newFun/NewFun'; import { UIID } from '../../game/ConfigRes'; const { ccclass, property } = _decorator; /**游戏结果奖励类型 */ export enum GameResultAwardType { Coin = 1,//金币 Diamond = 2,//钻石 } @ccclass('UIBattleSuccess') export class UIBattleSuccess extends Auto_BattleSuccess { curCoinNum: number = 0 curDiamondNum: number = 0 dataList = null addNum = 1 onLoad(): void { super.onLoad(); } onEnable(): void { super.onEnable(); } onDisable(): void { super.onDisable(); } onInit(): void { // 面板可能复用,先重置领取倍率与按钮显隐,避免上次状态残留 this.addNum = 1; this.btnADGet.active = false; this.btnShareGet.active = false; gg.audio.playEffect({ name: "胜利" }); this.showOpenMaskEff(2); // let spine = this.ui_center.find("胜利结算").getComponent(sp.Skeleton); // spine.setAnimation(0, 'play', false); // this.scheduleOnce(()=>{ // spine.setAnimation(0, 'idle', true); // },1.5) if (gg.game.CurentBattle.BattleType == BattleType.Level) { gg.data.project.setChapterStatusByProgress(gg.game.CurentBattle.ChapterId, gg.game.CurentBattle.Difficulty, 1); //gg.targetTaskManager.checkTask()//任务领取状态依赖其他模块不需要统计数据 进入home会自动调用一次checkTask } else { gg.data.project.addReplicaPassCountToday(gg.game.CurentBattle.CurentConfigReplica.id, gg.game.CurentBattle.Difficulty); } //gg.data.savePlaySelectLevelDataPassGame(gg.game.CurentSelectChapterId, BattleDataManager.getGameBattleMode()) gg.data.addDayTaskProgressData(TaskType.successPass, 1) this.showReward() // 项目不启用“分享双倍”,结算页固定只保留广告双倍入口 this.btnADGet.active = true this.btnShareGet.active = false if (!gg.game.CurentBattle.IsWatchAd && gg.game.CurentSelectChapterId >= 3) { gg.sdk.showInterstitialAd(() => { }, () => { }, true) } this.offlineRewardTimeCount() gg.PRR.addRecordData(); gg.PRR.upToServer(0, gg.game.CurentBattle.BattleTime, () => { console.log("玩家记录上报-成功数据上传成功"); }, () => { console.log("玩家记录上报-成功数据上传失败"); }); if(gg.data.doc.chapter == 3){ gg.game.thirdChapterWinGreatGift = true } this.reportChapterPassBlockStats(); } /** * 主线章节通关成功:按武器上报方块叠层、技能条数,以及场上总方块数(与战斗内 DPS 用的叠层统计一致)。 */ private reportChapterPassBlockStats(): void { const battle = gg.game.CurentBattle; if (!battle || battle.BattleType !== BattleType.Level) { return; } const ch = battle.getReportDYChapterId(); const wave = battle.CurentWaveNum ?? 0; const prefix = `章节${ch}_${wave}-`; const weapons = battle.CurUseWeaponArr ?? []; for (let i = 0; i < weapons.length; i++) { const w = weapons[i]; if (!w) continue; const wid = w.weaponid; const wname = (w.name ?? '').replace(/-/g, '_'); const blockSum = battle.getTetrStackLevelSum(wid); const skillCount = battle.CurUseSkillArr?.filter((s) => s && s.weapon === wid && s.type !== 3).length ?? 0; gg.sdk.reportDY('inLevel', `${prefix}章节通过成功-${wname}方块数目${blockSum}`); gg.sdk.reportDY('inLevel', `${prefix}章节通过成功-${wname}技能方块数目${skillCount}`); } const totalBlocks = battle.curMap?.getTetriNodeCount?.() ?? 0; gg.sdk.reportDY('inLevel', `${prefix}章节通过成功-总方块数${totalBlocks}`); //gg.game.CurentBattle.getFreeCoinNum gg.sdk.reportDY('inLevel', `${prefix}章节通过成功-银币使用次数${gg.game.CurentBattle.getFreeCoinNum}`); } //离线收益开启时间计数 offlineRewardTimeCount() { //离线手机开启计数 let normalConfId = 1 let hardConf = gg.newFun.getNewFunData(NewFunType.Difficulty, ChapterDifficulty.Hard); let hellConf = gg.newFun.getNewFunData(NewFunType.Difficulty, ChapterDifficulty.Hell); let AfkRewards = 0 if (gg.game.CurentBattle.BattleType == BattleType.Level) { if (gg.game.CurentBattle.Difficulty == ChapterDifficulty.Normal) { if (gg.game.CurentSelectChapterId >= normalConfId) { AfkRewards = StatisticsType.framAfkRewards } } else if (gg.game.CurentBattle.Difficulty == ChapterDifficulty.Hard) { if (gg.game.CurentSelectChapterId >= hardConf.chapter) { AfkRewards = StatisticsType.factoryAfkRewards } } else if (gg.game.CurentBattle.Difficulty == ChapterDifficulty.Hell) { if (gg.game.CurentSelectChapterId >= hellConf.chapter) { AfkRewards = StatisticsType.mineAfkRewards } } } if (AfkRewards) { let lastAddTime = gg.data.getStatistics(AfkRewards); if (lastAddTime == 0) { console.log("离线收益开启时间计数", gg.data.getCurentTime()); gg.data.setStatistics(AfkRewards, gg.data.getCurentTime()); } } } showReward() { let reward = []; let rewardStr = gg.game.CurentBattle.CurentChapterRewardStr; if (rewardStr != '') { reward = rewardStr.split('|'); } // if (zombieReward != '') { // reward.push(zombieReward); // } //奖励倍数 let type = gg.game.CurentSelectBattleType let itemsArray = [] let addRatio = 1; if (type == BattleType.Level) { addRatio += gg.data.getFightRewardRatio(); addRatio += gg.purchase.getMainLineRewardAdd(); } for (let i = 0; i < reward.length; i++) { let value = reward[i].split(',') let goodId = Number(value[0]) let itemNum = Math.floor(Number(value[1]) * (addRatio)) if (goodId == 104 || goodId == 105 || goodId == 106 || goodId == 107) { itemNum = itemNum; let boxRewardArray = gg.data.getFragmentNumArray(goodId + ',' + itemNum) let statsArray = MTools.mergeToStatsArray(boxRewardArray) for (let i = 0; i < statsArray.length; i++) { let array = statsArray[i].split('|') let id = Number(array[0]); let num = Number(array[1]); let item = new ItemData(id, num) itemsArray.push(item) } } else { if (goodId != 4) { itemNum = itemNum; } let item = new ItemData(goodId, itemNum) itemsArray.push(item) } } // this.dataList = itemsArray for (let i = 0; i < itemsArray.length; i++) { //隔帧处理 this.scheduleOnce(() => { let value = itemsArray[i] let item = instantiate(this.ui_singleItem) item.active = true item.parent = this.ui_content item.setPosition(0, 0) this.initItem(item, value) }, 0.01 * i) } } /**初始化单个物品 */ initItem(item: Node, value: ItemData) { let goodId = value.id let num = value.num item.getComponent(itemPic).setGoodId(goodId) let numLabel = item.getChildByName('numStr').getComponent(Label) numLabel.string = num.toString() } click_btnGet() { gg.audio.playEffect({ name: "点击音效" }); let curWaveNum = gg.game.CurentBattle.CurentWaveNum gg.sdk.reportDY("inLevel", `章节${gg.game.CurentBattle.getReportDYChapterId()}_${curWaveNum}-成功领取奖励`) for (let i = 0; i < this.dataList.length; i++) { let value = this.dataList[i]; let goodId = Number(value.id) let num = Number(value.num) gg.data.addItemNum(goodId, num * this.addNum); } gg.game.IsPlayedGame = true this.close(2) gg.game.enterMain(); } click_btnADGet() { gg.audio.playEffect({ name: "点击音效" }); gg.sdk.showVideoAd((res) => { if (res) { let curWaveNum = gg.game.CurentBattle.CurentWaveNum gg.sdk.reportDY("inLevel", `章节${gg.game.CurentBattle.getReportDYChapterId()}_${curWaveNum}-AD-成功双倍领取奖励`) this.addNum = 2 this.btnADGet.active = false //刷新界面数字 this.btnShareGet.active = false for (let i = 0; i < this.ui_content.children.length; i++) { let item = this.ui_content.children[i] let numLabel = item.getChildByName('numStr').getComponent(Label) numLabel.string = (Number(numLabel.string) * this.addNum).toString() } gg.game.CurentBattle.IsWatchAd = true } else { gg.ui.showToast('观看视频失败'); } }) } click_btnShareGet() { // 项目不启用分享双倍,保留空实现仅防止历史按钮绑定报错 gg.ui.showToast('该功能未开放'); } }