123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532 |
- /** @format */
- import {Data, GameControl, Mgr} from '../GameControl'
- import {BaseUI} from './BaseUI'
- import {ACTIVITY_TYPE, APP_TYPE, DIS_ID, EVENT, GOODS, GOODS_TYPE, LANGUAGE_TYPE, LOCAL} from '../enums/Enum'
- import {Log} from '../utils/LogUtils'
- import {ccUtils} from '../utils/ccUtils'
- import {UI} from '../enums/UI'
- import {msgCmd} from '../proto/msg_cmd'
- import {
- activityGetConfListRsp,
- activityTimeListNty,
- adventureDataRsp,
- boxGetAwardRsp,
- altarBattleRsp,
- altarDataRsp,
- cityDataSend,
- debrisGetDataRsp,
- embattleBattleRsp,
- embattleGetDataRsp,
- equipGetDataRsp,
- equipOnekeyUpgradeStarRsp,
- equipResetRsp,
- equipUpgradeRsp,
- equipUpgradeStarRsp,
- firstRechargeAwardRsp,
- firstRechargeDataRsp,
- firstRechargeNty,
- heroChangeNty,
- heroGetDataRsp,
- heroOnekeyUpgradeStarRsp,
- heroResetRsp,
- heroUpgradeRsp,
- heroUpgradeStarRsp,
- heroWearEquipRsp,
- login,
- loginRsp,
- manualGetDataRsp,
- payCurrency,
- payDebrisNty,
- rewardInfo,
- skillCardGetDataRsp,
- skillCardUpgradeRsp,
- skillCardUpgradeStarRsp,
- talentGetDataRsp,
- user,
- popGiftNty,
- popGiftChangeNty,
- popGiftDataRsp,
- relicDataNty,
- simpleMail,
- sendMail,
- createOrderNty,
- onlineAwardNty,
- cityDataRsp,
- } from '../proto/game'
- import {action} from 'mobx'
- import {activityTimeInfo, card, equip, hero, idNum} from '../proto/typedef'
- import {TalentConfig} from '../config/TalentConfig'
- import {GoodsConfig} from '../config/GoodsConfig'
- import {IRewardNty} from '../interface/UIInterface'
- import {ICard, IEquip, IRole, ICardDebris, ITimeGift} from '../interface/GlobalInterface'
- import {RanksLevelConfig} from '../config/RanksLevelConfig'
- import UserGuide from '../userguide/UserGuide'
- import {HttpUrl} from '../data/HttpUrl'
- /** @format */
- const {ccclass, property} = cc._decorator
- @ccclass
- export default class MainScene extends BaseUI {
- async onLoad() {
- //屏蔽多点触摸 (屏蔽后setSwallowTouches无法吞噬)
- //cc.macro.ENABLE_MULTI_TOUCH = false
- //关闭FPS
- cc.debug.setDisplayStats(false)
- //开启动态合图
- cc.macro.CLEANUP_IMAGE_CACHE = false
- cc.dynamicAtlasManager.enabled = true
- cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE)
- await this.startGame()
- }
- async startGame() {
- HttpUrl.init()
- let isInit = await GameControl.init()
- if (!isInit) {
- Log.error('游戏初始化失败')
- return
- }
- Mgr.platform.hideSplash()
- let assets: cc.JsonAsset = await this.loadSync(cc.resources, 'version', cc.JsonAsset)
- let appType = assets?.json.appType
- Mgr.event.add(EVENT.webSocketOpen, this, () => {
- Data.main.webSocketCon = true
- Mgr.ui.hideLoading()
- //Mgr.ui.tip(LANGUAGE_TYPE.serverConnect)
- //游戏内断线重连
- if (Data.user.account && !Mgr.ui.getUI(UI.LoginUI)) {
- let loginReq = login.create()
- loginReq.sid = 1
- loginReq.account = Data.user.account
- Mgr.net.send(msgCmd.cmd_login, loginReq)
- }
- })
- Mgr.event.add(EVENT.webSocketClose, this, () => {
- Data.main.webSocketCon = false
- if (!Mgr.ui.getUI(UI.LoadingUI)) Mgr.ui.showLoading(LANGUAGE_TYPE.connectServer, false, false)
- //Mgr.ui.tip(LANGUAGE_TYPE.serverCut)
- })
- this.registerNetEvent()
- Data.main.texBundle = await ccUtils.getBundleAsync('texture')
- //加载所有角色spine
- Data.main.texBundle.loadDir('Public/role/spine', sp.SkeletonData, (error, assets: sp.SkeletonData[]) => {
- if (error) {
- Log.error(error)
- } else {
- let guideSp
- for (let i = 0; i < assets.length; i++) {
- Data.main.roleSpineMap.set(assets[i].name, assets[i])
- if (assets[i].name == 'yuelunche') guideSp = assets[i]
- assets[i]['_ref'] = Infinity
- }
- //初始新手引导
- let userGuideNode = cc.find('userguide', this.node)
- userGuideNode.zIndex = 9999
- Mgr.global.userGuideCom = userGuideNode.getComponent(UserGuide)
- Mgr.global.userGuideCom.init(guideSp, Data.main.texBundle)
- Mgr.ui.show(UI.LoginUI)
- }
- })
- }
- @action
- registerNetEvent() {
- Mgr.net.addTop(msgCmd.cmd_login_rsp, this, (data: loginRsp) => {
- if (Data.main.payData.length > 0) {
- for (let payObj of Data.main.payData) {
- Mgr.net.send(msgCmd.cmd_recharge_result, payObj)
- }
- Data.main.payData.length = 0
- }
- })
- Mgr.net.addTop(msgCmd.cmd_user, this, (data: user) => {
- Data.user.uid = data.uid
- Data.user.nickname = data.nickname
- Data.user.level = data.level
- Data.user.exp = data.exp
- Data.user.avatar = data.avatar
- Data.user.renameTime = data.renameTime
- Data.user.createTime = data.createtime
- for (let idNum of data.currency) {
- Mgr.goods.setGoodsNum(idNum.id, idNum.num)
- this.addReadyBox(idNum)
- }
- Data.main.loginTime = data.svrtime
- Data.main.serverTime = data.svrtime
- //开始全局时间计时器
- Data.main.globalTime = 0
- Data.main.secondTime = 0
- Data.main.minutesTime = 0
- Mgr.time.globalTimer()
- console.log(Date.Format('当前服务器时间:MM/dd/yyyy hh:mm:ss', data.svrtime))
- Mgr.storage.init(data.uid, '1')
- Mgr.time.initLoginDate(data.svrtime)
- })
- Mgr.net.addTop(msgCmd.cmd_pay_currency, this, (data: payCurrency) => {
- for (let idNum of data.now) {
- Mgr.event.trigger(EVENT.goodsChangeSync, idNum.id, idNum.num - Mgr.goods.getGoodsNum(idNum.id))
- Mgr.goods.setGoodsNum(idNum.id, idNum.num)
- }
- })
- Mgr.net.addTop(msgCmd.cmd_reward_info, this, (data: rewardInfo) => {
- let changeArr: idNum[] = []
- let syncArr: idNum[] = []
- let iRoles: IRole[] = []
- let iCards: ICard[] = []
- let iEquips: IEquip[] = []
- let debrisArr: idNum[] = []
- for (let idNum of data.added.currency) {
- let dur = idNum.num - Mgr.goods.getGoodsNum(idNum.id)
- if (dur > 0) {
- changeArr.push({id: idNum.id, num: dur})
- } else {
- syncArr.push({id: idNum.id, num: dur})
- }
- Mgr.goods.setGoodsNum(idNum.id, idNum.num)
- //处理队伍经验
- if (idNum.id == GOODS.exp) {
- Data.user.exp = idNum.num
- let cfg = RanksLevelConfig[Data.user.level]
- if (cfg && idNum.num >= cfg.exp) {
- Data.user.exp = cfg.exp
- }
- }
- this.addReadyBox(idNum, false)
- }
- for (let hero of data.added.heroes) {
- let role = Mgr.global.buildIRole(hero)
- Data.user.roles.push(role)
- iRoles.push(role)
- }
- if (data.added.heroes.length > 0) {
- Mgr.goods.sortRole()
- Mgr.goods.reactRolesChange()
- }
- for (let card of data.added.skillCard) {
- let iCard = Mgr.global.buildICard(card)
- Data.user.cards.push(iCard)
- iCards.push(iCard)
- }
- if (data.added.skillCard.length > 0) {
- Mgr.goods.sortCard()
- Mgr.goods.reactCardsChange()
- }
- for (let equip of data.added.equip) {
- let iEquip = Mgr.global.buildIEquip(equip)
- Data.user.equips.push(iEquip)
- iEquips.push(iEquip)
- }
- if (data.added.equip.length > 0) {
- Mgr.goods.sortEquip()
- Mgr.goods.reactEquipsChange()
- }
- for (let debris of data.added.debris) {
- let has = Data.user.cardDebris.find(item => item.id == debris.id)
- let changeDur = debris.num - (has ? has.num : 0)
- let cardDebris = Mgr.global.buildICardDebris(debris, has)
- if (!has) Data.user.cardDebris.push(cardDebris)
- debrisArr.push({id: debris.id, num: changeDur})
- }
- let rewardNty: IRewardNty = {
- changeArr,
- iRoles,
- iCards,
- iEquips,
- debrisArr,
- }
- syncArr.forEach(v => Mgr.event.trigger(EVENT.goodsChangeSync, v.id, v.num))
- //recharge_money 是需要花钱买的 shop_buy是用钻石买的或者是看广告获得的 服务端区分了用法
- if (data.flags == 'recharge_money' || data.flags == 'shop_buy') {
- Mgr.ui.showReward(rewardNty)
- } else {
- Data.main.rewardNtyMap.set('cmd_' + data.flags + '_rsp', rewardNty)
- }
- })
- //-------------------------------建筑数据-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_city_data_rsp, this, (data: cityDataRsp) => {
- Data.main.buildData = data.list
- //城堡技能
- Data.user.castleSkills = []
- Data.user.useCastleSkillID = data.skillid
- for (let i = 0; i < data.skillList.length; i++) {
- let iCastleSkill = Mgr.global.buildICastleSkill(data.skillList[i])
- Data.user.castleSkills.push(iCastleSkill)
- }
- })
- //-------------------------------装备数据-----------------------------------------
- //先获取装备背包,再获取英雄背包
- Mgr.net.addTop(msgCmd.cmd_equip_get_data_rsp, this, (data: equipGetDataRsp) => {
- Data.user.equips.length = 0
- data.list.forEach(equip => {
- Data.user.equips.push(Mgr.global.buildIEquip(equip))
- })
- Mgr.goods.sortEquip()
- Mgr.goods.reactEquipsChange()
- })
- let updateEquip = (equip: equip) => {
- Data.user.equips.forEach(v => {
- if (equip.sid == v.equip.sid) {
- Mgr.global.buildIEquip(equip, v)
- }
- })
- Mgr.goods.reactEquipsChange()
- }
- Mgr.net.addTop(msgCmd.cmd_equip_upgrade_rsp, this, (data: equipUpgradeRsp) => {
- updateEquip(data.data)
- })
- Mgr.net.addTop(msgCmd.cmd_equip_upgrade_star_rsp, this, (data: equipUpgradeStarRsp) => {
- for (let i = Data.user.equips.length - 1; i >= 0; i--) {
- let sid = Data.user.equips[i].equip.sid
- if (data.same.includes(sid) || data.other.includes(sid)) {
- Data.user.equips.splice(i, 1)
- }
- if (sid == data.data.sid) {
- Mgr.global.buildIEquip(data.data, Data.user.equips[i])
- }
- }
- Mgr.goods.reactEquipsChange()
- })
- Mgr.net.addTop(msgCmd.cmd_equip_onekey_upgrade_star_rsp, this, (data: equipOnekeyUpgradeStarRsp) => {
- for (let i = Data.user.equips.length - 1; i >= 0; i--) {
- if (data.delList.includes(Data.user.equips[i].equip.sid)) {
- Data.user.equips.splice(i, 1)
- }
- }
- for (let i = Data.user.equips.length - 1; i >= 0; i--) {
- let find = data.changeList.find(value => value.sid == Data.user.equips[i].equip.sid)
- if (find) {
- Mgr.global.buildIEquip(find, Data.user.equips[i])
- }
- }
- Mgr.goods.reactEquipsChange()
- })
- Mgr.net.addTop(msgCmd.cmd_equip_reset_rsp, this, (data: equipResetRsp) => {
- updateEquip(data.data)
- })
- Mgr.net.addTop(msgCmd.cmd_hero_wear_equip_rsp, this, (data: heroWearEquipRsp) => {
- let equips = new Array(Data.main.equipMaxNum).fill(null)
- Data.user.equips.find(value => {
- if (data.list.includes(value.equip.sid)) {
- value.equip.hero = data.data.sid
- equips[value.cfg.type - 1] = value
- } else if (value.equip.hero == data.data.sid) {
- value.equip.hero = ''
- }
- })
- Data.user.roles.find(value => {
- if (value.hero.sid == data.data.sid) {
- value.equips.length = 0
- value.equips.push(...equips)
- }
- })
- Mgr.goods.reactEquipsChange()
- })
- //-------------------------------英雄数据-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_hero_get_data_rsp, this, (data: heroGetDataRsp) => {
- Data.user.roles.length = 0
- data.list.forEach(hero => {
- Data.user.roles.push(Mgr.global.buildIRole(hero))
- })
- Mgr.goods.sortRole()
- Mgr.goods.reactRolesChange()
- })
- let updateRole = (data: hero) => {
- Data.user.roles.forEach(v => {
- if (data.sid == v.hero.sid) {
- Mgr.global.buildIRole(data, v)
- }
- })
- Mgr.goods.reactRolesChange()
- }
- Mgr.net.addTop(msgCmd.cmd_hero_upgrade_rsp, this, (data: heroUpgradeRsp) => {
- updateRole(data.data)
- })
- Mgr.net.addTop(msgCmd.cmd_hero_upgrade_star_rsp, this, (data: heroUpgradeStarRsp) => {
- for (let i = Data.user.roles.length - 1; i >= 0; i--) {
- let sid = Data.user.roles[i].hero.sid
- if (data.same.includes(sid) || data.other.includes(sid)) {
- Data.user.roles.splice(i, 1)
- }
- if (sid == data.data.sid) {
- Mgr.global.buildIRole(data.data, Data.user.roles[i])
- }
- }
- Mgr.goods.reactRolesChange()
- })
- Mgr.net.addTop(msgCmd.cmd_hero_onekey_upgrade_star_rsp, this, (data: heroOnekeyUpgradeStarRsp) => {
- for (let i = Data.user.roles.length - 1; i >= 0; i--) {
- if (data.delList.includes(Data.user.roles[i].hero.sid)) {
- Data.user.roles.splice(i, 1)
- }
- }
- for (let i = Data.user.roles.length - 1; i >= 0; i--) {
- let findHero = data.changeList.find(value => value.sid == Data.user.roles[i].hero.sid)
- if (findHero) {
- Mgr.global.buildIRole(findHero, Data.user.roles[i])
- }
- }
- Mgr.goods.reactRolesChange()
- })
- Mgr.net.addTop(msgCmd.cmd_hero_reset_rsp, this, (data: heroResetRsp) => {
- updateRole(data.data)
- })
- Mgr.net.addTop(msgCmd.cmd_hero_change_nty, this, (data: heroChangeNty) => {
- for (let i = 0; i < data.list.length; i++) {
- updateRole(data.list[i])
- }
- })
- //-------------------------------卡牌数据-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_skill_card_get_data_rsp, this, (data: skillCardGetDataRsp) => {
- Data.user.cards.length = 0
- data.list.forEach(card => {
- Data.user.cards.push(Mgr.global.buildICard(card))
- })
- Mgr.goods.sortCard()
- Mgr.goods.reactCardsChange()
- })
- let updateCard = (card: card) => {
- Data.user.cards.find(value => {
- if (value.card.sid == card.sid) {
- Mgr.global.buildICard(card, value)
- }
- })
- Mgr.goods.reactCardsChange()
- }
- Mgr.net.addTop(msgCmd.cmd_skill_card_upgrade_rsp, this, (data: skillCardUpgradeRsp) => {
- updateCard(data.data)
- })
- Mgr.net.addTop(msgCmd.cmd_skill_card_upgrade_star_rsp, this, (data: skillCardUpgradeStarRsp) => {
- updateCard(data.data)
- })
- //-------------------------------上阵数据-----------------------------------------
- let updateTeam = (data: embattleBattleRsp | embattleGetDataRsp) => {
- Data.user.teamRole.length = 0
- Data.user.teamCard.length = 0
- data.list.forEach(item => {
- if (item.sid) {
- Data.user.teamRole.push(Data.user.roles.find(hero => hero.hero.sid == item.sid))
- } else {
- Data.user.teamRole.push(null)
- }
- })
- data.cardList.forEach(item => {
- if (item.sid) {
- Data.user.teamCard.push(Data.user.cards.find(card => card.card.sid == item.sid))
- } else {
- Data.user.teamCard.push(null)
- }
- })
- Mgr.goods.reactRolesChange()
- Mgr.goods.reactCardsChange()
- }
- Mgr.net.addTop(msgCmd.cmd_embattle_get_data_rsp, this, (data: embattleBattleRsp) => {
- updateTeam(data)
- })
- Mgr.net.addTop(msgCmd.cmd_embattle_battle_rsp, this, (data: embattleBattleRsp) => {
- updateTeam(data)
- })
- //-------------------------------碎片数据-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_debris_get_data_rsp, this, (data: debrisGetDataRsp) => {
- Data.user.cardDebris.length = 0
- data.list.forEach(cardDebris => {
- Data.user.cardDebris.push(Mgr.global.buildICardDebris(cardDebris))
- })
- })
- Mgr.net.addTop(msgCmd.cmd_pay_debris_nty, this, (data: payDebrisNty) => {
- for (let i = Data.user.cardDebris.length - 1; i >= 0; i--) {
- let find = data.list.find(idNum => idNum.id == Data.user.cardDebris[i].id)
- if (find) {
- if (find.num == 0) {
- Data.user.cardDebris.splice(i, 1)
- } else {
- Data.user.cardDebris[i].num = find.num
- }
- }
- }
- })
- //-------------------------------天赋-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_talent_get_data_rsp, this, (data: talentGetDataRsp) => {
- Data.user.talents.length = 0
- let keys = Object.keys(TalentConfig)
- for (let i = 0; i < keys.length; i++) {
- let ID = TalentConfig[keys[i]].ID
- let type = TalentConfig[keys[i]].talentType
- if (data.id1 > 0 && ID <= data.id1 && type == 1) {
- Data.user.talents.push(ID)
- }
- if (data.id2 > 0 && ID <= data.id2 && type == 2) {
- Data.user.talents.push(ID)
- }
- }
- Mgr.global.initTalentAdd()
- })
- //-------------------------------冒险关卡-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_adventure_data_rsp, this, (data: adventureDataRsp) => {
- Data.user.adventureId = data.id1
- Data.user.eliteId = data.id2
- })
- //-------------------------------活动列表-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_activity_time_list_nty, this, (data: activityTimeListNty) => {
- data.list.forEach(activity => {
- Data.main.activityList.set(activity.type, activity)
- })
- })
- //-------------------------------祭坛-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_altar_data_rsp, this, (data: altarDataRsp) => {
- Data.user.altarInfoList = data.list
- Data.user.altarTopFive = data.baseList
- Data.user.roles.forEach(v => {
- updateRole(v.hero)
- })
- })
- Mgr.net.addTop(msgCmd.cmd_altar_battle_rsp, this, (data: altarBattleRsp) => {
- //祭坛上下阵刷新
- Data.user.altarInfoList[data.pos - 1] = data.data
- Data.user.roles.forEach(v => {
- updateRole(v.hero)
- })
- })
- //-------------------------------开宝箱-----------------------------------------
- Mgr.net.add(msgCmd.cmd_box_get_award_rsp, this, (data: boxGetAwardRsp, rewardNty: IRewardNty) => {
- //判断宝箱类型,防止OpenBoxUI也会执行showReward
- if (data.type == GOODS_TYPE.randomBox) Mgr.ui.showReward(rewardNty)
- })
- //-------------------------------遗迹-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_relic_data_nty, this, (data: relicDataNty) => {
- Data.main.relicData = data
- })
- //-------------------------------邮箱-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_simple_mail, this, (data: simpleMail) => {
- Data.main.emailRed = data.needread + data.noread > 0
- })
- Mgr.net.addTop(msgCmd.cmd_send_mail, this, (data: sendMail) => {
- Data.main.emailRed = true
- })
- //-------------------------------创建订单-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_create_order_nty, this, (data: createOrderNty) => {
- Mgr.ui.showLoading('', false)
- Mgr.platform.buyItem(data.cfid.toString(), data.id.toString())
- })
- //-------------------------------在线时长-----------------------------------------
- Mgr.net.addTop(msgCmd.cmd_online_award_nty, this, (data: onlineAwardNty) => {
- Data.main.onlineRewards = data
- })
- }
- addReadyBox(idNum: idNum, isOnlySelect: boolean = true) {
- let isBox =
- GoodsConfig[idNum.id].type == GOODS_TYPE.selectBox || GoodsConfig[idNum.id].type == GOODS_TYPE.randomBox
- if (isBox) {
- for (let i = 0; i < idNum.num; i++) {
- Data.user.readyOpenBox.push({id: idNum.id, num: 1})
- }
- }
- }
- }
|