543 lines
18 KiB
JavaScript
543 lines
18 KiB
JavaScript
/******************************************************************
|
|
*
|
|
* 伙伴信息页 --- 升阶
|
|
*
|
|
******************************************************************/
|
|
|
|
const BridgeComponent = require( "bridge.component" );
|
|
const TipsController = require( "tips_controller" );
|
|
const HeroConst = require( "hero_const" );
|
|
const HeroEvent = require( "hero_event" );
|
|
const HeroControl = require( "hero_controller" );
|
|
const HeroCalculate = require( "hero_calculate" );
|
|
const RoleController = require( "role_controller" );
|
|
|
|
const BackPackConst = require( "backpack_const" );
|
|
const BackpackController = require( "backpack_controller" );
|
|
const FID = require( "bridge.function.ids" );
|
|
const BIT = BackPackConst.item_type;
|
|
|
|
const HEQP = HeroConst.EquipPosList;
|
|
|
|
cc.Class( {
|
|
|
|
extends: BridgeComponent,
|
|
|
|
properties: {
|
|
},
|
|
|
|
// 显示
|
|
onEnable: function() {
|
|
|
|
// 视图监听
|
|
this.vbind( [
|
|
[ "ShowPartner", this.onPartnerChanged.bind( this ) ]
|
|
] );
|
|
|
|
// 事件监听
|
|
this.bindGEvent( HeroEvent.Hero_Data_Update, this.onPartnerUpdate.bind( this ) );
|
|
this.bindGEvent( HeroEvent.Equip_Update_Event, this.onPartnerUpdate.bind( this ) );
|
|
|
|
},
|
|
|
|
// 隐藏
|
|
onDisable: function() {
|
|
|
|
// 视图监听解除
|
|
this.vunbind();
|
|
|
|
// 事件监听解除
|
|
this.unbindGEvents();
|
|
|
|
},
|
|
|
|
// 有伙伴数据更新
|
|
onPartnerUpdate: function( _vo ) {
|
|
|
|
if( _vo &&
|
|
this.partner &&
|
|
_vo.partner_id == this.partner.partner_id ) {
|
|
this.onPartnerChanged( _vo );
|
|
|
|
}
|
|
},
|
|
|
|
// 伙伴更新
|
|
onPartnerChanged: function( _partner ) {
|
|
|
|
this.partner = _partner;
|
|
|
|
// 置空
|
|
if( !this.dataAnalyst() ) {
|
|
this.setEmpty();
|
|
return;
|
|
}
|
|
|
|
// this.dealUpLevOnceToHundred();
|
|
nx.gui.setActive( this, "uplevelmax", false );
|
|
// 全刷新
|
|
this.freshLevel();
|
|
this.freshOps();
|
|
},
|
|
|
|
// 置空
|
|
setEmpty: function() {
|
|
|
|
nx.gui.setString( this, "lv/txt", "" );
|
|
nx.gui.setString( this, "bp/txt", "" );
|
|
nx.gui.setActive( this, "uplevel", false );
|
|
nx.gui.setActive( this, "upgrade", false );
|
|
nx.gui.setActive( this, "max", false );
|
|
|
|
let stars = nx.gui.find( this, "stars/list" );
|
|
if( stars ) {
|
|
stars.children.forEach( ch => {
|
|
nx.gui.setActive( ch, "on", false );
|
|
nx.gui.setActive( ch, "off", true );
|
|
} );
|
|
}
|
|
|
|
let need = nx.gui.find( this, "need/list" );
|
|
if( need ) {
|
|
need.children.forEach( ch => {
|
|
nx.gui.setSpriteFrame( ch, "icon", "" );
|
|
nx.gui.setString( ch, "txt", "" );
|
|
} );
|
|
}
|
|
},
|
|
|
|
dealUpLevOnceToHundred: function(){
|
|
|
|
|
|
let ucfg = game.configs.partner_data.data_partner_lev;
|
|
let mcfg = gdata( "partner_data", "data_partner_star" );
|
|
let ccfg = game.configs.partner_data.data_partner_const;
|
|
let key = this.partner.bid + "_" + this.partner.star;
|
|
let k1c = this.partner.type + "_" + this.partner.break_id + "_" + 1;
|
|
let cbc = game.configs.partner_data.data_partner_brach;
|
|
|
|
let needexp = 0;
|
|
let needcoin = 0;
|
|
|
|
let needmat = 0;
|
|
|
|
for (let i in ucfg ) {
|
|
let cfg = ucfg[i];
|
|
let needs = cfg.expend;
|
|
if( cfg.lev >= this.partner.lev && cfg.lev < ccfg.born_limit_lev.val ){
|
|
needexp += needs[0][1];
|
|
needcoin += needs[1][1];
|
|
}
|
|
|
|
}
|
|
let havepartexp = BackpackController.getInstance().getModel().getItemNumByBid( ucfg[1].expend[0][0] );
|
|
let havecoin = BackpackController.getInstance().getModel().getItemNumByBid( ucfg[1].expend[1][0] );
|
|
|
|
let havemat = BackpackController.getInstance().getModel().getItemNumByBid( cbc[k1c].expend[1][0] );
|
|
|
|
|
|
if( havecoin >= needcoin && havepartexp >= needexp ){
|
|
|
|
|
|
for (let b = 0; b < ccfg.ascend_stairs.val; b++) {
|
|
if( b >= this.partner.break_lev ){
|
|
let k1 = this.partner.type + "_" + this.partner.break_id + "_" + b;
|
|
let cbccc = cbc[ k1 ];
|
|
needmat += cbccc.expend[1][1];
|
|
needcoin += cbccc.expend[0][1];
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
return needcoin <= havecoin && havemat >= needmat && havepartexp >= needexp;
|
|
|
|
},
|
|
|
|
// 数据统计
|
|
dataAnalyst: function() {
|
|
|
|
// 空目标
|
|
if( nx.dt.objEmpty( this.partner ) ) {
|
|
return false;
|
|
}
|
|
|
|
let key = this.partner.bid + "_" + this.partner.star;
|
|
let scfg = gdata( "partner_data", "data_partner_star", key );
|
|
if( nx.dt.objEmpty( scfg ) ) {
|
|
nx.error( "升级刷新失败,当前配置无效!", key );
|
|
return false;
|
|
}
|
|
|
|
let k1 = this.partner.type + "_" + this.partner.break_id + "_" + this.partner.break_lev;
|
|
let cbc = game.configs.partner_data.data_partner_brach[ k1 ];
|
|
if( nx.dt.objEmpty( cbc ) ) {
|
|
nx.error( "升级刷新失败,当前配置无效!", k1 );
|
|
return false;
|
|
}
|
|
|
|
let k2 = this.partner.type + "_" + this.partner.break_id + "_" + ( this.partner.break_lev + 1 );
|
|
let nbc = game.configs.partner_data.data_partner_brach[ k2 ];
|
|
|
|
this.data = {
|
|
scfg: scfg, // 当前配置
|
|
cbc: cbc, // 当前阶段配置
|
|
nbc: nbc, // 下个阶段配置
|
|
};
|
|
|
|
return true;
|
|
},
|
|
|
|
// 阶段刷新
|
|
freshLevel: function() {
|
|
|
|
// 战力
|
|
nx.gui.setString( this, "bp/txt", this.partner.power );
|
|
|
|
// 等级
|
|
let key = this.partner.bid + "_" + this.partner.star;
|
|
let scfg = gdata( "partner_data", "data_partner_star", key );
|
|
if( nx.dt.objEmpty( scfg ) ) {
|
|
nx.error( "升级刷新失败,当前配置无效!", key );
|
|
return false;
|
|
}
|
|
|
|
let k1 = this.partner.type + "_" + this.partner.break_id + "_" + this.partner.break_lev;
|
|
let cbc = game.configs.partner_data.data_partner_brach[ k1 ];
|
|
if( nx.dt.objEmpty( cbc ) ) {
|
|
nx.error( "升级刷新失败,当前配置无效!", k1 );
|
|
return false;
|
|
}
|
|
|
|
let maxlv = Math.max( cbc.lev_max, scfg.lev_max );
|
|
// let txt = `${this.partner.lev}/${maxlv}`;
|
|
nx.gui.setString( this, "lv/levs/lev", this.partner.lev );
|
|
nx.gui.setString( this, "lv/levs/max", maxlv );
|
|
|
|
// 当前阶
|
|
let model = HeroControl.getInstance().getModel();
|
|
let cur = this.partner.break_lev;
|
|
// let max = model.getHeroMaxBreakCountByInitStar( this.partner.star );
|
|
let lst = nx.gui.find( this, "stars/list" );
|
|
for( let i = 1; i <= lst.children.length; ++i ) {
|
|
let node = lst.children[ i - 1 ];
|
|
nx.gui.setActive( node, "on", i <= cur );
|
|
nx.gui.setActive( node, "off", i > cur );
|
|
}
|
|
|
|
},
|
|
|
|
// 操作刷新
|
|
freshOps: function() {
|
|
nx.gui.setActive( this, "upstar", false );
|
|
// 尚未当阶段满级,更新升级花费
|
|
// 最大等级按照当前阶段的最高等级/如果是顶阶那么按照最大等级
|
|
let maxLv = this.data.cbc.lev_max;
|
|
if( nx.dt.objEmpty( this.data.nbc ) ) {
|
|
maxLv = Math.max( maxLv, this.data.scfg.lev_max );
|
|
}
|
|
if( this.partner.lev < maxLv ) {
|
|
this.updateNeeds();
|
|
return;
|
|
}
|
|
|
|
// 当前满级,需要升阶判断
|
|
// 已经顶阶
|
|
if( nx.dt.objEmpty( this.data.nbc ) ) {
|
|
nx.gui.setActive( this, "max", true );
|
|
nx.gui.setActive( this, "need/list", false );
|
|
nx.gui.setActive( this, "uplevel", false );
|
|
nx.gui.setActive( this, "upgrade", false );
|
|
nx.gui.setActive( this, "upstar", this.partner.star >= 4 );
|
|
return;
|
|
}
|
|
|
|
// 可以继续进阶
|
|
// 进阶有要求,需要升星
|
|
let HC = HeroCalculate.getInstance();
|
|
let limit = this.data.nbc.limit || [];
|
|
let enough = HC.isEnoughCondition( limit, this.partner );
|
|
if( enough ) {
|
|
nx.gui.setActive( this, "max", true );
|
|
nx.gui.setActive( this, "need/list", false );
|
|
nx.gui.setActive( this, "uplevel", false );
|
|
nx.gui.setActive( this, "upgrade", true );
|
|
}
|
|
else {
|
|
nx.gui.setActive( this, "max", true );
|
|
nx.gui.setActive( this, "need/list", false );
|
|
nx.gui.setActive( this, "uplevel", false );
|
|
nx.gui.setActive( this, "upgrade", false );
|
|
nx.gui.setActive( this, "upstar", this.partner.star >= 4 );
|
|
}
|
|
|
|
// 红点提示
|
|
let tip = HC.checkSingleHeroLevelUpRedPoint( this.partner );
|
|
nx.gui.setActive( this, "uplevel/tip", tip );
|
|
|
|
},
|
|
|
|
// 更新升级花费
|
|
updateNeeds: function() {
|
|
|
|
let lev = this.partner.lev;
|
|
let max = lev;
|
|
let step = ( lev < 60 ) ? 5 : 5;
|
|
let k1 = this.partner.type + "_" + this.partner.break_id + "_" + this.partner.break_lev;
|
|
let upgrade = game.configs.partner_data.data_partner_brach[k1].lev_max;
|
|
let needs = {};
|
|
let cur = {};
|
|
let model = BackpackController.getInstance().getModel();
|
|
let check = function( _costs ) {
|
|
let need = [];
|
|
let enough = true;
|
|
for( let i = 0; i < _costs.length; ++i ) {
|
|
|
|
let cost = _costs[ i ];
|
|
let id = cost[ 0 ];
|
|
if( cur[ id ] == null ) {
|
|
cur[ id ] = 0;
|
|
}
|
|
cur[ id ] = cur[ id ] + cost[ 1 ];
|
|
need.push( {
|
|
id : id,
|
|
need : cost[1]
|
|
} )
|
|
let count = model.getItemNumByBid( id );
|
|
if( count < cur[ id ] ) {
|
|
enough = false;
|
|
}
|
|
}
|
|
if( !enough ){
|
|
for (let n = 0; n < need.length; n++) {
|
|
let ned = need[n];
|
|
cur[ned.id] = cur[ned.id] - ned.need;
|
|
cur[ned.id] = cur[ned.id] == 0 ? ned.need : cur[ned.id] ;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
return { is_enough: enough, cur_cost_list: cur }
|
|
};
|
|
|
|
// 资源统计
|
|
let maxLv = Math.max( this.data.cbc.lev_max, this.data.scfg.lev_max );
|
|
for( let i = 1; i <= step; ++i ) {
|
|
|
|
let next = this.partner.lev + i ;
|
|
if( next > maxLv ) {
|
|
break;
|
|
}
|
|
|
|
let cfg = game.configs.partner_data.data_partner_lev[ next ];
|
|
if( cfg ) {
|
|
let up_cost = cfg.expend || [];
|
|
let ret = check( up_cost );
|
|
let is_enough = ret.is_enough;
|
|
// console.log( "当前的升级相关数据" + JSON.stringify( ret ) );
|
|
this.needs = ret;
|
|
let cost_list = ret.cur_cost_list;
|
|
|
|
if( is_enough ) {
|
|
needs = cost_list;
|
|
max = next;
|
|
} else {
|
|
if( i == 1 ) {
|
|
needs = cost_list;
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
// 消耗刷新
|
|
nx.gui.setActive( this, "max", false );
|
|
let list = nx.gui.setActive( this, "need/list", true );
|
|
let cfg = game.configs.partner_data.data_partner_lev[ this.partner.lev ];
|
|
let expend = cfg ? ( cfg.expend || [] ) : [];
|
|
for( let k = 0; k < expend.length; ++k ) {
|
|
|
|
let ifo = expend[ k ];
|
|
let node = list.children[ k ];
|
|
if( nx.dt.arrEmpty( ifo ) ) {
|
|
node.active = false;
|
|
continue;
|
|
}
|
|
|
|
node.active = true;
|
|
let item = gdata( "item_data", "data_unit1", ifo[ 0 ], false );
|
|
nx.bridge.setIconS( node, "icon", item.icon );
|
|
|
|
let count = needs[ ifo[ 0 ] ]//ifo[1];
|
|
// let have_count = model.getItemNumByBid( ifo[ 0 ] );
|
|
nx.gui.setString( node, "txt", count );
|
|
};
|
|
|
|
// 操作刷新
|
|
nx.gui.setActive( this, "upgrade", false );
|
|
let btn = nx.gui.setActive( this, "uplevel", true );
|
|
|
|
let lv = max - this.partner.lev ;
|
|
if( this.partner.break_lev < 6 ){
|
|
lv = lv + this.partner.lev >= upgrade ? upgrade - this.partner.lev : lv;
|
|
}else{
|
|
|
|
lv = lv + this.partner.lev > maxLv ? maxLv - this.partner.lev : lv;
|
|
}
|
|
|
|
nx.gui.setActive( this, "uplevel/tip", lv > 0 );
|
|
let cmp = nx.gui.getComponent( this, "uplevel", cc.Button );
|
|
if( cmp ){
|
|
|
|
cmp.interactable = true;
|
|
let material = lv > 0 ? cc.Material.getBuiltinMaterial( '2d-sprite' ) : cc.Material.getBuiltinMaterial( '2d-gray-sprite' );
|
|
let sp = nx.gui.getComponent( this, "uplevel/on", cc.Sprite );
|
|
sp.setMaterial( 0,material );
|
|
let color = lv > 0 ? new cc.color( "#B85833" ) : cc.Color.BLACK;
|
|
nx.gui.setOutlineColor( this, "uplevel/on/txt", color );
|
|
|
|
}
|
|
this.canUpLev = lv > 0;
|
|
let txt = lv > 0 ? nx.text.format( "UpLevelX", lv ) : nx.text.getKey( "UpLevel" );
|
|
btn.level = lv;
|
|
nx.gui.setString( btn, "on/txt", txt );
|
|
|
|
},
|
|
|
|
// 点击升级
|
|
onTouchUpLevel: function() {
|
|
|
|
if( !this.canUpLev ){
|
|
|
|
/**
|
|
* {"is_enough":false,"cur_cost_list":{"1":123274,"22":77552}}
|
|
*/
|
|
let needs = this.needs;
|
|
let model = BackpackController.getInstance().getModel();
|
|
let lev = RoleController.getInstance().getRoleVo().lev;
|
|
let cfg = game.configs.source_data.data_source_data;
|
|
|
|
let needgo = 0;
|
|
let matshow = 0;
|
|
let coin = 0;
|
|
if( nx.dt.objNEmpty( needs ) ){
|
|
let list = needs.cur_cost_list;
|
|
for (let i in list ) {
|
|
let mat = parseInt( i );
|
|
let have = model.getItemNumByBid( mat );
|
|
if( have < list[i] && mat != 1 ){
|
|
needgo++;
|
|
matshow = mat;
|
|
}else{
|
|
if( mat == 1 ){
|
|
coin = mat;
|
|
}
|
|
|
|
}
|
|
}
|
|
const TC = TipsController.getInstance();
|
|
if( needgo > 0 ){
|
|
let expend_item_cfg = gdata( "item_data", "data_unit1", matshow, false );
|
|
if( nx.bridge.acts ){
|
|
let data = nx.bridge.acts.queryThemeByType( 13 );
|
|
|
|
if( data && lev >= cfg[data.source].lev_limit[1] ){
|
|
|
|
nx.mbox( nx.text.format( "BuyReward", expend_item_cfg.name ), [ 'cancel', 'Goto' ], ( _key, _box ) => {
|
|
_box.close();
|
|
if( _key == "Goto" ) {
|
|
|
|
nx.bridge.jumper.jump2Window( FID.ActMySteryGift, matshow );
|
|
}
|
|
} );
|
|
|
|
}else{
|
|
|
|
if ( TC ) {
|
|
TC.showItemTips( matshow );
|
|
}
|
|
}
|
|
|
|
}else{
|
|
|
|
if ( TC ) {
|
|
TC.showItemTips( matshow );
|
|
}
|
|
}
|
|
|
|
}else{
|
|
if ( TC ) {
|
|
TC.showItemTips( coin );
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
let nod = nx.gui.find( this, "uplevelmax" );
|
|
let HC = HeroControl.getInstance();
|
|
if( this.partner.star >= 5 ){
|
|
if( this.dealUpLevOnceToHundred() && !nod.active && this.partner.lev < 100 ){
|
|
nx.gui.setActive( nod, "", true );
|
|
}else{
|
|
// 暂时只升级一次
|
|
|
|
if( HC && nx.dt.objNEmpty( this.partner ) ) {
|
|
HC.sender11003( this.partner.id );
|
|
}
|
|
}
|
|
}else{
|
|
|
|
if( HC && nx.dt.objNEmpty( this.partner ) ) {
|
|
HC.sender11003( this.partner.id );
|
|
}
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
// 点击升阶
|
|
onTouchUpGrade: function() {
|
|
|
|
let HC = HeroControl.getInstance();
|
|
if( !HC || nx.dt.objEmpty( this.partner ) ) {
|
|
return;
|
|
}
|
|
|
|
HC.openHeroBreakPanel( true, this.partner );
|
|
|
|
},
|
|
|
|
// 去往升星
|
|
onTouchGoUpStar: function() {
|
|
|
|
let cmp = nx.gui.getComponent( this.node.parent.parent.parent.parent, "", "cmp.partner.info.wnd" );
|
|
if( cmp ){
|
|
cmp.onTouchSingleUpStar( "star" );
|
|
}
|
|
},
|
|
|
|
onTouchMax: function(){
|
|
|
|
let self = this;
|
|
// 暂时只升级一次
|
|
let HC = HeroControl.getInstance();
|
|
if( HC && nx.dt.objNEmpty( this.partner ) ) {
|
|
HC.sender11013( this.partner.id, ( _ret, _data ) =>{
|
|
if( !_ret ){
|
|
nx.tbox( _data );
|
|
return;
|
|
}
|
|
if( _data.result == 0 ){
|
|
if( nx.dt.strNEmpty( _data.msg ) ){
|
|
nx.tbox( _data.msg );
|
|
}
|
|
}
|
|
nx.gui.setActive( self, "uplevelmax", _data.result == 0 );
|
|
} );
|
|
}
|
|
},
|
|
} );
|