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

300 lines
9.5 KiB
JavaScript

/******************************************************************
*
* 伙伴信息页 --- 镶嵌
*
******************************************************************/
const BridgeComponent = require( "bridge.component" );
const MallConst = require( "mall_const" );
const HeroEvent = require( "hero_event" );
const HeroControl = require( "hero_controller" );
const TipsController = require( "tips_controller" );
cc.Class( {
extends: BridgeComponent,
properties: {
lstSkill: { default: null, type: cc.Node },
nodOps: { default: null, type: cc.Node },
},
// 显示
onEnable: function() {
// 视图监听
this.vbind( [
[ "ShowPartner", this.onPartnerChanged.bind( this ) ]
] );
// 事件监听
this.bindGEvent( HeroEvent.Hero_Forget_Talent_Event, this.onPartnerUpdate.bind( this ) );
this.bindGEvent( HeroEvent.Hero_Level_Up_Talent_Event, this.onPartnerUpdate.bind( this ) );
this.bindGEvent( HeroEvent.Hero_Get_Talent_Event, this.onPartnerUpdate.bind( this ) );
this.bindGEvent( HeroEvent.Hero_Learn_Talent_Event, this.onPartnerUpdate.bind( this ) );
},
// 隐藏
onDisable: function() {
// 视图监听解除
this.vunbind();
// 事件监听解除
this.unbindGEvents();
},
// 有伙伴数据更新
onPartnerUpdate: function( _vo ) {
// console.log( "變化數據" );
if( _vo &&
this.partner &&
_vo.partner_id == this.partner.partner_id ) {
this.onPartnerChanged( _vo );
nx.bridge.vset( "ShowPartner", _vo );
}
},
// 伙伴更新
onPartnerChanged: function( _partner ) {
this.partner = _partner;
// 判空
if( nx.dt.objEmpty( this.partner ) ) {
this.setEmpty();
return;
}
// 刷新
this.freshSkills();
},
// 置空
setEmpty: function() {
nx.gui.setActive( this, "mod/list", false );
nx.gui.setActive( this, "mod/ops", false );
},
// 刷新
freshSkills: function() {
const self = this;
const chds = this.lstSkill.children;
const sks = this.partner.talent_skill_list;
const cfgs = game.configs.partner_skill_data.data_partner_skill_pos;
const slvs = game.configs.partner_skill_data.data_partner_skill_level;
// 单刷
const fresh = function( _pos ) {
let cfg = cfgs[ _pos ];
let node = chds[ _pos - 1 ];
// 是否未解锁
if( nx.dt.arrNEmpty( cfg.pos_limit ) &&
cfg.pos_limit[ 0 ] == "star" &&
self.partner.star < cfg.pos_limit[ 1 ] ) {
nx.gui.setActive( node, "nor", false );
nx.gui.setActive( node, "empty", false );
nx.gui.setActive( node, "lock", true );
nx.gui.setString( node, "lock/txt", cfg.pos_limit[ 1 ] + nx.text.getKey( "lab_starOpen" ) );
return;
}
// 已经解锁
let sk = sks[ cfg.pos ];
if( sk ) {
let data = gskilldata( 'data_get_skill', sk );
if( data ) {
nx.gui.setActive( node, "empty", false );
nx.gui.setActive( node, "lock", false );
let nor = nx.gui.setActive( node, "nor", true );
if( nor ) {
let cmp = nx.gui.getComponent( nor, "icon", "cmp.skill.base" );
if( cmp ) {
cmp.setData( data );
}
let max = true;
let lcfg = slvs[ sk ];
if( lcfg && nx.dt.numPositive( lcfg.next_id, false ) ) {
max = false;
}
nx.gui.setActive( nor, "ops/up", !max );
nx.gui.setActive( nor, "level/txt", !max );
nx.gui.setActive( nor, "level/max", max );
if( !max ) {
nx.gui.setString( nor, "level/txt", "Lv." + data.level );
}
}
return;
}
}
// 空
nx.gui.setActive( node, "nor", false );
nx.gui.setActive( node, "empty", true );
nx.gui.setActive( node, "lock", false );
};
// 技能刷新
nx.gui.setActive( this, "mod/list", true );
for( let pos in cfgs ) {
fresh( pos );
}
// 操作刷新
nx.gui.setActive( this, "mod/ops", true );
},
// 点击:技能学习
onTouchSKAdd: function( _pos ) {
console.log( "onTouchSKAdd:" + _pos );
let pos = parseInt( _pos );
if( !nx.dt.numPositive( pos, false ) ) {
nx.error( "无效技能位置:", _pos );
return;
}
let HC = HeroControl.getInstance();
HC.openHeroTalentSkillLearnPanel( true, this.partner, ( _id ) => {
let sid = parseInt( _id );
if( nx.dt.numPositive( sid, false ) ) {
HC.sender11096( this.partner.partner_id, pos, sid );
}
} );
},
// 点击:技能升级
onTouchSKUp: function( _pos ) {
console.log( "onTouchSKUp:" + _pos );
let pos = parseInt( _pos );
if( !nx.dt.numPositive( pos, false ) ) {
nx.error( "无效技能位置:", _pos );
return;
}
let id = this.partner.talent_skill_list[ _pos ];
if( !nx.dt.numPositive( id, false ) ) {
nx.error( "无效技能:", _pos, id );
return;
}
let HC = HeroControl.getInstance();
HC.openHeroTalentSkillLevelUpPanel( true, this.partner, id, ( _ret ) => {
if( _ret ) {
HC.sender11097( this.partner.partner_id, pos );
}
});
},
// 点击:技能遗忘
onTouchSKDel: function( _pos ) {
console.log( "onTouchSKDel:" + _pos );
let pos = parseInt( _pos );
if( !nx.dt.numPositive( pos, false ) ) {
nx.error( "无效技能位置:", _pos );
return;
}
let id = this.partner.talent_skill_list[ _pos ];
if( !nx.dt.numPositive( id, false ) ) {
nx.error( "无效技能:", _pos, id );
return;
}
// 文本组织
let HC = HeroControl.getInstance();
let str = nx.text.getKey( "AskForgetTalent" );
let cbk = game.configs.partner_skill_data.data_partner_skill_back[ id ];
if( nx.dt.objNEmpty( cbk ) && nx.dt.arrNEmpty( cbk.expend ) ) {
// 需要
let frame_arrays = [];
str = nx.text.getKey( "lab_hero_talent_skill_level_up_window_tip4" );
for( let i = 0; i < cbk.expend.length; ++i ) {
let v = cbk.expend[ i ]
let item_config = Utils.getItemConfig( v[ 0 ] )
if( item_config ) {
if( i != 0 ) {
str = str + ", "
}
let good_res_path = "3";
let text = StringUtil.parseStr( nx.text.getKey( "<img src=%s visible=true scale=0.32 /><div fontColor=#289b14 fontsize= 24>%s</div>" ) ).string
let good_path = PathTool.getIconPath( "items", "3" );
frame_arrays.push( good_path );
let str1 = cc.js.formatStr( text, good_res_path, v[ 1 ] )
str = str + str1
}
}
// 返还
if( cbk.award1.length > 0 ) {
str = str + nx.text.getKey( "lab_hero_talent_skill_level_up_window_tip5" )
for( let i = 0; i < cbk.award1.length; ++i ) {
let v = cbk.award1[ i ]
let item_config = Utils.getItemConfig( v[ 0 ] )
if( item_config ) {
if( i != 0 ) {
str = str + ", "
}
let good_res_path = item_config.icon
let text = StringUtil.parseStr( nx.text.getKey( "<img src=%s visible=true scale=0.32 /><div fontColor=#289b14 fontsize= 24>%s</div>" ) ).string
let good_path = PathTool.getIconPath( "items", item_config.icon );
frame_arrays.push( good_path );
let str1 = cc.js.formatStr( text, good_res_path, v[ 1 ] )
str = str + str1
}
}
str = str + ")"
}
}
let self = this;
let pid = this.partner.partner_id;
nx.mbox( str, [ 'cancel', 'confirm' ], ( _key, _box ) => {
_box.close();
if( _key == 'confirm' ) {
HC.sender11098( pid, pos );
// self.close();
}
} );
},
// 点击:说明
onTouchHelp: function() {
const data = game.configs.partner_skill_data.data_partner_skill_const.skill_rule;
if( nx.dt.objNEmpty( data ) && nx.dt.strNEmpty( data.desc ) ) {
const TC = TipsController.getInstance();
TC.showTextPanel( "tip", data.desc );
}
},
// 点击:预览
onTouchPreview: function() {
let HC = HeroControl.getInstance();
HC.openArtifactSkillWindow( true, 2 );
},
// 点击:商店
onTouchShop: function() {
nx.bridge.jumper.jump2Window ( 2, [MallConst.MallType.SkillShop] );
},
} );