Files
fc/dev/project/library/imports/d5/d5888d53-9621-4414-834f-0c63b6369248.js
T
2026-05-24 10:21:26 +08:00

520 lines
18 KiB
JavaScript

"use strict";
cc._RF.push(module, 'd58881TliFEFINPDGO2NpJI', 'heaven_model');
// Scripts/mod/pve/heaven/heaven_model.js
"use strict";
// ////////////////////////////////////////////////////////////////////
// 这里填写简要说明(必填),
//
// @author. xxx@syg.com(必填, 创建模块的人员)
// @editor. xxx@syg.com(必填, 后续维护以及修改的人员)
// @description.
// 这里填写详细说明,主要填写该模块的功能简要
// <br/>Create. 2019-04-10
// ////////////////////////////////////////////////////////////////////
var BridgeClass = require("bridge.class");
var RoleController = require("role_controller");
var HeavenEvent = require("heaven_event");
var HeavenEvent = require("heaven_event");
var HeavenChapterVo = require("heaven_chapter_vo");
var HeavenConst = require("heaven_const");
var HeavenCustomsVo = require("heaven_customs_vo");
var HeavenModel = cc.Class({
"extends": BridgeClass,
ctor: function ctor() {
this.initConfig();
},
initConfig: function initConfig() {
this.left_challenge_count = 0; // 剩余挑战次数
this.today_buy_count = 0; // 今日购买次数
this.chapter_list = []; // 章节数据
this.customs_list = []; // 关卡数据
this.max_pass_chapter_id = 0; // 最大通关(普通通关)章节id
this.max_dun_id = 0; // 最大通关关卡的配置副本id
this.dial_data = []; // 神装转盘相关数据
this.myself_record_data = []; // 玩家自己的抽奖记录
this.all_record_data = []; // 全服抽奖记录
this.heaven_red_list = [];
this.all_score = 0; //战力前五神装总评分
},
clearData: function clearData() {
this.initConfig();
},
// 设置剩余挑战次数
setLeftChallengeCount: function setLeftChallengeCount(count) {
this.left_challenge_count = count || 0;
this.checkHeavenRedStatus();
},
// 获取剩余挑战次数
getLeftChallengeCount: function getLeftChallengeCount() {
return this.left_challenge_count;
},
// 设置今日购买次数
setTodayBuyCount: function setTodayBuyCount(count) {
this.today_buy_count = count || 0;
},
// 获取今日购买次数
getTodayBuyCount: function getTodayBuyCount() {
return this.today_buy_count;
},
// 获取今日剩余购买次数
getTodayLeftBuyCount: function getTodayLeftBuyCount() {
var max_count = game.configs.dungeon_heaven_data.data_count_buy_length || 0;
var left_count = max_count - this.today_buy_count;
if (left_count < 0) left_count = 0;
return left_count;
},
// 设置最大通关关卡副本id
setMaxDunId: function setMaxDunId(dun_id) {
if (!this.max_dun_id || this.max_dun_id < dun_id) this.max_dun_id = dun_id;
},
getMaxDunId: function getMaxDunId() {
return this.max_dun_id;
},
// 设置章节数据
setChapterData: function setChapterData(data) {
this.chapter_list = [];
for (var k in data) {
var cData = data[k];
var chapter_vo = new HeavenChapterVo();
chapter_vo.updateData(cData);
this.chapter_list.push(chapter_vo);
}
this.updateMaxPassChapterId();
this.checkHeavenRedStatus();
},
// 更新章节数据
updateChapterData: function updateChapterData(data) {
var is_add = false;
for (var i in data) {
var cData = data[i];
var is_have = false;
for (var key in this.chapter_list) {
var chapter_vo = this.chapter_list[key];
if (chapter_vo.id == cData.id) {
is_have = true;
chapter_vo.updateData(cData);
}
}
if (!is_have) {
// 新增
is_add = true;
var _chapter_vo = new HeavenChapterVo();
_chapter_vo.updateData(cData);
this.chapter_list.push(_chapter_vo);
}
}
this.updateMaxPassChapterId();
this.checkHeavenRedStatus();
gcore.GlobalEvent.fire(HeavenEvent.Add_Chapter_Data_Event);
},
// 更新某一章节数据
updateOneChapterDataById: function updateOneChapterDataById(id, data) {
for (var i in this.chapter_list) {
var chapter_vo = this.chapter_list[i];
if (chapter_vo.id == id) {
chapter_vo.updateData(data);
break;
}
}
this.updateMaxPassChapterId();
this.checkHeavenRedStatus();
},
// 是否有章节数据缓存
checkIsHaveChapterCache: function checkIsHaveChapterCache() {
if (this.chapter_list && Utils.next(this.chapter_list) != null) return true;else return false;
},
// 更新最大通关章节id
updateMaxPassChapterId: function updateMaxPassChapterId() {
for (var i in this.chapter_list) {
var chapter_vo = this.chapter_list[i];
if (chapter_vo.is_finish != HeavenConst.Chapter_Pass_Status.NotPass && chapter_vo.id > this.max_pass_chapter_i) d;
this.max_pass_chapter_id = chapter_vo.id;
}
},
// 获取某一章节的通关状态 HeavenConst.Chapter_Pass_Status
getChapterPassStatus: function getChapterPassStatus(chapter_id) {
var pass_status = HeavenConst.Chapter_Pass_Status.NotPass;
for (var key in this.chapter_list) {
var chapter_vo = this.chapter_list[key];
if (chapter_vo.id == chapter_id) pass_status = chapter_vo.is_finish;
}
return pass_status;
},
// 根据章节id和星级奖励id获取奖励状态
getChapterStarAwardStatus: function getChapterStarAwardStatus(chapter_id, award_id) {
var award_status = 0;
var chapter_vo = this.getChapterDataById(chapter_id);
if (chapter_vo) {
for (var k in chapter_vo.award_info) {
var v = chapter_vo.award_info[k];
if (v.id == award_id) {
award_status = v.flag;
break;
}
}
}
return award_status;
},
// 获取最大通关章节id
getMaxPassChapterId: function getMaxPassChapterId() {
return this.max_pass_chapter_id;
},
// 获取当前开启的最大章节id
getOpenMaxChapterId: function getOpenMaxChapterId() {
var chapter_id = 0;
for (var k in this.chapter_list) {
var chapter_vo = this.chapter_list[k];
if (chapter_id < chapter_vo.id) chapter_id = chapter_vo.id;
}
return chapter_id;
},
// 根据章节id获取章节数据
getChapterDataById: function getChapterDataById(id) {
for (var key in this.chapter_list) {
var chapter_vo = this.chapter_list[key];
if (chapter_vo.id == id) return chapter_vo;
}
},
// 根据章节id判断该章节是否开启
checkHeavenChapterIsOpen: function checkHeavenChapterIsOpen(chapter_id) {
var config_data = game.configs.dungeon_heaven_data.data_chapter[chapter_id];
if (!config_data) return false;
var is_open = true;
var close_msg = "";
// 先判断上一章节是否通关
if (chapter_id > 1) {
var pre_pass_status = this.getChapterPassStatus(chapter_id - 1);
if (pre_pass_status == HeavenConst.Chapter_Pass_Status.NotPass) is_open = false;
}
close_msg = Utils.TI18N("Clear the previous chapter Enable");
for (var k in config_data.cond_info) {
var cond = config_data.cond_info[k];
var chap_id = cond[0];
var star = cond[1];
var chap_vo = this.getChapterDataById(chap_id);
if (!chap_vo || chap_vo.all_star < star) {
is_open = false;
if (close_msg == "") {
close_msg = cc.js.formatStr(Utils.TI18N("Get %d stars in chapter %d and"), star, chap_id);
} else close_msg = close_msg + cc.js.formatStr(Utils.TI18N("get %d stars in chapter %d"), star, chap_id);
}
break;
}
return {
is_open: is_open,
close_msg: close_msg
};
},
// 设置关卡数据
setCustomsData: function setCustomsData(data, chapter_id) {
this.updateCustomsData(data, chapter_id);
},
// 更新关卡数据
updateCustomsData: function updateCustomsData(data, chapter_id) {
for (var key in data) {
var cData = data[key];
cData.chapter_id = chapter_id;
var is_have = false;
for (var i in this.customs_list) {
var _customs_vo = this.customs_list[i];
if (_customs_vo.id == cData.id && _customs_vo.chapter_id == chapter_id) {
is_have = true;
_customs_vo.updateData(cData);
}
}
if (!is_have) {
// 新增
var customs_vo = new HeavenCustomsVo();
customs_vo.updateData(cData);
this.customs_list.push(customs_vo);
}
}
},
// 根据章节id判断是否有关卡数据
checkIsHaveCustomsCache: function checkIsHaveCustomsCache(chapter_id) {
var is_have = false;
if (this.customs_list) {
var customs_num = 0;
for (var key in this.customs_list) {
var customs_vo = this.customs_list[key];
if (customs_vo.chapter_id == chapter_id) {
customs_num = customs_num + 1;
}
}
if (game.configs.dungeon_heaven_data.data_customs_num[chapter_id] == customs_num) {
is_have = true;
}
}
return is_have;
},
// 根据章节id获取该章节所有可以显示关卡数据(乱序)
getAllCanShowCustomsDataById: function getAllCanShowCustomsDataById(chapter_id) {
var all_customs = [];
for (var k in this.customs_list) {
var customs_vo = this.customs_list[k];
customs_vo.chapter_id == chapter_id;
if (customs_vo.chapter_id == chapter_id && customs_vo.state != 0) all_customs.push(customs_vo);
}
return all_customs;
},
// 根据章节id和关卡id获取关卡数据
getCustomsDataById: function getCustomsDataById(chapter_id, customes_id) {
for (var key in this.customs_list) {
var customs_vo = this.customs_list[key];
if (customs_vo.id == customes_id && customs_vo.chapter_id == chapter_id) return customs_vo;
}
},
// 根据章节id和关卡id获取是否为boss关
getCustomsIsBossType: function getCustomsIsBossType(chapter_id, customes_id) {
var is_boss = false;
var chapter_cfg = game.configs.dungeon_heaven_data.data_customs[chapter_id];
if (chapter_cfg && chapter_cfg[customes_id]) is_boss = chapter_cfg[customes_id].type == 1;
return is_boss;
},
// 根据关卡配置表唯一id判断该关卡是否通关
checkCustomsIsPassByDunId: function checkCustomsIsPassByDunId(dun_id) {
var is_pass = false;
if (dun_id <= this.max_dun_id) is_pass = true;
return is_pass;
},
// 根据章节id获取该章节最大星数
getChapterMaxStarNum: function getChapterMaxStarNum(chapter_id) {
var max_star_num = 0;
if (game.configs.dungeon_heaven_data.data_customs_num[chapter_id]) max_star_num = game.configs.dungeon_heaven_data.data_customs_num[chapter_id] * 3;
return max_star_num;
},
// 缓存最后一次打开的章节id
setHeavenLastShowChapterId: function setHeavenLastShowChapterId(chapter_id) {
this.last_show_chapter_id = chapter_id;
},
getHeavenLastShowChapterId: function getHeavenLastShowChapterId() {
return this.last_show_chapter_id;
},
// 天界副本开启判断
checkHeavenIsOpen: function checkHeavenIsOpen(not_tips) {
var role_vo = RoleController.getInstance().getRoleVo();
if (role_vo == null) return false;
var is_open = false;
var world_lev_cfg = game.configs.dungeon_heaven_data.data_const.open_world_lev;
var role_lev_cfg = game.configs.dungeon_heaven_data.data_const.open_lev;
var open_lev_second_cfg = game.configs.dungeon_heaven_data.data_const.open_lev_second;
var msg = "";
if (world_lev_cfg && role_lev_cfg) {
var world_lv = RoleController.getInstance().getModel().getWorldLev();
is_open = true;
if (world_lev_cfg.val > world_lv) {
is_open = false;
msg = world_lev_cfg.desc;
} else if (role_lev_cfg.val > role_vo.lev) {
is_open = false;
msg = role_lev_cfg.desc;
}
}
// 条件二(与条件一为或的关系)
if (!is_open && open_lev_second_cfg) {
is_open = true;
if (open_lev_second_cfg.val > role_vo.lev) {
is_open = false;
msg = open_lev_second_cfg.desc;
}
}
if (!is_open && !not_tips) {
nx.tbox(msg);
}
return is_open;
},
// 神装转盘是否开启
checkHeavenDialIsOpen: function checkHeavenDialIsOpen(not_tips) {
var is_open = false;
var world_lev_cfg = game.configs.holy_eqm_lottery_data.data_const["world_lev_condition"];
var role_lev_cfg = game.configs.holy_eqm_lottery_data.data_const["player_lev_condition"];
var second_condition_cfg = game.configs.holy_eqm_lottery_data.data_const["player_lev_second_condition"];
var dun_id_cfg = game.configs.holy_eqm_lottery_data.data_const["heaven_dun_condition"];
if (world_lev_cfg && role_lev_cfg && dun_id_cfg) {
var world_lv = RoleController.getInstance().getModel().getWorldLev();
var role_vo = RoleController.getInstance().getRoleVo();
is_open = true;
var msg = "";
if (world_lev_cfg.val > world_lv) {
is_open = false;
msg = world_lev_cfg.desc;
} else if (role_lev_cfg.val > role_vo.lev) {
is_open = false;
msg = role_lev_cfg.desc;
}
// 条件二(与条件一为或的关系)
if (!is_open && second_condition_cfg) is_open = true;
if (second_condition_cfg.val > role_vo.lev) {
is_open = false;
msg = second_condition_cfg.desc;
// if is_open && ! this.checkCustomsIsPassByDunId(dun_id_cfg.val)
// is_open = false
// msg = dun_id_cfg.desc
// }
if (!is_open && !not_tips) nx.tbox(msg);
}
}
return is_open;
},
// 设置神装转盘相关数据
setHeavenDailData: function setHeavenDailData(data) {
this.dial_data = data || [];
this.checkHeavenRedStatus();
},
// 根据神装转盘的组id获取是否有免费次数
getHeavenDialIsFreeById: function getHeavenDialIsFreeById(group_id) {
var is_free = false;
for (var key in this.dial_data) {
var v = this.dial_data[key];
if (v.group_id == group_id && v.free_times >= 1) {
is_free = true;
break;
}
}
return is_free;
},
// 根据组id判断该石像是否开启
checkHeavenDialIsOpenByGId: function checkHeavenDialIsOpenByGId(group_id) {
var is_open = false;
for (var k in this.dial_data) {
var v = this.dial_data[k];
if (v.group_id == group_id && v.is_open == 1) {
is_open = true;
break;
}
}
return is_open;
},
// 根据神装转盘的组id获取是否有奖励可领取
getHeavenDialAwardRedById: function getHeavenDialAwardRedById(group_id) {
var is_free = false;
for (var k in this.dial_data) {
var v = this.dial_data[k];
if (v.group_id == group_id) {
var award_config = game.configs.holy_eqm_lottery_data.data_award[v.group_id];
if (award_config) for (var i in award_config) {
var j = award_config[i];
var _un_enabled = false;
for (var l in v.do_awards) {
var m = v.do_awards[l];
if (j.id == m.award_id) {
_un_enabled = true;
break;
}
}
if (_un_enabled == false && j.times <= v.all_award_count) return true;
}
}
}
return is_free;
},
// 获取神装组id数据
getHeavenDialById: function getHeavenDialById(group_id) {
for (var k in this.dial_data) {
var v = this.dial_data[k];
if (v.group_id == group_id) return v;
}
return null;
},
// 根据神装转盘的组id获取再抽X次触发保底
getHeavenDialBaodiCountById: function getHeavenDialBaodiCountById(group_id) {
var count = 0;
for (var k in this.dial_data) {
var v = this.dial_data[k];
if (v.group_id == group_id) {
count = v.baodi_count || 0;
break;
}
}
return count;
},
// 玩家自己的抽奖记录
setMyselfDialRecordData: function setMyselfDialRecordData(data) {
this.myself_record_data = data || {};
},
getMyselfDialRecordData: function getMyselfDialRecordData() {
return this.myself_record_data;
},
// 全服抽奖记录
setAllDialRecordData: function setAllDialRecordData(data, group_id) {
this.all_record_data[group_id] = data;
},
getAllDialRecordData: function getAllDialRecordData(group_id) {
return this.all_record_data[group_id] || {};
},
// 根据组id判断本地是否有缓存全服记录数据
checkIsHaveDialRecordData: function checkIsHaveDialRecordData(group_id) {
if (this.all_record_data[group_id] && Utils.next(this.all_record_data[group_id]) != null) return true;
return false;
},
//////////////// 红点相关
updateHeavenRedStatus: function updateHeavenRedStatus(bid, status) {
this.heaven_red_list[bid] = status;
var red_status = this.getHeavenRedStatus();
gcore.GlobalEvent.fire(HeavenEvent.Update_Heaven_Red_Status, bid, status);
},
getHeavenRedStatus: function getHeavenRedStatus() {
var red_status = false;
for (var k in this.heaven_red_list) {
var status = this.heaven_red_list[k];
if (status == true) {
red_status = true;
break;
}
}
return red_status;
},
getHeavenRedStatusByBid: function getHeavenRedStatusByBid(bid) {
var red_status = false;
for (var k in this.heaven_red_list) {
var status = this.heaven_red_list[k];
if (bid == k) {
red_status = status;
break;
}
}
return red_status;
},
checkHeavenRedStatus: function checkHeavenRedStatus() {
if (!this.checkHeavenIsOpen(true)) return;
// 剩余挑战次数
var count_red_status = false;
if (this.left_challenge_count > 0) count_red_status = true;
// this.updateHeavenRedStatus(HeavenConst.Red_Index.Count, count_red_status)
// 章节奖励
var award_red_status = false;
for (var k in this.chapter_list) {
var chapter_vo = this.chapter_list[k];
if (chapter_vo.getRedStatus() == true) {
award_red_status = true;
break;
}
}
// this.updateHeavenRedStatus(HeavenConst.Red_Index.Award, award_red_status)
},
setAllScore: function setAllScore(score) {
this.all_score = score;
gcore.GlobalEvent.fire(HeavenEvent.Update_All_Score);
},
getAllScore: function getAllScore() {
return this.all_score;
},
// 根据关卡配置表唯一id判断该关卡是否通关
checkIsOpenByScore: function checkIsOpenByScore(score) {
var is_open = false;
if (score <= this.all_score) {
is_open = true;
}
return is_open;
}
});
cc._RF.pop();