Files
fc/dev/project/library/imports/83/836a58fe-ac63-43ab-8759-7220337a9bca.js
T

553 lines
20 KiB
JavaScript
Raw Normal View History

2026-05-24 10:21:26 +08:00
"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:
// 这里填写详细说明,主要填写该模块的功能简要
// <br/>Create: 2018-12-25 14:56:32
// --------------------------------------------------------------------
var BridgeClass = require("bridge.class");
var DramaEvent = require("battle_drama_event");
var Battle_dramaModel = cc.Class({
"extends": BridgeClass,
properties: {
drama_data: {
"default": {}
},
last_dun_id: null,
quick_battle_data: {
"default": {}
},
// 已领取的通关奖励
dic_drama_rewrad_ids: {
"default": {}
},
//已领取特殊通关奖励
dic_drama_spe_reward_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 = game.configs.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);
},
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 {}
} else {
if (this.drama_res.s_res && this.drama_res.s_res.path == drama_paths.s) {
callback(this.drama_res.s_res.res);
} else {}
}
},
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);
}
if (this.drama_data.cool_time >= 0) {
gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Update_Cool_Time);
}
gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Top_Update_Data, data);
this.initDungeonList(this.drama_data.mode, this.drama_data.chapter_id); //战斗副本界面没对应刷新函数,暂时在这里初始化
var blink_status = this.getDramaRewardRedPointInfo();
nx.mTip.openTip("openServerActs.tip", blink_status);
blink_status = this.getDramaRewardSepRedPointInfo();
nx.mTip.openTip("openServerActs.tipSep1", blink_status);
},
// 更新关卡信息
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;
}
var need_change_chapter = false;
if (this.drama_data.chapter_id != 0 && this.drama_data.dun_id == data.max_dun_id && data.dun_id == data.max_dun_id && data.status == 3) {
need_change_chapter = true;
var drama_ctrl = require("battle_drama_controller");
drama_ctrl.getInstance().send13002();
}
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);
}
//只更新这个就够了
var blink_status = this.getDramaRewardSepRedPointInfo();
nx.mTip.openTip("openServerActs.tipSep1", blink_status);
},
// 累积挂机时间处理
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;
gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Quick_Battle_Data, data);
},
// 获取快速作战信息
getQuickData: function getQuickData() {
return this.quick_battle_data;
},
// 更新已通关奖励
setDramaReward: function setDramaReward(data) {
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 和已领取的来匹配
var blink_status = this.getDramaRewardRedPointInfo();
nx.mTip.openTip("openServerActs.tip", blink_status);
blink_status = this.getDramaRewardSepRedPointInfo();
nx.mTip.openTip("openServerActs.tipSep1", blink_status);
if (!data || !data.spe_list || data.spe_list.length == 0) return;
this.dic_drama_spe_reward_ids = {};
for (var _index = 0; _index < data.spe_list.length; _index++) {
var _element = data.spe_list[_index];
this.dic_drama_spe_reward_ids[_element.id] = true;
}
},
//获取通关奖励的红点信息
getDramaRewardRedPointInfo: function getDramaRewardRedPointInfo() {
var drama_data = this.getDramaData();
if (this.dic_drama_rewrad_ids && drama_data && drama_data.max_dun_id) {
var config = game.configs.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;
},
//活的特殊通关奖励红点
getDramaRewardSepRedPointInfo: function getDramaRewardSepRedPointInfo() {
var drama_data = this.getDramaData();
if (this.dic_drama_rewrad_ids && drama_data && drama_data.max_dun_id) {
var config = game.configs.dungeon_data.data_drama_reward;
if (config) {
for (var i in config) {
var v = config[i];
//当前最大关卡 比需求关卡 大 说明可领
if (v.is_prediction == "1" && 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, 0);
},
// 获取剧情通关奖励列表
getDramaRewardPassList: function getDramaRewardPassList() {
return this.dic_drama_rewrad_ids;
},
updateDramaSpeReward: function updateDramaSpeReward(id) {
this.dic_drama_spe_reward_ids[id] = true;
gcore.GlobalEvent.fire(DramaEvent.BattleDrama_Drama_Reward_Data, id, 1);
},
getDramaSpeRewardPassList: function getDramaSpeRewardPassList() {
return this.dic_drama_spe_reward_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;
}
},
//获取boss关卡预览相关信息
getBossShowData: function getBossShowData() {
var chapter_list = [];
var sum_chapter = this.getOpenSumChapter(this.drama_data.mode);
if (game.configs.dungeon_data.data_drama_world_info) {
var world_list = game.configs.dungeon_data.data_drama_world_info[this.drama_data.mode];
var boss_reward_list = game.configs.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 (game.configs.dungeon_data.data_drama_info) {
var chapter_list = game.configs.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 = game.configs.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 (game.configs.dungeon_data.data_drama_info[model] != null) {
var list = game.configs.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 (game.configs.dungeon_data.data_drama_pre_fun) {
var is_show = false;
var data;
var sys_data = JSON.parse(cc.sys.localStorage.getItem("drama_data")); //cache:getInstance():loadDramaTipsFile()
cc.log(game.configs.dungeon_data.data_drama_pre_fun, sys_data);
for (var i in game.configs.dungeon_data.data_drama_pre_fun) {
var v = game.configs.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();