import FunBtns from "../game/FunBtns"; import Game from "../game/Game"; import { StorageKey } from "./StorageData"; /** * @description 游戏核心玩法数据 * @author 邹勇 */ export class GameData { public dataFinish: boolean = false; public savePropFinish: boolean = false; public savePropsFinish: boolean = false; public getPropsFnish: boolean = false; public configs: any = {}; public adShowConfig: ADShowCfg; /** 功能开启 依次是 0 互推 1 转盘 2 裂变 3 存钱罐 4 福袋 5 签到 6 常规提现 7 气泡红包组 8 福利礼包*/ public funOpenData: string[] = []; public gameData: PlayerProp = null; /** 标志位:刷新主界面货币 */ public init_coin: boolean = false; public updatePiggyBankValue: boolean = false; /** 标志位:刷新主界面头像 */ public init_head: boolean = false; /** 标志位:刷新主界面红点 */ public init_red_point: boolean = true; public props: Map = new Map(); public pools = [ { url: "game/prefab/tips", num: 20 }, { url: "game/prefab/coin", num: 20 } ]; /** 主页样式脚本 */ public gameStyle: Game = null; /** 入口按钮 */ public funBtns: FunBtns = null; /** * 初始化游戏数据:网络配置信息,用户信息 * @returns */ public async init() { let data: any = { "versionCode": gData.appData.version }; let response = await mk.http.sendData('getAllConfigInfo', data); if (response.errcode != 0) { if (response.errcode == -10003 || response.errcode == -20003) { //清除缓存 gData.loginData.reload(); } return; } mk.console.logSingle("getAllConfigInfo", response.data); this.initConfigs(response.data); //初始化topon mk.ad.init(); data = {}; response = await mk.http.sendData('getInfoCrypt', data); if (response.errcode != 0) { return; } mk.console.logSingle("getInfoCrypt", response.data); this.initPlayerProp(response.data) this.initProps(response.data.gameUserData); gData.guideData.init(); gData.guideWeakData.init(); gData.moduleData.forEach(element => { element.init(); }); data = {}; response = await mk.http.sendData('user/adShowConfig', data); if (response.errcode != 0) { return; } this.adShowConfig = response.data; mk.console.logSingle("user/adShowConfig", response.data); gData.adData.setFullInterShowStr(); this.dataFinish = true; } private initConfigs(data) { // console.log('config ', data); this.configs = data; this.funOpenData = this.configs.ServerConfig.Functionswitch.split(","); gData.safeDepositBoxData.richBankConfig = this.configs.RichBankTaskCfg; gData.loginData.popIdentifySwitch = this.configs.ServerConfig.popIdentifySwitch == '1'; gData.guideToWxData.guideToWxSwith = this.configs.ServerConfig.guideToWxSwith == '1'; gData.guideToWxData.money = this.configs.ServerConfig.addfriendmoney; gData.guideToWxData.setGhId(); } /** * 初始化玩家数据 */ private initPlayerProp(res_data) { this.gameData = new PlayerProp(); this.gameData.cashIndex = res_data.cashIndex; this.gameData.gameUserData = res_data.gameUserData; this.gameData.isSignInToday = res_data.isSignInToday; this.gameData.isWithdrawable = res_data.isWithdrawable; this.gameData.lastTime = res_data.lastTime; this.gameData.loginDays = res_data.loginDays; this.gameData.newPlayer = res_data.newPlayer; this.gameData.initPiggyBank(res_data.piggyBank); this.gameData.piggyBankCashTimes = res_data.piggyBankCashTimes; this.gameData.redMoney = res_data.redMoney == null ? 0 : res_data.redMoney; this.gameData.signInDay = res_data.signInDay; this.gameData.totalPiggyBankCashTimes = res_data.totalPiggyBankCashTimes; this.gameData.turntableTimes = res_data.turntableTimes; this.gameData.userTuCaoInfo = res_data.userTuCaoInfo; this.gameData.versioncfg = res_data.versioncfg; this.gameData.isFirstRedMoney = res_data.isFirstRedMoney; if (res_data.groupCode) { this.gameData.groupCode = res_data.groupCode; } console.log('ABTest ', res_data.groupCode); gData.adData.watchNumToday = res_data.dayVideoTimesForRedMoney == null ? 0 : res_data.dayVideoTimesForRedMoney; mk.data.setTAUserID(gData.loginData.uin); if (gData.loginData.isFirstIn) { gData.loginData.isFirstIn = false; mk.data.setTAEventRegister(); mk.data.sendDataEvent('ABTest', `触发${this.gameData.groupCode}方案`); //星云uid mk.data.setTAEventUserStr(0, 'xy_uid', gData.loginData.uin); //注册时版本号 mk.data.setTAEventUserStr(0, 'regtime_app_id', gData.appData.appVersion); //引导开关开启阶段注册的用户才保留此功能 if (gData.guideToWxData.guideToWxSwith) { console.log('BBB aaa '); mk.storage.setStorage('canShowGuideToWx', '1'); } } //当前版本号 mk.data.setTAEventUserStr(0, 'now_app_id', gData.appData.appVersion); //渠道号 mk.data.setTAEventUserStr(0, 'channel_id', gData.appData.umengChannel); gData.safeDepositBoxData.richBankCashAmount = res_data.richBankCashAmount; gData.safeDepositBoxData.currentRichBankCashTaskIndex = res_data.currentRichBankCashTaskIndex; gData.safeDepositBoxData.addRichBankFinishIndex = res_data.addRichBankFinishIndex; if (gData.safeDepositBoxData.currentRichBankCashTaskIndex > 0) { gData.safeDepositBoxData.addRichBankFinishIndex = gData.safeDepositBoxData.currentRichBankCashTaskIndex; } } /** * 保存单个数据 */ public async setProp(key: GameProp, value: number) { let data = { key: key + '', value: value + '' }; this.props.set(key, value); await mk.http.sendData('savePlayerProp', data); this.savePropFinish = true; } /** * 保存多个数据 */ public async setProps(arr: { key: GameProp, value: number }[]) { let needProp = {}; for (let i = 0; i < arr.length; i++) { needProp[arr[i].key + ''] = arr[i].value + ""; } let data = { needProp: needProp }; for (let i = 0; i < arr.length; i++) { this.props.set(arr[i].key, arr[i].value); } await mk.http.sendData('saveAllPlayerProp', data); this.savePropsFinish = true; } /** 获取属性 */ public getProp(key: GameProp): number { if (this.props == null) { return 0; } let value = this.props.get(key); return value == null ? 0 : value; } /** * 向服务器请求所有属性后更新 */ public async getAllProps() { let response = await mk.http.sendData('getAllPlayerProp', {}); if (response.errcode != 0) { return; } this.initProps(response.data); this.getPropsFnish = true; } private initProps(data) { if (data == null) { return; } for (let key in data) { this.props.set(parseInt(key), JSON.parse(data[key])); } } /** * 第二天需要重置的数据 */ public resetProps() { let arr = []; arr.push({ key: GameProp.sign_can, value: 1 }); arr.push({ key: GameProp.isAutoOpenPanel, value: 1 }); arr.push({ key: GameProp.isOpenBankOnCloseCash, value: 0 }); this.setProps(arr); } /** 是否是新用户 */ public isNewPlayer(): boolean { let v = this.getProp(GameProp.newPlayer); return v == 0; } } /** * 所有模块的非校验数据 */ export enum GameProp { /** -------------------- 通用玩家数据 ------------------------- */ /** 是否新手 0新手 1老手 */ newPlayer = 1, /** 当前新手引导步骤 */ guideID = 2, /** 需要自动弹界面 每次登录都弹 除首次 表示今日是否要自动开 1自动开 2不自动开 其他不处理*/ isAutoOpenPanel = 3, /** 关闭常规提现时需要自动开存钱罐 每天一次 表示今日有没有开过 */ isOpenBankOnCloseCash = 4, //看视频次数 videoTimes = 5, //提现次数 cashTimes = 6, //引导到微信 guideToWx = 7, /** ------------------ 游戏核心数据 --------------------------- */ /** 关卡数 */ levelNum = 10, /** 锤子道具数目 */ hammerPropNum = 1001, /** 重设道具数目 */ resetPropNum = 1002, /** 变色道具数目 */ changePropNum = 1003, /** 当前总分 */ curTotalScore = 11, /** ------------------ 转盘数据 ------------------------------ */ turnable_leftTimes = 20, /** ------------------ 存钱罐数据 ----------------------------- */ /** ------------------ 签到数据 ----------------------------- */ /** 上次签到进度 */ sign_last_bar = 120, /** 当前能否签到 */ sign_can = 121, /** ------------------ 红包提现 ----------------------------- */ /** 提现进度 */ redBag_cash_bar = 220, } /** * 玩家数据 */ class PlayerProp { /** 自定义不需要校验的数据 */ gameUserData = 0; _isSignInToday = 0; /** * 今日是否有签到 * - 0 未签到,表示可以签到 * - 1 有签到,表示不可签到 */ set isSignInToday(value: number) { this._isSignInToday = value; gData.sign.init_data = true; gData.gameData.init_red_point = true; } get isSignInToday(): number { return this._isSignInToday; } private _piggyBank: number = 0; /** 存钱罐存款 */ set piggyBank(value: number) { if (this._piggyBank === value) return; if (gData.gameData.gameData.isWithdrawable && value > 0) return;// 存钱罐可提现状态,不能增加存钱罐金额 this._piggyBank = value; gData.gameData.init_coin = true; gData.pigbank.init_data = true; gData.gameData.init_red_point = true; } get piggyBank(): number { return this._piggyBank; } /** 初始化 */ initPiggyBank(v) { this._piggyBank = v; } _isWithdrawable = 0; /** * 存钱罐能否提现 * - 0 不能提现 * - 1 能提现 */ set isWithdrawable(value: number) { if (this._isWithdrawable != value) { this._isWithdrawable = value; gData.pigbank.init_data = true; gData.gameData.init_red_point = true; } } get isWithdrawable(): number { return this._isWithdrawable; } /** 存钱罐每日提现次数 */ piggyBankCashTimes = 0; /** 累计存钱罐每日提现次数 */ totalPiggyBankCashTimes = 0; /** 提现进度 */ cashIndex = 0; /** 上次登录时间 */ lastTime = 0; /** 登录天数 */ loginDays = 0; newPlayer = 0; private _redMoney: number = 0; /** 红包币数量 */ set redMoney(value: number) { this._redMoney = value; gData.gameData.init_coin = true; gData.gameData.init_red_point = true; //当前红包币 mk.data.setTAEventUser(0, 'red_money_num', this._redMoney); } get redMoney(): number { return this._redMoney; } _signInDay = 0; /** 累计签到次数 客户端理解 上次签到天数 */ set signInDay(value: number) { if (this._signInDay === value) return; this._signInDay = value; gData.sign.init_data = true; } get signInDay(): number { return this._signInDay; } /** 转盘次数 */ turntableTimes = 0; /** 版本号 */ versioncfg = 0; /** 福袋数据 */ userTuCaoInfo = 0; /** 关卡数 */ levelNum = 0; /** 锤子道具数目 */ hammerPropNum = 0; /** 重设道具数目 */ resetPropNum = 0; /** 变色道具数目 */ changePropNum = 0; /** 能免费领红包 1 表示是新人第一次产出红包币,不用看视频*/ isFirstRedMoney = 0; /** ABTest分组id */ groupCode = 0; } /** * 奖励状态 */ export enum RewardState { /** 已领取 */ none = 1, /** 未解锁 */ lock = 2, /** 可领取 */ unlock = 3 } /** * 奖励类型 */ export enum RewardType { /** 红包币 */ redBag = 1, /** 毛币 */ rmb = 2, /** 金猪币 */ pigRmb = 3, } /** * 音频路径 */ export enum AUDIO_TYPE { /**主界面背景音乐*/ bgm = 'bgm', /**打开存钱罐界面播放一次*/ pigBank = 'pigBank', /**关卡玩法背景音乐*/ missionBg = 'missionBg', /**红包币领取界面关闭音效*/ rewardClose = 'rewardClose', /**红包币领取界面开启音效*/ rewardOpen = 'rewardOpen', /**红包界面打开音效*/ reward = 'reward', /**提现到账界面打开播放一次*/ receiptNotice = 'receiptNotice', /**通用按钮点击音效 */ button = 'button', /**转盘转动音效*/ turnableplay = 'turnableplay', /**转盘转动音效*/ turnplateDrawEnd = 'turnplateDrawEnd', /**主页背景音乐 */ music_startBg = "music_startBg", /**游戏背景音乐 */ music_gameBg = "music_gameBg", /**按钮点击 */ ef_button_click = "ef_button_click", /**红包打开 */ ef_redPacket_open = "ef_redPacket_open", /**红包来了音效 */ ef_redPacket_come = "ef_redPacket_come", /**消除4个 */ ef_bonus4 = "ef_bonus4", /**消除5个 */ ef_bonus5 = "ef_bonus5", /**消除6个 */ ef_bonus6 = "ef_bonus6", /**消除7个 */ ef_bonus7 = "ef_bonus7", /**消除8个 */ ef_bonus8 = "ef_bonus8", /**普通消除音效 */ ef_eliminate = "ef_eliminate", /**bouns消除音效 */ ef_eliminate_bonus = "ef_eliminate_bonus", /**胜利音效 */ ef_win = "ef_win", /**锤子 */ ef_change = "ef_change", /**刷新 */ ef_refresh = "ef_refresh", /**飞翔 */ ef_fly = "ef_fly", /**存入银行成功*/ saveSuccess = 'saveSuccess', } /** ECPM */ type ADShowCfg = { average_ecpm: number, insert_probability: number, is_show_banner: number, is_show_inter: number, } /**事件类型 */ export enum EVENT_TYPE { BACK_WxAuth = "BACK_WxAuth", UPDATE_CashNum = "UPDATE_CashNum", } /** 数据事件Id */ export enum DataEventId { /** 点击 */ guide = "guide", /** 点击跳过 */ guideSkip = "guideSkip", /** 按钮点击 */ button_click = "button_click", /** 看视频 */ video_init = "video_init", /** 看视频完成 */ video_end = "video_end", /** 福袋功能 */ fudaiFunction = "fudaiFunction", /** 互推功能 */ hutuiFunction = "hutuiFunction", /** 关卡 */ level = "level", /** 常规提现-红包币提现 */ commonWithDrawal = "commonWithDrawl", /** 存钱罐提现 */ jarWithDrawal = "jarWithDrawal", /** 签到提现 */ signWithDrawal = "signWithDrawal", /** 激励视频ecpm */ ad_videoEcpm = 'ad_video', /** 开屏ecpm */ ad_openEcpm = 'ad_open', /** 引导到微信 (加我送钱) */ guideToWx = 'guideToWx', /** 广告点击 */ ad_click = 'ad_click', } /** 视频广告类型 */ export enum VideoAdType { Null = "", /** 关卡积分红包 */ LevelScoreRedBag = "关卡消除红包", /** 主界面气泡红包 */ StartQiPaoRedBag = "主界面气泡红包", /** 关卡气泡红包 */ LevelQiPaoRedBag = "关卡气泡红包", /** 转盘 */ Turntable = "转盘视频", /** 福袋视频" */ Fudai = "福袋视频", /** 签到视频 */ Sign = "签到视频" }