Files
fc/dev/project/assets/Scripts/mod/pve/planesafk/cmp/cmp.planesafk.wnd.masterinfo.js
T

561 lines
19 KiB
JavaScript
Raw Normal View History

2026-05-23 22:10:14 +08:00
const BridgeWindow = require("bridge.window");
const ItemLay = require("cmp.common.itemlayout");
const PlanesafkController = require("planesafk_controller");
const HeroController = require("hero_controller");
const RoleController = require("role_controller");
const PlanesafkEvent = require("planesafk_event");
const PlanesafkConst = require("planesafk_const");
const ElfinEvent = require("elfin_event");
const PartnerConst = require("partner_const");
const HeroConst = require("hero_const");
const HeroVo = require("hero_vo");
cc.Class({
extends: BridgeWindow,
properties: {
btn_fight:{
default:null,
type:cc.Node
},
btn_embattle:{
default:null,
type:cc.Node
},
lname:{
default:null,
type:cc.Label
},
rname:{
default:null,
type:cc.Label
},
myHead:{
default:null,
type:cc.Node
},
enHead:{
default:null,
type:cc.Node
},
left_atk_val:{
default:null,
type:cc.Label
},
left_atk_txt:{
default:null,
type:cc.Label
},
right_atk_txt:{
default:null,
type:cc.Label
},
left_heros:{
default:null,
type:ItemLay
},
right_heros:{
default:null,
type:ItemLay
},
rewards:{
default:null,
type:ItemLay
},
fabHeader:{
default:null,
type:cc.Prefab
},
mySprites:{
default:null,
type:cc.Node
},
selfSprites:{
default:null,
type:cc.Node
},
myAddTxt:{
default:null,
type:cc.Label
},
selfAddTxt:{
default:null,
type:cc.Label
},
buffTxts:{
default:[],
type:[cc.Node]
},
diffs:{
default:[],
type:[cc.Node]
}
},
// LIFE-CYCLE CALLBACKS:
onLoad() {
this.ctrl = PlanesafkController.getInstance();
this.model = this.ctrl.getModel();
// 可出战英雄数据
this.bindGEvent( PlanesafkEvent.Get_All_Hero_Event, this.getAllHeroByForm.bind( this ) );
// 我方阵容数据
this.bindGEvent( PlanesafkEvent.Get_Form_Data_Event, this.getHeroFormData.bind( this ) );
// 通过布阵更新了我方阵容数据
this.bindGEvent( PlanesafkEvent.Update_Form_Data_Event, this.updateMyFormData.bind( this ) );
// 我方精灵数据更新
this.bindGEvent( ElfinEvent.Get_Elfin_Tree_Data_Event, this.updateMyElfinInfo.bind( this ) );
// this.bindGEvent( ElfinEvent.Elfin_Plan_From_Info_Event, this.updateMyEflinSkill.bind( this ) );
// 通过布阵后战力值更新
this.bindGEvent( PlanesafkEvent.Update_Form_Atk_Event, this.updateMyHeroAtkVal.bind( this ) );
// 敌方阵容数据
this.bindGEvent( PlanesafkEvent.Get_Master_Data_Event, this.setMasterData.bind( this ) );
},
// updateMyEflinSkill(data){
// if (!data)return;
// let sprites = [];
// if (data.team_list && data.team_list[0]) {
// sprites = data.team_list[0].sprites;
// }
// // 精灵
// for (var i=1;i<=4;i++) {
// let left_elfin_item = this.mySprites.children[i-1];
// if (left_elfin_item) {
// var elfin_bid = this.getElfinBidByPos(sprites, i);
// if(elfin_bid){
// left_elfin_item.active = true;
// }else{
// left_elfin_item.active = false;
// }
// }
// }
// },
createHeroVo(role_data){
let vo = new HeroVo();
vo.atk = role_data.atk;
vo.bid = role_data.bid;
vo.ext_data = role_data.ext_data;
vo.hp_max = role_data.hp_max;
vo.hp_per = role_data.hp_per;
vo.is_master = role_data.is_master;
vo.lev = role_data.lev;
vo.partner_id = role_data.partner_id;
vo.rid = role_data.rid;
vo.srv_id = vo.srv_id;
vo.star = vo.star;
return vo;
},
setMasterData(data){
if (!data) return;
if (!this.data) return;
let evt_config = this.data.evt_config;
// 名称
// if (evt_config) {// && evt_config.type == PlanesafkConst.Evt_Type.Guard
this.rname.string = data.name || nx.text.getKey("lab_planesafk_master_sw");
// }
// 战力
this.right_atk_txt.string = data.guards_power;
// 头像
if(!this.right_head){
this.right_head = cc.instantiate(this.fabHeader);
this.right_head.parent = this.enHead;
}
let cmp = this.right_head.getComponent("cmp.common.header");
if(cmp){
cmp.setData(data);
}
// 英雄头像
let role_datas = [];
var formation_config = gdata("formation_data","data_form_data",data.formation_type)//game.configs.FormationData.data_form_data[data.formation_type]
for (var i=1;i<=9;i++) {
let role_data = null;
let key = null;
//阵法和实际位置的映射转换
for(let j=0;j<formation_config.pos.length;j++){
let pos_val = formation_config.pos[j];
if(pos_val[1] == i){
key = pos_val[0];
}
}
role_data = this.getRoleDataByIndex(key, data.guards)
// var hero_item = this.right_item_list[i]
let role_vo = null;
if (role_data) {
role_data.is_master = true;
role_data.rid = data.rid || 0;
role_data.srv_id = data.srv_id || "";
role_vo = this.createHeroVo(role_data);
// 剩余血量
// if (role_data.hp_per) {
// hero_item.showProgressbar(role_data.hp_per)
// if (role_data.hp_per <= 0) {
// hero_item.showStrTips(true,nx.text.getKey("tip_planesafk_deathed"),{c3b : new cc.Color( 255, 255, 255, 255 )})
// }
// }
}
role_datas.push(role_vo);
}
this.right_heros.rebuild(role_datas);
// 精灵
// this.tree_lv_right.string = (_string_format(nx.text.getKey("古树:%d级"), data.sprite_lev || 0))
for (var i=0;i<4;i++) {
var right_elfin_item = this.selfSprites.children[i];
if (right_elfin_item) {
var elfin_bid = this.getElfinBidByPos(data.sprites, i);
if(elfin_bid){
right_elfin_item.active = true;
}else{
right_elfin_item.active = false;
}
}
}
// 加成
var dif_val = data.strength || 1000
if (dif_val >= 1000) {
this.selfAddTxt.string = cc.js.formatStr(nx.text.getKey("lab_planesafk_master_window_tip5"),(dif_val-1000/10)/100);
}
else
{
this.selfAddTxt.string =cc.js.formatStr(nx.text.getKey("lab_planesafk_master_window_tip6"),(1000-dif_val/10)/100);
}
// // 我方buff数据
// for (var k in data.buffs) {
// var v = data.buffs[k];
// if (v.quality == 1) { // 蓝
// let buff_nd = this.buffTxts[v.quality - 1];
// nx.gui.setString(buff_nd,"num",v.num);
// }
// else if ( v.quality == 2 ){ //紫
// let buff_nd = this.buffTxts[v.quality - 1];
// nx.gui.setString(buff_nd,"num",v.num);
// }
// else if ( v.quality == 3 ){ // 橙
// let buff_nd = this.buffTxts[v.quality - 1];
// nx.gui.setString(buff_nd,"num",v.num);
// }
// }
},
updateMyHeroAtkVal(atk_val){
this.left_atk_txt.string = atk_val;
this.hero_base_atk_val = this.hero_base_atk_val || 0
var add_percent = (atk_val-this.hero_base_atk_val)/this.hero_base_atk_val*100
this.left_atk_val.string = cc.js.formatStr(nx.text.getKey("lab_planesafk_master_window_tip7"),add_percent.toFixed(1));
},
updateMyElfinInfo(){
},
updateMyFormData(form_type, pos_data){
if (!this.form_data)return;
this.form_data.formation_type = form_type
this.form_data.pos_info = pos_data
this.hero_base_atk_val = 0 // 英雄基础战力值
var partner_ids = [];
let role_datas = [];
var formation_config = gdata("formation_data","data_form_data",form_type);
for (var i=1;i<=9;i++) {
let key = null;
//阵法和实际位置的映射转换
for(let j=0;j<formation_config.pos.length;j++){
let pos_val = formation_config.pos[j];
if(pos_val[1] == i){
key = pos_val[0];
}
}
let role_info = this.getRoleDataByIndex(key, pos_data);
let role_data = null;
let role_vo = null;
if (role_info) {
if (role_info.data && role_info.data.flag == 1) {
role_data = role_info.data;
role_data.flag = 1;//雇佣英雄
partner_ids.push(role_data);
role_vo = this.createHeroVo(role_data);
}
else
{
role_data = HeroController.getInstance().getModel().getHeroById(role_info.id)
role_data.flag = 0;//非雇佣英雄
role_data.hp_per = this.model.getMyPlanesHeroHpPer(role_data.partner_id, role_data.flag)
partner_ids.push(role_data);
role_vo = role_data;
}
}
role_datas.push(role_vo);
// //助战
// if (role_data.flag == 1) {
// hero_item.showHelpImg(true)
// }
// // 剩余血量
// var hp_per = role_data.hp_per || PlanesafkController.getInstance().getModel().getMyPlanesHeroHpPer(role_data.partner_id, role_data.flag)
// if (hp_per) {
// hero_item.showProgressbar(hp_per)
// }
// 总战力
if(role_data){
this.hero_base_atk_val = this.hero_base_atk_val + role_data.power;
}else{
this.hero_base_atk_val = this.hero_base_atk_val + 0;
}
this.left_atk_txt.string = this.hero_base_atk_val;
}
this.left_heros.rebuild(role_datas);
if (Utils.next(partner_ids) != null) {
// 请求新上阵英雄的战力值
this.ctrl.sender28610(partner_ids)
}
},
getHeroFormData(data){
this.form_data = data
if (this.get_all_hero_flag) {
this.setMyFormData()
}
},
getAllHeroByForm(){
this.get_all_hero_flag = true
if (this.form_data) {
this.setMyFormData()
}
},
start() {
},
onOpenConfigs(data) {
this.data = data
if (!data)return;
this.updateAwardList()
this.ctrl.sender28612() // 请求我方阵容数据
this.ctrl.sender28600( this.data.line, this.data.index, 0, {}) // 请求敌方阵容数据
this.ctrl.sender28613()
//展示難度
// let evt_cfg = game.configs.planes_data.data_evt_info[data.evt_id];
// if(evt_cfg){
// this.diffs[evt_cfg.type - 1].active = true;
// }
//申请位面的精灵信息
// ElfinController.getInstance().send26555(PartnerConst.Fun_Form.Planes)
var evt_data = this.ctrl.getMapEvtData(this.data.line, this.data.index)
if (evt_data && evt_data.is_black) {
this.btn_fight.active = false;
this.btn_embattle.active = false;
}
},
onPreClosed() {
this.rewards.rebuild([]);
this.left_heros.rebuild([]);
this.right_heros.rebuild([]);
},
// 奖励数据
updateAwardList:function(){
var evt_config = this.data.evt_config;
if (!evt_config){
evt_config = game.configs.planes_data.data_evt_info[this.data.evt_id];
}
if(!evt_config)return;
// 怪物显示事件名称
if (evt_config.type == PlanesafkConst.Evt_Type.Monster) {
this.rname.string = evt_config.name;
}
var add_per = 0;
var role_vo = RoleController.getInstance().getRoleVo();
if (!role_vo)return;
let lev = role_vo.lev || 1;
let reward_list = gdata("planes_data","data_reward_info",evt_config.reward_list[0]);
let reward = null;
if (reward_list) {
for (var i in reward_list) {
var v =reward_list[i]
if (v.min && v.max && lev >= v.min && lev <= v.max) {
reward = v.reward
}
}
}
var data_list = reward || []
var item_list = []
for (var k in data_list) {
var v =data_list[k]
var vo = {}
vo.bid = v[0]
vo.num = Math.floor((1+add_per/1000)*v[1])
if (vo.bid == 25 && this.model.isHolidayOpen()) {
vo.num = Math.floor(vo.num * 1.1 + 0.5)
}
item_list.push(vo);
}
this.rewards.rebuild(item_list);
},
// 我方阵容数据
setMyFormData(){
let role_vo = RoleController.getInstance().getRoleVo();
if (!this.form_data || !role_vo )return;
// 名称
this.lname.string = role_vo.name;
// 头像
if(!this.left_head){
this.left_head = cc.instantiate(this.fabHeader);
this.left_head.parent = this.myHead;
}
let cmp = this.left_head.getComponent("cmp.common.header");
if(cmp){
cmp.setData(role_vo);
}
// 英雄头像
this.hero_base_atk_val = 0;
var formation_config = gdata("formation_data","data_form_data",this.form_data.formation_type);
let partner_ids = [];
let role_datas = [];
for (var i=1;i<=9;i++) {
let role_data =null;
let key = null;
//阵法和实际位置的映射转换
for(let j=0;j<formation_config.pos.length;j++){
let pos_val = formation_config.pos[j];
if(pos_val[1] == i){
key = pos_val[0];
}
}
let role_info = this.getRoleDataByIndex(key, this.form_data.pos_info)
//位置上没有英雄就选择置空
let role_vo = null;
if (role_info) {
if (role_info.flag && role_info.flag == 1) {
role_data = this.model.getPlanesHireHeroData(role_info.id)
role_data.flag = 1;//雇佣英雄
partner_ids.push(role_data);
role_vo = this.createHeroVo(role_data);
}
else
{
role_data = HeroController.getInstance().getModel().getHeroById(role_info.id)
role_data.flag = 0;//非雇佣英雄
role_data.hp_per = this.model.getMyPlanesHeroHpPer(role_data.partner_id, role_data.flag)
partner_ids.push(role_data);
role_vo = role_data;
}
}
role_datas.push(role_vo);
// 总战力
if(role_data){
this.hero_base_atk_val = this.hero_base_atk_val + role_data.power;
}else{
this.hero_base_atk_val = this.hero_base_atk_val + 0;
}
this.left_atk_txt.string = this.hero_base_atk_val;
}
this.left_heros.rebuild(role_datas);
// 请求战力加成
if (partner_ids.length > 0) {
// 请求新上阵英雄的战力值
this.ctrl.sender28610(partner_ids);
}
// 精灵
this.updateMyElfinInfo();
},
// 根据位置获取精灵的bid
getElfinBidByPos:function( sprite_data, pos ){
if (!sprite_data)return;
for (var k in sprite_data) {
var v = sprite_data[k]
if (v.pos == pos) {
return v.item_bid;
}
}
},
// 根据位置获取我方英雄id
getMyRoleIdByIndex:function( index, role_list ){
for (var k in role_list) {
var v= role_list[k]
if (v.pos == index) {
return v.id
}
}
},
// 根据位置获取敌方英雄数据
getRoleDataByIndex:function( index, role_list ){
for (var k in role_list) {
var v = role_list[k]
if (v.pos == index) {
return v
}
}
},
// 出战
onClickFightBtn(){
if (! this.form_data || ! this.data) return;
if (this.form_data.pos_info.length < 5) {
var str = nx.text.getKey("lab_planesafk_master_window_tip2");
nx.mbox(str,["cancel","confirm"],(_key,_box)=>{
_box.close();
if(_key == "confirm"){
this.comfirmFight();
}
});
} else {
this.comfirmFight();
}
},
comfirmFight:function(){
if (! this.form_data || ! this.data)return;
let ext_list = [];
// 阵法
ext_list.push({type : PlanesafkConst.Proto_28600._1, val1 : this.form_data.formation_type, val2 : 0})
// 神器
ext_list.push({type : PlanesafkConst.Proto_28600._2, val1 : this.form_data.hallows_id, val2 : 0})
// 英雄
for (var k in this.form_data.pos_info) {
var v =this.form_data.pos_info[k]
if ((v.flag && v.flag == 1) || (v.data && v.data.flag == 1)) { // 雇佣英雄
ext_list.push({type : PlanesafkConst.Proto_28600._4, val1 : v.pos, val2 : v.id})
}
else
{
ext_list.push({type : PlanesafkConst.Proto_28600._3, val1 : v.pos, val2 :v.id})
}
}
this.ctrl.sender28600( this.data.line, this.data.index, 1, ext_list ,null , true)
this.close();
},
// 布阵
onClickEmbattleBtn:function( ){
HeroController.getInstance().openFormGoFightPanel(true, PartnerConst.Fun_Form.Planes, {need_hide_top:true}, HeroConst.FormShowType.eFormSave)
},
// update (dt) {},
});