/** 现金夺宝数据类 */ import AdM from "../manager/AdM" import GameM from "../manager/GameM" import UiM, { PANEL_NAME } from "../manager/UiM" import TreasureItem from "../prefabs/TreasureItem" import EffectNode from "../ui/EffectNode" import OfficialNode from "../ui/OfficialNode" import Treasure from "../ui/Treasure" import LogUtil from "../utils/LogUtil" import { Utils } from "../utils/Utils" import { HTTP_TYPE } from "./CommonData" import { STORAGE_KEY } from "./GlobalStorage" export default class TreasureData { private static instance: TreasureData = null static get Instance(): TreasureData { if (!TreasureData.instance) { TreasureData.instance = new TreasureData() } return TreasureData.instance } /** 现金夺宝 * id 档次 * mannum 开奖需要人次 * limitman 单人人次上限 * requestfrequency 刷新频率 * amount 金额 */ treasureCfg: any = null //现金夺宝服务器总数据 /** * 数据 name 开奖名字 * phase 开奖期数 * joinManInfoQueue 参加者队列 * drawid drawid * joinTimes 个人参加次数 * joinTotal 参加总人数 */ treasureData = null //当前抽奖item curTreasureItem = null //抽奖类型 0 用券 1 看视频 drawTreasureType = 0 //打开现金抽奖界面时计时时间,用来计算刷新单条时间 treasureOpenTime = 0 //玩家参与抽奖的开奖结果 /** * uin 参加者uin * recordId 期数Id * phase 期数 * outTime 过期时间 * nickName 中奖人名字 * headimgurl 中奖人头像 * isWin 是否中奖 * isNotice 是否弹窗 */ treasureJoinInfo = null //显示中奖结果index private resultIndex = 0 /** 参加冷却 服务器返回结束后才能点下一次 */ joinCool = false /** 参加抽奖期数数组 */ joinDraw = '' /** 每日抽奖次数 */ treasureDailyTimes = 0 //------现金抽奖 /** 获取现金夺宝总数据 */ getTreasureData() { GameM.httpM.sendDatas(HTTP_TYPE.getLuckDrawInfo, null, TreasureData.Instance.resultTreasureData.bind(this)) } /** 现金夺宝数据返回 */ resultTreasureData(data) { this.treasureData = data if (UiM.Instance.treasureNode) { UiM.Instance.treasureNode.getComponent(Treasure).onGetTreasureData() } } /** 获取现金夺宝单条数据 */ freshTreasureData(id) { let data = { "drawId": id.toString() } GameM.httpM.sendDatas(HTTP_TYPE.refreshluckDrawInfo, data, TreasureData.Instance.resultFreshTreasureData.bind(this)) } /** 获取现金夺宝单条数据返回 */ resultFreshTreasureData(data) { // console.log('resultFreshTreasureData ', data) let hasOpen = this.setTreasureDataOne(data) if (UiM.Instance.treasureNode) { UiM.Instance.treasureNode.getComponent(Treasure).freshTreasureDataOne(hasOpen, data) } } /** 通过id获取现金抽奖服务器数据 * @param id 抽奖档次 */ getTreasureDataById(id) { let len = this.treasureData.length let data = null for (var i = 0; i < len; i++) { // phaseStr = this.treasureData[i].draw_id if (this.treasureData[i].drawid == id) { data = this.treasureData[i] break } } return data } /** 刷新单条服务器数据并返回是否开奖 */ setTreasureDataOne(data) { let len = this.treasureData.length let phaseStr = 0 let nPhaseStr = data.phase.toString() //是否开奖 let hasOpen = false for (var i = 0; i < len; i++) { phaseStr = this.treasureData[i].phase.toString() if (this.treasureData[i].drawid == data.drawid) { if (phaseStr == nPhaseStr) { hasOpen = false } else { hasOpen = true } this.treasureData[i] = data // if (this.treasureData[i].joinManInfoQueue == null) { // this.treasureData[i].joinManInfoQueue = [] // } break } } return hasOpen } /** 现金抽奖 */ updateJoin(data) { LogUtil.logV("this.treasureDailyTimes three", this.treasureDailyTimes) this.joinCool = true setTimeout(() => { this.joinCool = false }, 1000); GameM.httpM.sendDatas(HTTP_TYPE.join, data, TreasureData.Instance.resultJoin.bind(this), TreasureData.Instance.resultJoinFail.bind(this)) } resultJoin() { if (this.drawTreasureType == 0) { GameM.commonData.roleData.ticket-- GameM.commonData.updateRoleData() if (GameM.commonData.roleData.ticket <= 0) { UiM.Instance.treasureNode.getComponent(Treasure).freshVideo() } } LogUtil.logV("this.treasureDailyTimes four", this.treasureDailyTimes) if (UiM.Instance.treasureNode) { UiM.Instance.treasureNode.getComponent(Treasure).refreshLabs() } if (this.curTreasureItem) { let item = this.curTreasureItem.getComponent(TreasureItem) item.resultJoin() } this.joinCool = false EffectNode.instance.PlayTip('参与抽奖成功!') } resultJoinFail(errmsg) { TreasureData.Instance.joinCool = false EffectNode.instance.PlayTip(errmsg) } private luckMoney = 0 /** 现金抽奖 */ luckycash(recordId, money) { this.luckMoney = money let data = { "recordId": recordId, 'appVersion': GameM.commonData.appVersion } GameM.httpM.sendDatas(HTTP_TYPE.luckycash, data, TreasureData.Instance.resultLuckycash.bind(this), TreasureData.Instance.resultLuckycashFail.bind(this)) } /** 现金抽奖返回 */ resultLuckycash(data) { if (data.CashMode == 2) { UiM.Instance.onPanel(PANEL_NAME.OfficialNode, false, () => { UiM.Instance.officialNode.getComponent(OfficialNode).init(this.luckMoney, data.withdrawalCode); AdM.onSendEvent('publicmoney_2', '公众号提现-现金夺宝', 'publicmoney') }) } AdM.setTAEventUser(1, 'withdraw_amount', this.luckMoney) UiM.Instance.treasureNode.getComponent(Treasure).resultLuckycash(data.CashMode != 2) } resultLuckycashFail(errmsg) { EffectNode.instance.PlayTip(errmsg) if (UiM.Instance.treasureNode) { UiM.Instance.treasureNode.getComponent(Treasure).tixianFail() } } /** 抽奖记录 */ getLuckyLottery(drawid) { let data = { "drawid": drawid.toString() } GameM.httpM.sendDatas(HTTP_TYPE.getLuckyLottery, data, TreasureData.Instance.resultGetLuckyLottery.bind(this)) } /**获取滚动奖励信息 */ getRandomLottery() { GameM.httpM.sendDatas(HTTP_TYPE.getShouYeLuckyLottery, null, TreasureData.Instance.resultGetRandomLottery.bind(this)) } /** 抽奖记录返回 */ resultGetLuckyLottery(data) { LogUtil.logV("resultGetLuckyLottery", "result") UiM.Instance.treasureNode.getComponent(Treasure).onShowRecord(data) } /** 滚动奖励返回 */ resultGetRandomLottery(data) { LogUtil.logV("resultGetRandomLottery", "result") if (cc.isValid(UiM.Instance.treasureNode)) { UiM.Instance.treasureNode.getComponent(Treasure).showScrollInfo(data) } } /** 现金抽奖配置 */ getLuckydrawConfig() { GameM.httpM.sendDatas(HTTP_TYPE.getLuckydrawConfig, null, TreasureData.Instance.resultLuckydrawConfig.bind(this)) } /** 现金抽奖配置返回 */ resultLuckydrawConfig(data) { this.treasureCfg = data } getLuckydrawCfgById(drawid: number) { let len = this.treasureCfg.length let cfg = null for (var i = 0; i < len; i++) { if (drawid == this.treasureCfg[i].drawid) { cfg = this.treasureCfg[i] break } } return cfg } /** 获取参与的抽奖结果 */ getLotteryresults() { GameM.httpM.sendDatas(HTTP_TYPE.lotteryresults, null, TreasureData.Instance.resultLotteryresults.bind(this)) } /** 参与的抽奖结果返回 */ resultLotteryresults(data) { this.resultIndex = 0 this.treasureJoinInfo = data if (UiM.Instance.treasureNode) { UiM.Instance.treasureNode.getComponent(Treasure).showResult() } } /** 更新抽奖结果 */ updateLottery(recordId) { let data = { "recordId": recordId } GameM.httpM.sendDatas(HTTP_TYPE.updatelottery, data) } getCurLotteryresult() { if (!this.treasureJoinInfo) { return null } let curLottery = null for (var i = this.resultIndex; i < this.treasureJoinInfo.length; i++) { curLottery = this.treasureJoinInfo[i] this.resultIndex++ if (!curLottery.isNotice) { break } } return curLottery } /** 更改本地参与抽奖数据 */ changeDrawLocalData(phase, add = true) { let str = phase + "," if (add) { this.joinDraw += str } else { this.joinDraw.replace(str, '') } let key = 'dddddddddddddddddddddddddddddddd' let d = Utils.Encrypt(this.joinDraw, key, GameM.commonData.appid) GameM.globalStorage.setStorage(STORAGE_KEY.joinDraw, d) } /** 获取是否抽奖本期状态 */ getDrawLocalData(phase) { let str = phase + "," if (this.joinDraw.indexOf(str) != -1) { this.changeDrawLocalData(phase, false) return true } return false } /** 获取当日抽奖次数 */ getDailyLimit() { GameM.httpM.sendDatas(HTTP_TYPE.getDailyLimit, null, TreasureData.Instance.resultDailyLimit.bind(this)) } resultDailyLimit(data) { LogUtil.logV("this.treasureDailyTimes eight", this.treasureDailyTimes) if (data != null) { this.treasureDailyTimes = data } LogUtil.logV("this.treasureDailyTimes nine", this.treasureDailyTimes) if (UiM.Instance.treasureNode) { UiM.Instance.treasureNode.getComponent(Treasure).freshLimitLab() } } }