342 lines
10 KiB
JavaScript
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(); |