"use strict"; cc._RF.push(module, '836a5j+rGNDq4dZciAzepvK', 'battle_drama_model'); // Scripts/mod/battle_drama/battle_drama_model.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里填写详细说明,主要填写该模块的功能简要 //
Create: 2018-12-25 14:56:32 // -------------------------------------------------------------------- var DramaEvent = require("battle_drama_event"); var MainUIController = require("mainui_controller"); var MainuiConst = require("mainui_const"); var Battle_dramaModel = cc.Class({ "extends": BaseClass, properties: { drama_data: { "default": {} }, last_dun_id: null, quick_battle_data: { "default": {} }, // 已领取的通关奖励 dic_drama_rewrad_ids: { "default": {} }, mode_list: { "default": {} }, cur_dun_list: { "default": {} }, // 当前章节 init_dungeon_list: { "default": {} }, drama_res: { "default": {} } }, ctor: function ctor() {}, initConfig: function initConfig() { this.had_update_reward = false; this.is_open_quick_battle_view = false; //主要用于记录是否已经打开是红点 }, preloadDramaScene: function preloadDramaScene(callback) { var battle_res_id = 10003; var drama_data = this.getDramaData(); if (drama_data && drama_data.mode && drama_data.chapter_id) { var drama_config = Config.dungeon_data.data_drama_world_info[drama_data.mode][drama_data.chapter_id]; battle_res_id = drama_config.map_id; } var drama_paths = PathTool.getBattleDrameBg(battle_res_id); LoaderManager.getInstance().loadRes(drama_paths.f, function (path, f_bg) { this.drama_res.f_res = {}; this.drama_res.f_res.path = path; this.drama_res.f_res.res = f_bg; }.bind(this, drama_paths.f)); LoaderManager.getInstance().loadRes(drama_paths.s, function (path, s_bg) { this.drama_res.s_res = {}; this.drama_res.s_res.path = path; this.drama_res.s_res.res = s_bg; }.bind(this, drama_paths.s)); }, getDramaScene: function getDramaScene(battle_res_id, isF, callback) { var drama_paths = PathTool.getBattleDrameBg(battle_res_id); if (isF) { if (this.drama_res.f_res && this.drama_res.f_res.path == drama_paths.f) { callback(this.drama_res.f_res.res); } else { LoaderManager.getInstance().loadRes(drama_paths.f, function (path, f_bg) { if (this.drama_res.f_res) LoaderManager.getInstance().releaseRes(this.drama_res.f_res.path); this.drama_res.f_res = {}; this.drama_res.f_res.path = path; this.drama_res.f_res.res = f_bg; if (callback) callback(f_bg); }.bind(this, drama_paths.f)); } } else { if (this.drama_res.s_res && this.drama_res.s_res.path == drama_paths.s) { callback(this.drama_res.s_res.res); } else { LoaderManager.getInstance().loadRes(drama_paths.s, function (path, s_bg) { if (this.drama_res.s_res) LoaderManager.getInstance().releaseRes(this.drama_res.s_res.path); this.drama_res.s_res = {}; this.drama_res.s_res.path = path; this.drama_res.s_res.res = s_bg; if (callback) callback(s_bg); }.bind(this, drama_paths.s)); } } }, setDramaData: function setDramaData(data) { var need_event = false; if (!this.drama_data || this.drama_data.max_dun_id !== data.max_dun_id) { need_event = true; } if (!this.last_dun_id || this.last_dun_id < data.max_dun_id) { this.last_dun_id = data.max_dun_id || this.drama_data.max_dun_id; } this.drama_data.mode = data.mode; // 当前难度 this.drama_data.chapter_id = data.chapter_id; // 当前章节 this.drama_data.dun_id = data.dun_id; // 当前关卡 this.drama_data.status = data.status; // 当前关卡状态(1:制作中 2:可挑战 3:已通关) this.drama_data.cool_time = data.cool_time; // 当前关卡冷却时间(unixtime) this.drama_data.max_dun_id = data.max_dun_id; // 最大通关关卡 this.drama_data.auto_num = data.auto_num; // 今天扫荡已用次数 this.drama_data.auto_num_max = data.auto_num_max; // 今天扫荡次数上限 this.drama_data.is_first = data.is_first; // 是否首次挑战当前关卡 this.drama_data.last_dun_id = this.last_dun_id; // 本地缓存上一个通关章节id if (data.mode_list) { this.mode_list = data.mode_list; } if (need_event) { gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Update_Max_Id, this.drama_data.max_dun_id); } gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Top_Update_Data, data); this.initDungeonList(this.drama_data.mode, this.drama_data.chapter_id); //战斗副本界面没对应刷新函数,暂时在这里初始化 }, // 更新关卡信息 updateDramaData: function updateDramaData(data) { if (!this.drama_data) return; var need_event = false; if (this.drama_data.max_dun_id != data.max_dun_id) { need_event = true; } var need_cool = false; if (this.drama_data.cool_time != data.cool_time && this.drama_data.status != data.status) { need_cool = true; } var need_dun_id = false; if (this.drama_data.dun_id != data.dun_id) { need_dun_id = true; } if (this.drama_data.max_dun_id == null || this.drama_data.max_dun_id < data.max_dun_id) { this.last_dun_id = this.drama_data.max_dun_id || data.max_dun_id; } if (this.drama_data.dun_id != data.dun_id) { gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Update_Dun_Id, data.dun_id); } this.drama_data.mode = data.mode; // 当前难度 this.drama_data.chapter_id = data.chapter_id; // 当前章节 this.drama_data.dun_id = data.dun_id; // 当前关卡 this.drama_data.status = data.status; // 当前关卡状态(1:制作中 2:可挑战 3:已通关) this.drama_data.cool_time = data.cool_time; // 当前关卡冷却时间(unixtime) this.drama_data.max_dun_id = data.max_dun_id; // 最大通关关卡 this.drama_data.is_first = data.is_first; // 是否首次挑战当前关卡 this.drama_data.last_dun_id = this.last_dun_id; // 本地缓存上一个通关章节id this.updateModeListInfo(data); if (this.cur_dun_list && Utils.next(this.cur_dun_list || {}) != null && this.cur_dun_list[data.dun_id]) { this.cur_dun_list[data.dun_id].status = data.status; if (this.cur_dun_list[data.dun_id].status == 3) { this.cur_dun_list[data.dun_id].is_has = true; } gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Update_Data, data); } if (need_event) { // 以更新剧情id为最优先 gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Update_Max_Id, this.drama_data.max_dun_id); } else if (need_cool) { // 这个是更新时间的 gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Update_Cool_Time); } if (need_dun_id) { gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Update_Dun_Id); } }, // 累积挂机时间处理 updateHookAccumulateTime: function updateHookAccumulateTime(data) { this.hook_accumulate_data = data; gcore.GlobalEvent.fire(DramaEvent.UpdateHookAccumulateTime, data); }, // 挂机时间处理 getHookAccumulateInfo: function getHookAccumulateInfo() { return this.hook_accumulate_data; }, getDramaData: function getDramaData() { return this.drama_data; }, // 更新快速作战的数据 setQuickData: function setQuickData(data) { this.quick_battle_data = data; this.checkRedPoint(); gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Quick_Battle_Data, data); }, // 获取快速作战信息 getQuickData: function getQuickData() { return this.quick_battle_data; }, // 更新已通关奖励 setDramaReward: function setDramaReward(data) { this.checkRedPoint(); gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Drama_Reward_Data, data); if (this.had_update_reward == true) return; // 为了兼容原生那边,只做一次处理,具体更新再下面 this.had_update_reward = true; if (!data || !data.list || data.list.length == 0) return; this.dic_drama_rewrad_ids = {}; for (var index = 0; index < data.list.length; index++) { var element = data.list[index]; this.dic_drama_rewrad_ids[element.id] = true; } // 这里需要判断一下红点,基于当前通关的max_dun_id 和已领取的来匹配 }, //获取通关奖励的红点信息 getDramaRewardRedPointInfo: function getDramaRewardRedPointInfo() { var drama_data = this.getDramaData(); if (this.dic_drama_rewrad_ids && drama_data && drama_data.max_dun_id) { var config = Config.dungeon_data.data_drama_reward; if (config) { for (var i in config) { var v = config[i]; //当前最大关卡 比需求关卡 大 说明可领 if (drama_data.max_dun_id >= v.limit_id) { if (!this.dic_drama_rewrad_ids[v.id]) { return true; } } } } } return false; }, // 更新奖励 updateDramaReward: function updateDramaReward(id) { this.dic_drama_rewrad_ids[id] = true; gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Drama_Reward_Data, id); }, // 获取剧情通关奖励列表 getDramaRewardPassList: function getDramaRewardPassList() { return this.dic_drama_rewrad_ids; }, //获取已开启的总章节数 getOpenSumChapter: function getOpenSumChapter(mode) { if (this.mode_list) { var chapter_list = this.mode_list[mode - 1].chapter_list; var chapter_sum = 0; if (chapter_list) { for (var i in chapter_list) { chapter_sum = chapter_sum + 1; } } return chapter_sum; } }, checkRedPoint: function checkRedPoint() { var status = this.getDramaRewardRedPointInfo(); MainUIController.getInstance().setBtnRedPoint(MainuiConst.btn_index.drama_scene, status); }, //获取boss关卡预览相关信息 getBossShowData: function getBossShowData() { var chapter_list = []; var sum_chapter = this.getOpenSumChapter(this.drama_data.mode); if (Config.dungeon_data.data_drama_world_info) { var world_list = Config.dungeon_data.data_drama_world_info[this.drama_data.mode]; var boss_reward_list = Config.dungeon_data.data_drama_boss_show_reward; for (var i in world_list) { var boss_reward = boss_reward_list[i]; if (boss_reward && world_list[i].chapter_id <= sum_chapter + 1) { chapter_list.push(world_list[i]); } } } return chapter_list; }, getCurDunInfoByID: function getCurDunInfoByID(dun_id) { if (this.cur_dun_list) { var config = this.cur_dun_list[dun_id]; return config; } }, getInitDungeonList: function getInitDungeonList() { if (this.init_dungeon_list && Utils.next(this.init_dungeon_list || []) != null) { return this.init_dungeon_list; } }, // 用于初始化当前显示关卡的信息展示 initDungeonList: function initDungeonList(mode, chapter_id) { if (Config.dungeon_data.data_drama_info) { var chapter_list = Config.dungeon_data.data_drama_info[mode][chapter_id]; if (chapter_list) { var list = []; for (var i in chapter_list) { list.push(chapter_list[i]); } list.sort(function (a, b) { return a.id - b.id; }); for (var i in list) { var info_data = gdata("dungeon_data", "data_drama_dungeon_info", list[i].id); this.init_dungeon_list[i] = { info_data: info_data }; this.cur_dun_list[list[i].id] = { dun_id: list[i].id, status: 0, cool_time: 0, auto_num: 0, is_has: false }; } } this.updateHadModeListInfo(mode, chapter_id); } }, // 获取初始化当前章节和难道所有副本信息 updateHadModeListInfo: function updateHadModeListInfo(mode, chapter_id) { if (this.mode_list && Utils.next(this.mode_list || {}) != null) { var chapter_list = this.getChapterListByID(mode, chapter_id); if (chapter_list) { var dun_list = chapter_list.dun_list; if (dun_list) { for (var i in dun_list) { var temp_data = this.cur_dun_list[dun_list[i].dun_id]; if (temp_data) { temp_data.dun_id = dun_list[i].dun_id; temp_data.status = dun_list[i].status; temp_data.cool_time = dun_list[i].cool_time; temp_data.auto_num = dun_list[i].auto_num; temp_data.is_has = true; } } } } } }, updateModeListInfo: function updateModeListInfo(data) { if (this.mode_list && Utils.next(this.mode_list || {}) != null) { var chapter_list = this.getChapterListByID(data.mode, data.chapter_id); if (chapter_list) { var dun_list = chapter_list.dun_list; if (dun_list) { var temp_has = true; if (data.status == 1) { temp_has = false; } var is_has = false; for (var i in dun_list) { if (data.dun_id == dun_list[i].dun_id) { is_has = true; dun_list[i].dun_id = data.dun_id; dun_list[i].cool_time = data.cool_time; dun_list[i].status = data.status; dun_list[i].is_has = temp_has; } } if (!is_has) { dun_list.push({ dun_id: data.dun_id, status: data.status, cool_time: data.cool_time, auto_num: 0, is_has: temp_has }); } } } } }, getChapterListByID: function getChapterListByID(mode, chapter_id) { if (this.mode_list && Utils.next(this.mode_list || {}) != null) { var chapter_list = this.mode_list[mode - 1].chapter_list; var list = null; if (chapter_list) { for (var i in chapter_list) { if (chapter_list[i].chapter_id == chapter_id) { list = chapter_list[i]; break; } } return list; } } }, //根据难度和章节id去获取已通过的Boss关卡数 getHasCurChapterPassListBossNum: function getHasCurChapterPassListBossNum(mode, chapter_id) { if (this.mode_list && Utils.next(this.mode_list || {}) != null) { var chapter_list = this.getChapterListByID(mode, chapter_id); var sum = 1; if (chapter_list) { var dun_list = chapter_list.dun_list; if (dun_list) { for (var i in dun_list) { var config = gdata("dungeon_data", "data_drama_dungeon_info", [dun_list[i].dun_id]); if (dun_list[i].status == 3 && config && config.is_big == 1) { sum = sum + 1; } } } } return sum; } }, //根据当前副本id来获取展示 getShowDescRewad: function getShowDescRewad(dun_id) { var list = []; var index = 1; var config = Config.dungeon_data.data_drama_show_reward; if (config) { for (var k in config) { var v = config[k]; if (dun_id < v.id && index <= 3) { index = index + 1; list.push(v); } } list.sort(Utils.tableLowerSorter(["id"])); } return list; }, // 获取当前切换章节通过最大的关卡ID getHasPassChapterMaxDunId: function getHasPassChapterMaxDunId(mode, chapter_id) { if (this.mode_list && Utils.next(this.mode_list || {})) { var chapter_list = this.getChapterListByID(mode, chapter_id); var max_dun_id = 0; if (chapter_list) { var dun_list = chapter_list.dun_list; for (var i in dun_list) { if (dun_list[i].dun_id > max_dun_id) { max_dun_id = dun_list[i].dun_id; } } } return max_dun_id; } }, // 获取当前通关的章节数 getCurMaxChapterId: function getCurMaxChapterId(mode) { if (this.mode_list && Utils.next(this.mode_list || {}) != null) { var chapter_list = this.mode_list[mode - 1].chapter_list; var chapter_id = 1; if (chapter_list) { for (var i in chapter_list) { if (chapter_list[i].status == 1) { if (chapter_id <= chapter_list[i].chapter_id) { chapter_id = chapter_list[i].chapter_id; } } } } return chapter_id; } }, // 获取某个章节的副本总长度 getChapterLength: function getChapterLength(model, chapter_id) { if (this.chapter_list == null) { this.chapter_list = {}; } if (this.chapter_list[Utils.getNorKey(model, chapter_id)] == null) { var sum = 0; if (Config.dungeon_data.data_drama_info[model] != null) { var list = Config.dungeon_data.data_drama_info[model][chapter_id]; if (list != null) { sum = Object.keys(list).length; } } this.chapter_list[Utils.getNorKey(model, chapter_id)] = sum; } return this.chapter_list[Utils.getNorKey(model, chapter_id)]; }, // 根据难度和章节id去获取已通过的关卡数 getHasCurChapterPassListNum: function getHasCurChapterPassListNum(mode, chapter_id) { if (this.mode_list && Utils.next(this.mode_list || {}) != null) { var chapter_list = this.getChapterListByID(mode, chapter_id); var sum = 0; if (chapter_list) { var dun_list = chapter_list.dun_list; for (var i in dun_list) { if (dun_list[i].status == 3) { sum = sum + 1; } } } return sum; } }, // --判断当前关卡是否已通关和有弹出提示 getPreStatus: function getPreStatus(dun_id) { if (Config.dungeon_data.data_drama_pre_fun) { var is_show = false; var data; var sys_data = JSON.parse(cc.sys.localStorage.getItem("drama_data")); //SysEnv:getInstance():loadDramaTipsFile() cc.log(Config.dungeon_data.data_drama_pre_fun, sys_data); for (var i in Config.dungeon_data.data_drama_pre_fun) { var v = Config.dungeon_data.data_drama_pre_fun[i]; if (v.limit_id == dun_id && !sys_data[dun_id]) { is_show = true; data = v; break; } } return is_show, data; } }, /** * 设置快速作战buff显示 * @param {*} data */ setBuffData: function setBuffData(data) { this.buff_data = data; gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Drama_Buff_View); }, getBuffData: function getBuffData() { return this.buff_data; }, setOpenQuickBattleStatus: function setOpenQuickBattleStatus(status) { this.is_open_quick_battle_view = status; }, getOpenQuickBattleStatus: function getOpenQuickBattleStatus() { return this.is_open_quick_battle_view; }, //设置第一次快速作战花费 setFirstFresh: function setFirstFresh(status) { this.is_first_fresh = status; }, getFirstFresh: function getFirstFresh() { return this.is_first_fresh || false; } }); cc._RF.pop();