Files
fc/dev/project/assets/Scripts/mod/acts/limitChallenge/cmp/cmp.act.limitChallenge.js
T
2026-05-23 22:10:14 +08:00

273 lines
8.4 KiB
JavaScript

/******************************************************************
*
* 限定挑戰
*
******************************************************************/
const ActPage = require( "act.page.base" );
const NxSpine = require("nx.fx.spine");
const PathTool = require("pathtool");
const ItemLay = require("cmp.common.itemlayout");
const BCT = require("battle_controller");
const BCS = require("battle_const");
const TipsController = require("tips_controller");
cc.Class( {
extends: ActPage,
properties: {
awards:{
default:null,
type:ItemLay
},
scores:{
default:null,
type:cc.Node
},
rankList:{
default:null,
type:cc.Node
},
rankItem:{
default:null,
type:cc.Node
},
rankSelf:{
default:null,
type:cc.Node
},
totalDmg:{
default:null,
type:cc.Node
},
cdTime:{
default:null,
type:cc.Node
},
challengeNum:{
default:null,
type:cc.Node
},
getBtn:{
default:null,
type:cc.Node
},
roleSp:{
default:null,
type:NxSpine
},
pic:{
default:null,
type:cc.Node
},
maxTi:{
default:null,
type:cc.Node
},
rankTi:{
default:null,
type:cc.Node
},
rankTi3:{
default:null,
type:cc.Node
},
},
// 初始化
build: function( _data ) {
this._super( _data );
this.chal_data = game.configs.limit_challenge_data;
// 活动监听
this.mod.vbind( this, [
[ "LimitChallengeInfos", this.freshInfos.bind( this ) ],
[ "LimitChallengeRanks", this.freshRanks.bind( this ) ],
] );
},
onEnable(){
this.mod.reqLimitData(this.data.camp_id);
this.mod.reqRank(this.data.camp_id);
},
onDisable(){
this.awards.rebuild([]);
},
// 销毁
onDestroy: function() {
// 活动监听解除
if( this.mod ) {
this.mod.vunbind( this );
}
this._super();
},
freshInfos(data){
this.payId = [];
if(nx.dt.objEmpty(data))return;
let info = data[this.data.camp_id];
if(nx.dt.objEmpty(info))return;
this.lastChallenge = info.challenge_num;
nx.gui.setCdTxt(this.cdTime,"",info.end_time - client.socket.getTime());
nx.gui.setString(this.challengeNum,"",info.challenge_num);
nx.gui.setString(this.totalDmg,"",info.all_dps);
let res_data = this.chal_data.data_info[this.data.camp_id];
if(res_data){
let res_path = PathTool.getSpinePath(res_data.spine,"show",false);
this.roleSp.load(res_path,(_e)=>{
if(_e){
this.roleSp.stop();
}else{
this.roleSp.action("action1",true);
}
});
let ti_path = cc.js.formatStr("locals/%s/images/acts/%s",nx.getLocLanguage(),res_data.title);
nx.gui.setSpriteFrame(this.pic,"",ti_path);
if(res_data.type == 1){
nx.gui.setString(this.maxTi,"",nx.text.getKey("batMaxDps"));
nx.gui.setString(this.rankTi,"",nx.text.getKey("DpsRank"));
nx.gui.setString(this.rankTi3,"",nx.text.getKey("DpsDmgVal"));
}else if(res_data.type == 2){
nx.gui.setString(this.maxTi,"",nx.text.getKey("batMaxCure"));
nx.gui.setString(this.rankTi,"",nx.text.getKey("CureRank"));
nx.gui.setString(this.rankTi3,"",nx.text.getKey("DpsCureVal"));
}
}
//獎勵和積分
let awards = this.chal_data.data_get_info;
let camp_id = info.camp_id;
let pushs = [];
let is_allow_get = false;//有一個就能領取
for(let i=1;i<=7;i++){
let aCfg = awards[camp_id+"_"+i];
if(aCfg){
pushs.push(aCfg.reward[0]);
let scroe = cc.js.formatStr(nx.text.getKey("lab_money_tip_w"),aCfg.num/10000);
nx.gui.setString(this.scores,String(i),scroe);
let get_data = info.rewards[i-1];
for(let a in info.rewards){
if(info.rewards[a].id == i){
get_data = info.rewards[a];
break;
}
}
if(get_data && get_data.status == 1){
is_allow_get = true;
nx.gui.setColor(this.scores,String(i),new cc.Color(0,252,255));
}else if(get_data && get_data.status == 2){
nx.gui.setColor(this.scores,String(i),new cc.Color(255,255,255));
nx.gui.setString(this.scores,String(i),nx.text.getKey("Got"));
}else{
nx.gui.setColor(this.scores,String(i),new cc.Color(255,255,255));
}
}
}
this.awards.rebuild(pushs);
nx.gui.setActive(this.getBtn,"",is_allow_get);
},
freshRanks(data){
if(nx.dt.objEmpty(data))return;
//先設置簡單榜單
let info_data = this.chal_data.data_info[this.data.camp_id];
this.setMyRank(data.my_idx,data.name,data.my_val1);
nx.bridge.NodeChidrenDestroy(this.rankList);
for(let i=0;i<3;i++){
let rank_data = data.rank_list[i];
if(rank_data){
let item = cc.instantiate(this.rankItem);
item.parent = this.rankList;
item.active = true;
item.x = 0;
nx.gui.setActive(item,String(rank_data.idx),true);
nx.gui.setString(item,"name",rank_data.name);
nx.gui.setString(item,"dmg",rank_data.val1);
if(info_data){
if(info_data.type == 1){
nx.gui.setColor(item,"dmg",new cc.Color(255,105,46));
}else if(info_data.type == 2){
nx.gui.setColor(item,"dmg",new cc.Color(80,238,2));
}
}
}
}
},
setMyRank(myidx,myname,my_val1){
nx.gui.setString(this.rankSelf,"name",myname);
if(myidx == 0){
nx.gui.setString(this.rankSelf,"rank",nx.text.getKey("Rank0"));
nx.gui.setString(this.rankSelf,"dmg",0);
}else{
nx.gui.setString(this.rankSelf,"rank",myidx);
nx.gui.setString(this.rankSelf,"dmg",my_val1);
}
},
onTryBat(){
if(this.lastChallenge > 0){
BCT.getInstance().requestOpenBattleRelevanceWindow(BCS.Fight_Type.SingleBoss,null,(_data)=>{
if(_data){
this.mod.reqBat(this.data.camp_id,(_data)=>{
if(_data){
this.mod.reqLimitData(this.data.camp_id);
this.scheduleOnce(()=>{
this.mod.reqRank(this.data.camp_id);
},3);
}
});
}
});
}else{
return nx.tbox("lab_ladder_controller_tip3");
}
},
onTryClear(){
if(this.lastChallenge > 0){
this.mod.reqBatClear(this.data.camp_id,(_data)=>{
if(_data){
this.mod.reqLimitData(this.data.camp_id);
this.mod.reqRank(this.data.camp_id);
}
});
}else{
return nx.tbox("lab_ladder_controller_tip3");
}
},
onOpenRank(){
let data = this.mod.vget("LimitChallengeRanks");
if(nx.dt.objEmpty(data))return;
nx.bridge.createPanel("WndActLimitChalRank",{list:data.rank_list,camp_id:this.data.camp_id,config:this.chal_data});
},
onGetAward(){
if(this.data.camp_id){
this.mod.reqAward(this.data.camp_id,(_data)=>{
if(_data){
this.mod.reqLimitData(this.data.camp_id);
this.mod.reqRank(this.data.camp_id);
}
});
}
},
onClickRule(){
let TC = TipsController.getInstance();
if( TC ) {
let config = this.chal_data.data_explain[1];
TC.showTextPanel(null,config.desc );
}
},
} );