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

288 lines
8.8 KiB
JavaScript

const GuildBatMod = require("guildbat.mod");
const BridgeWindow = require( "bridge.window" );
const GuildwarEvent = require("guildwar_event");
const ItemLay = require("cmp.common.itemlayout");
const GuildwarConst = require("guildbat.define");
const HCT = require("hero_controller");
const HeroConst = require("hero_const");
const HeroVo = require("hero_vo");
const RoleController = require("role_controller");
const PartnerConst = require("partner_const");
cc.Class({
extends: BridgeWindow,
properties: {
myForms:{//我方陣容
default:null,
type:ItemLay
},
enyForms:{//敵方陣容
default:null,
type:ItemLay
},
myTag:{
default:null,
type:cc.Node
},
enyTag:{
default:null,
type:cc.Node
},
myName:{
default:null,
type:cc.Node
},
enyName:{
default:null,
type:cc.Node
},
myPower:{
default:null,
type:cc.Node
},
enyPower:{
default:null,
type:cc.Node
},
fabHead:{
default:null,
type:cc.Prefab
},
finishTag:{//被擊敗的標記
default:null,
type:cc.Node
},
addition:{//加成
default:null,
type:cc.Node
},
btns:{
default:null,
type:cc.Node
},
limitTxt:{
default:null,
type:cc.Node
},
},
// LIFE-CYCLE CALLBACKS:
onLoad () {
this.mod = GuildBatMod.getInstance();
this.bindGEvent(GuildwarEvent.UpddateGuildBatForm,this.freshMyForm.bind(this));
},
freshMyForm(data){
this.updateMyForms(data);
this.updateMyInfos();
},
onOpenConfigs(params) {
if(!params){
return this.delayClose();
}
let enydata = params.data;
this.flag = (enydata.hp <= 0?1:0);
nx.gui.setActive(this.addition,"",this.flag == 1);
nx.gui.setActive(this.btns,"",this.flag == 0);
this.finishTag.active = (this.flag == 1);
this.data = enydata;
this.updateEnyForms(enydata.defense,enydata.formation_type);
this.updateMyForms();
this.updateEnyInfos(enydata);
this.updateMyInfos();
//buff加成和難度加成
this.updateBuffInfo();
this.updateDiftInfo(enydata.pos);
let total_relic = game.configs.guild_war_data.data_const.ruins_challange_limit.val;
nx.gui.setString(this.limitTxt,"",cc.js.formatStr(nx.text.getKey("GuildBatRuins_"),enydata.relic_def_count,total_relic));
},
//對手佈陣
updateEnyForms(defense_heros,formation_type){
let formation_config = game.configs.formation_data.data_form_data[ formation_type ];
let poses = formation_config.pos;
let pos_info = [];
//陣型對位
for(let pos in poses){
for(let v in defense_heros){
if(defense_heros[v].pos == poses[pos][0]){
pos_info.push([poses[pos][1],defense_heros[v]]);
}
}
}
let heros = [];
for(let i=1;i<=9;i++){
let in_form = false;
for(let j in pos_info){
if(pos_info[j][0] == i){
in_form = true;
let vo = new HeroVo();
vo.bid = pos_info[j][1].bid;
vo.lev = pos_info[j][1].lev;
vo.star = pos_info[j][1].star;
for(let v in pos_info[j][1].ext_data){
if(pos_info[j][1].ext_data[v].key == 5){
vo.clothes_id = pos_info[j][1].ext_data[v].val;
}
}
if(vo){
heros.push(vo);
}else{
heros.push(null);
}
}
}
if(!in_form){
heros.push(null);
}
}
this.enyForms.rebuild(heros);
},
//我的佈陣
updateMyForms(data){
let HML = HCT.getInstance().getModel();
let pos_info = [];
let formation_config = game.configs.formation_data.data_form_data[ HML.use_formation_type ];
let poses = formation_config.pos;
var pos_list = [];
if(data){
pos_list = data;
}else{
pos_list = HML.getMyPosList();
}
//陣型對位
for(let pos in poses){
for(let v in pos_list){
if(pos_list[v].pos == poses[pos][0]){
pos_info.push([poses[pos][1],pos_list[v].id]);
}
}
}
let heros = [];
for(let i=1;i<=9;i++){
let in_form = false;
for(let j in pos_info){
if(pos_info[j][0] == i){
in_form = true;
let vo = HML.getHeroById(pos_info[j][1]);
if(vo){
heros.push(vo);
}else{
heros.push(null);
}
}
}
if(!in_form){
heros.push(null);
}
}
this.myForms.rebuild(heros);
},
updateEnyInfos(data){
let head_data = {};
head_data.name = data.name;
head_data.lev = data.lev;
head_data.face = data.face;
let enyHead = cc.instantiate(this.fabHead);
enyHead.parent = this.enyTag;
let cmp = nx.gui.getComponent(enyHead,"","cmp.common.header");
if(cmp){
cmp.setData(head_data);
}
nx.gui.setString(this.enyName,"",data.name);
nx.gui.setString(this.enyPower,"",data.power);
},
updateMyInfos(){
let role_vo = RoleController.getInstance().getRoleVo();
let myHead = cc.instantiate(this.fabHead);
myHead.parent = this.myTag;
let cmp = nx.gui.getComponent(myHead,"","cmp.common.header");
if(cmp){
cmp.setData(role_vo);
}
nx.gui.setString(this.myName,"",role_vo.name);
nx.gui.setString(this.myPower,"",role_vo.power);
},
updateBuffInfo(){
let myBaseData = this.mod.getMyGuildWarBaseInfo();
let buff_lev = myBaseData.buff_lev;
let buff_cfg = game.configs.guild_war_data.data_buff[buff_lev];
if(buff_cfg){
for(let i in buff_cfg.attr){
let attr = buff_cfg.attr[i];
let nd = nx.gui.find(this.addition,i);
if(nd){
let attr_str = game.configs.attr_data.data_key_to_name[attr[0]];
nx.gui.setString(nd,"name",attr_str);
if(attr[0] == "speed"){
nx.gui.setString(nd,"old",attr[1]);
}else{
nx.gui.setString(nd,"old",attr[1] + "‰");
}
}
}
}
},
updateDiftInfo(pos){
let warscore = game.configs.guild_war_data.data_position[pos];
// for(let i in warscore.warscore){
// let v = warscore.warscore[i];
// let nd = nx.gui.find(this.btns,i );
// if(nd){
// nx.gui.setString(nd,"tips",cc.js.formatStr(nx.text.getKey("GuildBatDif_"),v[1]));
// }
// }
nx.gui.setString(this.btns,"0/tips",cc.js.formatStr(nx.text.getKey("GuildBatDif_"),game.configs.guild_war_data.data_const.easy_difficulty.val/10));
nx.gui.setString(this.btns,"1/tips",cc.js.formatStr(nx.text.getKey("GuildBatDif_"),game.configs.guild_war_data.data_const.normal_difficulty.val/10));
nx.gui.setString(this.btns,"2/tips",cc.js.formatStr(nx.text.getKey("GuildBatDif_"),game.configs.guild_war_data.data_const.hard_difficulty.val/10));
for (let d = 0; d < warscore.warscore.length; d++) {
let score = warscore.warscore[d];
let nd = this.btns.children[d];
nx.gui.setString(nd,"result",nx.text.format("PvpGResult", score[1] ));
}
},
onPreClosed() {
this.myForms.rebuild([]);
this.enyForms.rebuild([]);
},
touchbat(star){
this.mod.requestGuildWarFighting(this.data.pos,star,this.flag,(_data)=>{
if(_data){
this.close();
}
});
},
touchClear(){
this.mod.requestGuildWarFighting(this.data.pos,0,this.flag,(_data)=>{
if(_data){
this.close();
}
});
},
openHeroFrom(){
HCT.getInstance().openFormGoFightPanel(true, PartnerConst.Fun_Form.Drama, {need_hide_top:true}, HeroConst.FormShowType.eFormSave)
},
});