import { _decorator, Component, Node, Label } from 'cc'; import { DataSystem } from '../../core/data/DataSystem'; import { Http, HttpResponseCode } from '../../core/net/Http'; import { WindowOpenMode } from '../../core/ui/window/WindowOpenMode'; import { WindowSystem } from '../../core/ui/window/WindowSystem'; import { ConfigData } from '../../data/ConfigData'; import { UserData } from '../../data/UserData'; import { UserHeroData } from '../../hero/UserHeroData'; import { PVPCardData } from '../../pvp/PVP'; import { ReportThinking } from '../../ReportThinking'; import { BeAttackBonusData, FightData } from '../FightData'; import { FightRewardItem } from '../item/FightRewardItem'; const { ccclass, property } = _decorator; @ccclass('RevengeNoticeUI') export class RevengeNoticeUI extends Component { @property({ type: Label, tooltip: "文本敌人名字" }) txtEnemyName: Label = null; @property({ type: [FightRewardItem], tooltip: "奖励类型Item数组" }) rewardItems: FightRewardItem[] = []; private revengeData: BeAttackBonusData; private isCanClick = true; start() { let fightData = DataSystem.getData(FightData); if (fightData.beAttackNoticeList && fightData.beAttackNoticeList.length > 0) { this.revengeData = fightData.beAttackNoticeList[0]; this.txtEnemyName.string = this.revengeData.nickName; ReportThinking.currency_decrease(this.revengeData.lossType, DataSystem.getData(UserData)[this.revengeData.lossType], this.revengeData.lossNum, -DataSystem.getData(UserData)[this.revengeData.lossType] - this.revengeData.lossNum, 'pvpLoss'); let type = 1; switch (this.revengeData.lossType) { case "money": type = 1; DataSystem.getData(UserData).money >= this.revengeData.lossNum ? DataSystem.getData(UserData).money -= this.revengeData.lossNum : DataSystem.getData(UserData).money = 0; break; case "diamond": type = 2; DataSystem.getData(UserData).diamond >= this.revengeData.lossNum ? DataSystem.getData(UserData).diamond -= this.revengeData.lossNum : DataSystem.getData(UserData).diamond = 0; break; case "bonus": type = 3; DataSystem.getData(UserData).bonus >= this.revengeData.lossNum ? DataSystem.getData(UserData).bonus -= this.revengeData.lossNum : DataSystem.getData(UserData).bonus = 0; break; case "prestige": type = 4; DataSystem.getData(UserData).prestige >= this.revengeData.lossNum ? DataSystem.getData(UserData).prestige -= this.revengeData.lossNum : DataSystem.getData(UserData).prestige = 0; break; } this.rewardItems[type - 1].node.active = true; this.rewardItems[type - 1].txtRewardNum.string = `${this.revengeData.lossNum > 10000 ? (this.revengeData.lossNum / 1000).toFixed(1) + "k" : this.revengeData.lossNum}`; } } /**获取PVP战斗参数*/ private getPVPParam(data: any) { let g1: Array = []; let g2: Array = []; let key: number = parseInt(data.key); let baseHit = DataSystem.getData(ConfigData).get("serverConfig").pvpBaseDamge; let buff = DataSystem.getData(ConfigData).get("buff"); let myHeros: any[] = data.myHeroDatas.heroDatas; let myFHeros: any[] = data.myFriendHeroDatas; let enemyHeros: any[] = data.enemyHeroDatas.heroDatas; let enemyFHeros: any[] = data.enemyFriendHeroDatas; let userData = DataSystem.getData(UserHeroData); for (let i = 0; i < myHeros.length; i++) { let tempHero = userData.get(myHeros[i].id).client; let temp = new PVPCardData(myHeros[i].id, myHeros[i].lv, myHeros[i].star, tempHero.color, tempHero.camp, data.myHeroDatas.avator); g1.push(temp); } for (let i = 0; i < myFHeros.length; i++) { let tempHero = userData.get(myFHeros[i].heroData.id).client; let temp = new PVPCardData(myFHeros[i].heroData.id, myFHeros[i].heroData.lv, myFHeros[i].heroData.star, tempHero.color, tempHero.camp, myFHeros[i].avator); g1.push(temp); } for (let i = 0; i < enemyHeros.length; i++) { let tempHero = userData.get(enemyHeros[i].id).client; let temp = new PVPCardData(enemyHeros[i].id, enemyHeros[i].lv, enemyHeros[i].star, tempHero.color, tempHero.camp, data.enemyHeroDatas.avator); g2.push(temp); } for (let i = 0; i < enemyFHeros.length; i++) { let tempHero = userData.get(enemyFHeros[i].heroData.id).client; let temp = new PVPCardData(enemyFHeros[i].heroData.id, enemyFHeros[i].heroData.lv, enemyFHeros[i].heroData.star, tempHero.color, tempHero.camp, enemyFHeros[i].avator); g2.push(temp); } return { g1: g1, g2: g2, key: key, baseHit: baseHit, buff: buff }; } /** * PVP准备 * @param type pvp类型 0 随机 1 好友 2 复仇 3 挑战 * @param enemyID 敌人编号 如果是随机 就填0 */ private async PvpReady(type: number, enemyID: number) { let result = await this.getComponent(Http).send("/api/pvp/ReadyPVP", { type: type, enemyID: enemyID }); if (result && result.code == HttpResponseCode.Success) { let param = this.getPVPParam(result.data); console.log("Ready Param: ", param); WindowSystem.open("prefabs/pvp/pvp", WindowOpenMode.CloseAndAdd, [param]); } else { WindowSystem.showTips("请求失败"); } } /**点击复仇*/ private async onClickRevenge() { if (!this.isCanClick) return; this.isCanClick = false; await this.PvpReady(2, this.revengeData.enemyID); } onDestroy() { let fightData = DataSystem.getData(FightData); fightData.beAttackNoticeList && fightData.beAttackNoticeList.splice(0, 1); if (fightData.beAttackNoticeList && fightData.beAttackNoticeList.length > 0) { WindowSystem.open("prefabs/ui/fight/revengeNoticeUI", WindowOpenMode.NotCloseAndAdd); } } }