import { Log } from "../core/utils/Log"; import { Data } from "./Data"; /** * 游戏数据 */ export class GameData extends Data { public openRecommend = false; // /**当天邀请次数 */ // public now_invite_num = 0; // /**当天播放视频次数 */ // public now_play_video_num = 0; /**当前购买神将等级 */ public buyLv: number; /**当前购买神将价格 */ public buyPrice: number; /**离线时间 */ public differTime: number = 0; /**离线奖励 */ public totalOutput: number = 0; /**当前拥有神将 */ public generals: String; /**当前拥有未显示神将 */ private _myGenerals: Array = []; /** * 飞行宝箱剩余的次数 */ public flyBoxTimes: number = 0; /** * 飞行宝箱领取间隔 */ public flyBoxIntervalTime = 1000 * 60 * 2; /**本地缓存神将数据 */ private _myLocalData: { id: number, myLocalGenerals: Array<{ index: number, generalLv: number }> }; /**切磋剩余免费次数 */ public battleRemainder: number; /**切磋剩余增加次数 */ public RemainderAddTimes: number; /**切磋观看视频增加的次数 */ public RemainderHadAddTimes: number; /**转盘剩余抽奖次数*/ public drawTimes = 0; /**高级抽奖剩余观看视频次数*/ public videoTimes = 0; /**神石提现等级*/ public diamondWithdrawGrade = 0; /**等级红包已领取等级*/ public lvRedPacket = 0; /** *我的好友数据 */ public myFriendDatas: Array<{ id: number, lv: number, nickName: string, avator: string }> = []; /** *我的仇人数据 */ public myAvengeDatas: Array<{ attackUserID: number, attackUserLv: number, attackUserName: string, attackUserAvator: string, createTime: number }> = []; /** * 红包数据 * */ public myRedPacketDatas: Array<{ id: number, type: number, lv: number, enemyID: number, enemyName: string, enemyAvator: string, enemyLv: number, canOpenTime: number, createTime: number }> = []; /**神台数据 */ public myFissionData: { g1Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>, g2Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>, g3Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>, g4Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>, g5Members: Array<{ userID: number, avatar: string, nickName: string, revenueAmount: number, totalRevenueAmount: number, lv: number }>, parentUin: number, parentAvatar: string, parentNickname: string }; /**是否更新贡献提现记录 */ public hasNewwithdrawalLog = true; /**贡献提现记录 */ public withdrawalLogs = []; /**被攻击信息 */ public beAttackDatas: Array<{ attackUserID: number, attackUserName: string, beAttackLossType: number, beAttackLossNum: string }>; /**被攻击数据发生改变 */ // public hasBeAttackUpdate: boolean = false; /**切磋数据发生改变 */ public hasBattleListUpdate: boolean = false; /**复仇数据发生改变 */ public hasAvengeListUpdate: boolean = false; /**好友挑战数据改变 */ public hasBattleLogUpdate: boolean = false; /**红包数据发生改变 */ public hasNewRedPacketUpdate: boolean = false; /**1级好友数据发生改变显示用 */ public hasG1BembersUpdate: boolean = false; /**2级好友数据发生改变 */ public hasG2BembersUpdate: boolean = false; /**3级好友数据发生改变 */ public hasG3BembersUpdate: boolean = false; /**4贡献数据发生改变 */ public hasG4BembersUpdate: boolean = false; /**5级好友数据发生改变 */ public hasG5BembersUpdate: boolean = false; /**取消出售神将 */ public cancleSellGeneral: boolean = false; /**出售神将确认 */ public hasSellGeneral: boolean = false; /**出售神将信息 */ public sellGeneralData: { lv: number, index: number }; /**是否添加神将*/ public isAddRole: boolean = false; /**战斗结束 */ public hasBattleOver: boolean = false; /**战斗结束刷新切磋数据 */ public hasBattleOverRefresh: boolean = false; /**是否请求过好友数据和复仇数据 */ public hasRequestFriendData = false; /**是否播放加金币音效 */ public playAddMoneySound = true; /**是否在播放金币飞行特效**/ public isPlayMoneyAnim = false; /**分红数据 */ public gameBonus: { bonusTotalUserNum: number, bonusUserNum: number, bonus: number, logs: { name: string, time: string }[] }; /**是否播放奖励角色出场动画*/ public isPlayPrizeRoleAnim = false; /**是否在播放金币动画控制消息同步*/ public isPlayAddMoneyAnim = false; /**是否在播放神石动画控制消息同步*/ public isPlayAddDiamondAnim = false; /**是否在购买神将*/ public isBuying = false; /**是否移动神将*/ public isMoveing = false; /**是否正在观看视频*/ public isPlayVideo = false; /**是否要同步数据 */ public needSyncMoney = false; public getMyLocalData(id: number): { id: number, myLocalGenerals: Array<{ index: number, generalLv: number }> } { if (!this._myLocalData) { this._myLocalData = JSON.parse(localStorage.getItem("myLocalData")); if (!this._myLocalData) {// 如果本地没有缓存数据 this.initLocalData(id); } else { if (this._myLocalData.id != id) {//如果是不同账号 this.initLocalData(id); } else { if (!this.initGenerals.length) { this._myLocalData.myLocalGenerals = []; this.saveLocalData(); } else { if (this._myLocalData.myLocalGenerals.length != this.initGenerals.length) { this.initLocalData(id); } else { if (this.checkGenerals(this._myLocalData.myLocalGenerals.concat(), this.initGenerals.concat())) { this.initLocalData(id); } } } } } } return this._myLocalData; } /** 检测服务器和本地神将等级是否一致 */ private checkGenerals(client_generals, server_generals) { for (let i = 0; i < client_generals.length; i++) { let hasIndex = server_generals.indexOf(client_generals[i].generalLv); if (hasIndex != -1) { server_generals.splice(hasIndex, 1) } } return server_generals.length; } private initLocalData(id: number) { this._myLocalData = { id: 0, myLocalGenerals: [] } this._myLocalData.id = id; for (let i = 0; i < this.initGenerals.length; i++) { this._myLocalData.myLocalGenerals.push({ index: i > 11 ? -1 : i, generalLv: this.initGenerals[i] }); } this.saveLocalData(); } /**增加本地神将 */ public addMyLocalGenral(index: number, lv: number) { for (let i = 0; i < this._myLocalData.myLocalGenerals.length; i++) { if (index != -1 && this._myLocalData.myLocalGenerals[i].index == index && this._myLocalData.myLocalGenerals[i].generalLv == lv) { Log.warn(index + "有值"); return; } } this._myLocalData.myLocalGenerals.push({ index: index, generalLv: lv }); this.saveLocalData(); } public deleteMyLocalGenral(index: number, lv: number) { for (let i = 0; i < this._myLocalData.myLocalGenerals.length; i++) { if (this._myLocalData.myLocalGenerals[i].index == index && this._myLocalData.myLocalGenerals[i].generalLv == lv) { this._myLocalData.myLocalGenerals.splice(i, 1); return; } } Log.warn("没有找到本地对应的神将"); } public updateLocalGeneral(oldIndex: number, newIndex: number) { let oldGen; let newGen; for (let i = 0; i < this._myLocalData.myLocalGenerals.length; i++) { if (this._myLocalData.myLocalGenerals[i].index == oldIndex) { oldGen = this._myLocalData.myLocalGenerals[i]; } if (this._myLocalData.myLocalGenerals[i].index == newIndex) { newGen = this._myLocalData.myLocalGenerals[i]; } } if (oldGen) { oldGen.index = newIndex; } if (newGen) { newGen.index = oldIndex; } this.saveLocalData(); } public saveLocalData() { localStorage.setItem("myLocalData", JSON.stringify(this._myLocalData)); } /**初始化服务器拥有神将 */ private get initGenerals(): Array { if (!this._myGenerals.length) { let str = this.generals.substring(1, this.generals.length - 1); if (!str) { this._myGenerals = []; } else { let arr = str.split(","); for (let i = 0; i < arr.length; i++) { this._myGenerals.push(Number(arr[i])); } } } return this._myGenerals; } /**更新本地裂变部分贡献值 */ public updateMyFessiongDatas(data: any, isAdd: boolean = true) { for (let k = 0; k < data.length; k++) { let newData = data[k]; let isFind = false; for (let i = 1; i < 6; i++) { let members = this.myFissionData[`g${i}Members`]; for (let j = 0; j < members.length; j++) { if (members[j].userID == newData.userID) { this[`hasG${i}BembersUpdate`] = true; isFind = true; if (isAdd) { members[j].revenueAmount += newData.addRevenueAmount; members[j].totalRevenueAmount += newData.addRevenueAmount;//新增贡献 } else { members[j].revenueAmount = 0; } break; } } if (isFind) { break; } } } } /**一键领取贡献更新本地贡献数据 */ public clearRevenue() { for (let i = 1; i < 6; i++) { let members = this.myFissionData[`g${i}Members`]; for (let j = 0; j < members.length; j++) { if (members[j].revenueAmount) { this[`hasG${i}BembersUpdate`] = true; members[j].revenueAmount = 0; } } } } /**判断当前是否可领取贡献 红点用*/ public getAllRevenueAmount() { if (this.myFissionData) { for (let i = 1; i < 6; i++) { let members = this.myFissionData[`g${i}Members`]; for (let j = 0; j < members.length; j++) { if (members[j].revenueAmount > 0) { return true; } } } } return false; } }