Files
2026-05-23 22:10:14 +08:00

350 lines
10 KiB
JavaScript

// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
// 这里填写详细说明,主要填写该模块的功能简要
// <br/>Create: 2019-07-29 10:38:42
// --------------------------------------------------------------------
const 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 () {
this.ctrl = arguments[0];
},
properties: {
},
initConfig: function () {
//當前狀態 賦值 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(scdata){
if (this.scdata == null) {
this.scdata = scdata
}else{
for (let k in scdata) {
let v = scdata[k];
if (this.scdata[k]) {
this.scdata[k] = v
if (k == "rmb_status") {
this.setGiftStatus(v)
}
}
}
}
},
getSCData( ){
return this.scdata || {}
},
getEliteLev(){
if (!this.scdata) return 1 ;
return this.scdata.lev
},
getEliteRank(){
if (!this.scdata) return 0;
return this.scdata.rank
},
setRedPoint(redPoint){
this.redPoint = redPoint
},
//活動總紅點
getElitematchTotalRedPoint(){
let 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(){
if ( !this.scdata )return false;
if( this.scdata.day_combat_count > 0 ){
return true
}
return false
},
//獲取獎勵紅點
getRewardRedpoint(){
if( ! this.scdata) return false;
for (let i in this.scdata.lev_reward) {
let v = this.scdata.lev_reward[i]
if( v.flag == 1 ){ //可領
return true
}
}
return false
},
setEliteMatchFightTime(data){
if (this.scdata24905 == null ){
this.scdata24905 = data
}else{
for (let k in data) {
let v = data[k]
this.scdata24905[k] = v
}
}
if (this.scdata24905.end_time != 0) {
if (this.time_ticket == null) {
this.time_ticket = gcore.Timer.set(()=>{
this.scdata24905.end_time = this.scdata24905.end_time -1
if (this.scdata24905.end_time <= 0) {
this.clearTimeTicket()
ElitematchController.getInstance().sender24905()
}
},1000,-1)
}
}
},
clearTimeTicket(){
if (this.time_ticket) {
gcore.Timer.del(this.time_ticket)
this.time_ticket = null
}
},
//設置更新equip紅點的記錄
setUpdateRedPoint(bool){
this.is_redpoint_24900 = bool
this.is_redpoint_24905 = bool
this.is_redpoint_orderaction = bool
},
setSCDataBack24900(){
this.is_redpoint_24900 = true
this.checkRedPoint()
},
setSCDataBack24905(){
this.is_redpoint_24905 = true
this.checkRedPoint()
},
setSCDataBackOrderaction(){
this.is_redpoint_orderaction = true
this.checkRedPoint()
},
//need_check --必須檢測
checkRedPoint(need_check){
if( (this.is_redpoint_24905 && this.is_redpoint_24900 && this.is_redpoint_orderaction) || need_check) {
gcore.GlobalEvent.fire(LadderEvent.UpdateLadderRedStatus)
let status = this.getElitematchTotalRedPoint();
}
},
// -- 精英大賽是否開啟
// --return 是否開啟 , 限制類型 , 如果未開啟會返回: 0 表示段位開啟未開啟 1. 表示 等級不足 2 表示世界等級不足
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")}
}
// 個人等級限制
let role_lv_cfg = game.configs.arena_elite_data.data_elite_const["open_person_lev_limit"]
let 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}
}
// 世界等級限制
let world_lv_cfg = game.configs.arena_elite_data.data_elite_const["open_world_lev_limit"]
let 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(period){
this.elite_period = period
},
getElitePeriod(){
return this.elite_period || 1
},
//獲取賽季排行
// --獲取每天開啟精英賽的剩餘時間
// --return is_open, time
// --如果 is_open = true time 表示剩餘結束
// --如果 is_open = false time 表示多少秒後開啟
getOpenMatchLessTime(){
// --開始時間 {12,0,0}
let open_time_val = game.configs.arena_elite_data.data_elite_const["open_time"].val
// --開始持續秒數
let max_times = game.configs.arena_elite_data.data_elite_const["open_times"].val
let zero_time = TimeTool.getToDayZeroTime()
let h = open_time_val[0] || 0
let m = open_time_val[1] || 0
let s = open_time_val[2] || 0
let temp_time = h * 60 * 60 + m * 60 + s
// --開始時間
let open_time = zero_time + temp_time
// --結束時間
let end_time = open_time + max_times
let cur_time = client.socket.getTime()
let is_open = true
let time = 0
if (open_time > cur_time) {
is_open = false
time = open_time - cur_time
}else if (cur_time > end_time) {
// --說明需要過天了
let 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(data){
this.orderaction_data = data
if (data) {
this.setGiftStatus(data.rmb_status)
}
},
// --獲取當前週期
getCurPeriod(){
if (this.orderaction_data && this.orderaction_data.period) {
return this.orderaction_data.period
}
return 1
},
// --獲取特權狀態
getGiftStatus(){
if (this.rmb_status) {
return this.rmb_status
}
return 0
},
getLevShowData(lev){
if (this.orderaction_data && this.orderaction_data.list && this.orderaction_data.list[lev]) {
return this.orderaction_data.list[lev]
}
return null
},
// --獲取勝場
getWinCounts(){
if (this.orderaction_data && this.orderaction_data.win_count) {
return this.orderaction_data.win_count
}
return 0
},
getCurDay(){
if (this.orderaction_data && this.orderaction_data.cur_day) {
return this.orderaction_data.cur_day
}
return 1
},
setOrderactionRedStatus(status){
this.orderaction_first_red_status = status
},
// --設置特權狀態
setGiftStatus(status){
this.rmb_status = status
},
// --獲取戰令紅點
getOrderactionRedpoint(){
if (this.orderaction_first_red_status == 1) {
return true
}
if (!this.orderaction_data) return false;
let lev_reward_list = game.configs.arena_elite_data.data_lev_reward_list
if (lev_reward_list && lev_reward_list[this.orderaction_data.period]) {
for (let i in lev_reward_list[this.orderaction_data.period]) { //this.orderaction_data.list
let v = lev_reward_list[this.orderaction_data.period][i]
let status = 0
let rmb_status = 0
let 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
}
});