Files
fc/dev/project/library/imports/30/30f919b5-f1fa-4b4d-b18c-a26145d89667.js
2026-05-24 10:21:26 +08:00

342 lines
10 KiB
JavaScript

"use strict";
cc._RF.push(module, '30f91m18fpLTbGMomFF2JZn', 'elitematch_model');
// Scripts/mod/pvp/rank/elitematch_model.js
"use strict";
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里填写详细说明,主要填写该模块的功能简要
// <br/>Create: 2019-07-29 10:38:42
// --------------------------------------------------------------------
var BridgeClass = require("bridge.class");
var RoleController = require("role_controller");
var TimeTool = require("timetool");
var ElitematchController = require("pvprank.mod");
var LadderEvent = require("ladder_event");
var ElitematchModel = cc.Class({
"extends": BridgeClass,
ctor: function ctor() {
this.ctrl = arguments[0];
},
properties: {},
initConfig: function initConfig() {
//當前狀態 賦值 model.state = data.state
this.state = null;
// --當前段位
this.cur_elite_lev = 1;
// --當前排名 0表示未上名
this.cur_elite_rank = 0;
// -- 紅點
this.redPoint = true;
// --24900協議內容
this.scdata = null;
// --24905協議內容
this.scdata24905 = null;
// --戰令信息
this.orderaction_data = null;
this.orderaction_first_red_status = 0; // 0:沒紅點 1:有紅點
},
setSCData: function setSCData(scdata) {
if (this.scdata == null) {
this.scdata = scdata;
} else {
for (var k in scdata) {
var v = scdata[k];
if (this.scdata[k]) {
this.scdata[k] = v;
if (k == "rmb_status") {
this.setGiftStatus(v);
}
}
}
}
},
getSCData: function getSCData() {
return this.scdata || {};
},
getEliteLev: function getEliteLev() {
if (!this.scdata) return 1;
return this.scdata.lev;
},
getEliteRank: function getEliteRank() {
if (!this.scdata) return 0;
return this.scdata.rank;
},
setRedPoint: function setRedPoint(redPoint) {
this.redPoint = redPoint;
},
//活動總紅點
getElitematchTotalRedPoint: function getElitematchTotalRedPoint() {
var is_open = this.checkElitematchIsOpen(true).is_open;
if (is_open) {
//有可以領的紅點
if (this.getRewardRedpoint()) {
return true;
}
//戰令紅點
if (this.getOrderactionRedpoint()) {
return true;
}
//未開戰不顯示
if (this.scdata24905 && this.scdata24905.state == 0) {
return false;
}
//匹配次數夠了
if (this.getMatchCountRedpoint()) {
return true;
}
}
return false;
},
//獲取匹配次數紅點
getMatchCountRedpoint: function getMatchCountRedpoint() {
if (!this.scdata) return false;
if (this.scdata.day_combat_count > 0) {
return true;
}
return false;
},
//獲取獎勵紅點
getRewardRedpoint: function getRewardRedpoint() {
if (!this.scdata) return false;
for (var i in this.scdata.lev_reward) {
var v = this.scdata.lev_reward[i];
if (v.flag == 1) {
//可領
return true;
}
}
return false;
},
setEliteMatchFightTime: function setEliteMatchFightTime(data) {
var _this = this;
if (this.scdata24905 == null) {
this.scdata24905 = data;
} else {
for (var k in data) {
var v = data[k];
this.scdata24905[k] = v;
}
}
if (this.scdata24905.end_time != 0) {
if (this.time_ticket == null) {
this.time_ticket = gcore.Timer.set(function () {
_this.scdata24905.end_time = _this.scdata24905.end_time - 1;
if (_this.scdata24905.end_time <= 0) {
_this.clearTimeTicket();
ElitematchController.getInstance().sender24905();
}
}, 1000, -1);
}
}
},
clearTimeTicket: function clearTimeTicket() {
if (this.time_ticket) {
gcore.Timer.del(this.time_ticket);
this.time_ticket = null;
}
},
//設置更新equip紅點的記錄
setUpdateRedPoint: function setUpdateRedPoint(bool) {
this.is_redpoint_24900 = bool;
this.is_redpoint_24905 = bool;
this.is_redpoint_orderaction = bool;
},
setSCDataBack24900: function setSCDataBack24900() {
this.is_redpoint_24900 = true;
this.checkRedPoint();
},
setSCDataBack24905: function setSCDataBack24905() {
this.is_redpoint_24905 = true;
this.checkRedPoint();
},
setSCDataBackOrderaction: function setSCDataBackOrderaction() {
this.is_redpoint_orderaction = true;
this.checkRedPoint();
},
//need_check --必須檢測
checkRedPoint: function checkRedPoint(need_check) {
if (this.is_redpoint_24905 && this.is_redpoint_24900 && this.is_redpoint_orderaction || need_check) {
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderRedStatus);
var status = this.getElitematchTotalRedPoint();
}
},
// -- 精英大賽是否開啟
// --return 是否開啟 , 限制類型 , 如果未開啟會返回: 0 表示段位開啟未開啟 1. 表示 等級不足 2 表示世界等級不足
checkElitematchIsOpen: function checkElitematchIsOpen(not_tips) {
if (this.scdata && this.scdata.state == 0) {
if (!not_tips) {
nx.tbox(nx.text.getKey("lab_notOpen"));
}
return {
is_open: false,
limit_type: 0,
desc: nx.text.getKey("lab_notOpen")
};
}
// 個人等級限制
var role_lv_cfg = game.configs.arena_elite_data.data_elite_const["open_person_lev_limit"];
var role_vo = RoleController.getInstance().getRoleVo();
if (role_vo && role_lv_cfg && role_vo.lev < role_lv_cfg.val) {
if (!not_tips) {
nx.tbox(role_lv_cfg.desc);
}
return {
is_open: false,
limit_type: 1,
desc: role_lv_cfg.desc
};
}
// 世界等級限制
var world_lv_cfg = game.configs.arena_elite_data.data_elite_const["open_world_lev_limit"];
var world_lev = RoleController.getInstance().getModel().getWorldLev();
if (world_lev && world_lv_cfg && world_lev < world_lv_cfg.val) {
if (!not_tips) {
nx.tbox(world_lv_cfg.desc);
}
return {
is_open: false,
limit_type: 2,
desc: world_lv_cfg.desc
};
}
return {
is_open: true
};
},
//獲取賽季
setElitePeriod: function setElitePeriod(period) {
this.elite_period = period;
},
getElitePeriod: function getElitePeriod() {
return this.elite_period || 1;
},
//獲取賽季排行
// --獲取每天開啟精英賽的剩餘時間
// --return is_open, time
// --如果 is_open = true time 表示剩餘結束
// --如果 is_open = false time 表示多少秒後開啟
getOpenMatchLessTime: function getOpenMatchLessTime() {
// --開始時間 {12,0,0}
var open_time_val = game.configs.arena_elite_data.data_elite_const["open_time"].val;
// --開始持續秒數
var max_times = game.configs.arena_elite_data.data_elite_const["open_times"].val;
var zero_time = TimeTool.getToDayZeroTime();
var h = open_time_val[0] || 0;
var m = open_time_val[1] || 0;
var s = open_time_val[2] || 0;
var temp_time = h * 60 * 60 + m * 60 + s;
// --開始時間
var open_time = zero_time + temp_time;
// --結束時間
var end_time = open_time + max_times;
var cur_time = client.socket.getTime();
var is_open = true;
var time = 0;
if (open_time > cur_time) {
is_open = false;
time = open_time - cur_time;
} else if (cur_time > end_time) {
// --說明需要過天了
var tomorrow_time = zero_time + TimeTool.day2s();
is_open = false;
time = tomorrow_time - cur_time + temp_time;
} else {
is_open = true;
time = end_time - cur_time;
}
return {
is_open: true,
time: time
};
},
// --------------------------------戰令-----------------------------------
setOrderactionData: function setOrderactionData(data) {
this.orderaction_data = data;
if (data) {
this.setGiftStatus(data.rmb_status);
}
},
// --獲取當前週期
getCurPeriod: function getCurPeriod() {
if (this.orderaction_data && this.orderaction_data.period) {
return this.orderaction_data.period;
}
return 1;
},
// --獲取特權狀態
getGiftStatus: function getGiftStatus() {
if (this.rmb_status) {
return this.rmb_status;
}
return 0;
},
getLevShowData: function getLevShowData(lev) {
if (this.orderaction_data && this.orderaction_data.list && this.orderaction_data.list[lev]) {
return this.orderaction_data.list[lev];
}
return null;
},
// --獲取勝場
getWinCounts: function getWinCounts() {
if (this.orderaction_data && this.orderaction_data.win_count) {
return this.orderaction_data.win_count;
}
return 0;
},
getCurDay: function getCurDay() {
if (this.orderaction_data && this.orderaction_data.cur_day) {
return this.orderaction_data.cur_day;
}
return 1;
},
setOrderactionRedStatus: function setOrderactionRedStatus(status) {
this.orderaction_first_red_status = status;
},
// --設置特權狀態
setGiftStatus: function setGiftStatus(status) {
this.rmb_status = status;
},
// --獲取戰令紅點
getOrderactionRedpoint: function getOrderactionRedpoint() {
if (this.orderaction_first_red_status == 1) {
return true;
}
if (!this.orderaction_data) return false;
var lev_reward_list = game.configs.arena_elite_data.data_lev_reward_list;
if (lev_reward_list && lev_reward_list[this.orderaction_data.period]) {
for (var i in lev_reward_list[this.orderaction_data.period]) {
//this.orderaction_data.list
var v = lev_reward_list[this.orderaction_data.period][i];
var status = 0;
var rmb_status = 0;
var lev_list = this.getLevShowData(v.lev);
if (lev_list) {
status = lev_list.award_status;
rmb_status = lev_list.rmb_award_status;
}
if (v.lev <= this.orderaction_data.lev) {
if (status == 0) {
//可領
return true;
} else if (rmb_status == 0 && this.orderaction_data.rmb_status == 1) {
//可領
return true;
}
}
}
}
return false;
}
});
cc._RF.pop();