Files
fc/dev/project/assets/Scripts/mod/partner/cmps/artifact/cmp.partner.holy.refinement.js
T
2026-05-23 22:10:14 +08:00

340 lines
12 KiB
JavaScript

/******************************************************************
*
* 战斗义肢洗炼
*
******************************************************************/
const BridgeWindow = require( "bridge.window" );
const BackPackConst = require( "backpack_const" );
const HeroController = require( "hero_controller" );
const BackpackController = require( "backpack_controller" );
const HeroEvent = require( "hero_event" );
const HeroCalculate = require("hero_calculate");
cc.Class( {
extends: BridgeWindow,
properties: {
nodholy : {
default: null,
type : cc.Node,
displayName: "战斗义肢显示",
},
nodProps : {
default: null,
type : cc.Node,
displayName: "战斗义肢当前属性",
},
nodCProps : {
default: null,
type : cc.Node,
displayName: "战斗义肢洗炼属性",
},
nodBottom: {
default: null,
type : cc.Node,
displayName: "操作",
},
nodScore: {
default: null,
type : cc.Node,
displayName: "评分",
},
},
onLoad:function(){
this.bindGEvent( HeroEvent.Holy_Equipment_Update_Event, this.freshByMsg.bind( this ) );
this.bindGEvent( EventId.MODIFY_GOODS_NUM, this.freshAttrInbag.bind( this ) );
},
// 重载:参数打开
onOpenConfigs: function( _params ) {
// 传入战斗义肢的数据
// console.log( "傳入的戰鬥義肢數據" + JSON.stringify( _params ) );
this.holyData = _params.eqm;
this.partner = _params.partner;
// 固定属性相关
let cmp = nx.gui.getComponent( this.nodholy, "holy", "cmp.item.base" );
if( cmp ){
cmp.setData( this.holyData );
}
this.freshHolyEqm();
},
freshAttrInbag : function( _bagcode, _list ){
if( _bagcode == BackPackConst.Bag_Code.EQUIPS ){
let attrs = [];
for (let i in _list ) {
let show = nx.dt.objClone( _list[i] ) ;
if( i == this.holyData.id ){
show.partner_id = 0;
show.holy_eqm = [ show ];
this.freshByMsg( show );
break;
}
}
// this.freshByMsg( )
}
},
freshByMsg: function( _data ){
this.partner = _data;
let holy = _data.holy_eqm;
let change = {};
let time = 0;
for (let i = 0; i < holy.length; i++) {
let holy_item = holy[i];
if( holy_item.id == this.holyData.id ){
let times = holy_item.extra;
for (let i = 0; i < times.length; i++) {
let item = times[i];
if( item.extra_k == 10 ){
time = item.extra_v;
}
}
let holylst = holy_item.holy_eqm_attr;
holylst.forEach( _item =>{
if( _item.pos > 100 ){
change = holy_item;
}else{
this.holyData.holy_eqm_attr = holylst;
}
} )
}
}
if( !nx.dt.objEmpty( change ) ){
this.freshMat();
this.freshRandomAfter( change );
}else{
this.freshHolyEqm();
}
nx.gui.setString( this.nodBottom, "times_tip",nx.text.format( "The equipment has been refined", time ) );
},
freshHolyEqm: function(){
this.freshMat();
let main_attr = this.holyData.main_attr;
let title = game.configs.attr_data.data_id_to_name[main_attr[0].attr_id];
let icon_name = game.configs.attr_data.data_id_to_key[main_attr[0].attr_id];
let cfg = game.configs.partner_holy_eqm_data.data_holy_attr_score[icon_name];
this.base_score = cfg.score * 0.001 * main_attr[0].attr_val;
let path = cc.path.join( "coms/images/" + "ico_"+ icon_name );
nx.gui.setSpriteFrame( this.nodholy, "prop/ico", path );
nx.gui.setString( this.nodholy, "prop/title", title );
nx.gui.setString( this.nodholy, "prop/txt", main_attr[0].attr_val );
this.freshRandom();
},
freshRandomAfter: function( _change ){
let holy_eqm_attr = _change.holy_eqm_attr;
holy_eqm_attr.sort( Utils.tableUpperSorter(["pos"]) );
let new_holy_eqm_attr = [];
let model = HeroController.getInstance().getModel();
let chd = nx.gui.find( this.nodCProps, "props" ).children;
nx.gui.hideAllChildren( this.nodCProps, "props" );
let score1 = [];
for (let i = 0; i < holy_eqm_attr.length; i++) {
let attr = holy_eqm_attr[i];
let attr_node = chd[i];
if( attr && attr.pos > 100 ){
nx.gui.setActive( attr_node, "", true );
let title = game.configs.attr_data.data_id_to_key[attr.attr_id];
nx.bridge.attrs.setAttribute( nx.gui.find( attr_node, "prop" ) , [ title, attr.attr_val ] );
let cfg = game.configs.partner_holy_eqm_data.data_holy_attr_score[title];
score1.push( cfg.score * 0.001 * attr.attr_val );
new_holy_eqm_attr.push({ attr_key: title, attr_val: attr.attr_val })
let prog = nx.gui.getComponent( attr_node, "prop/prog", cc.ProgressBar );
let max_count = model.getHolyEquipmentMaxAttrByItemIdAttrKey( this.holyData.config.id, title );
let per = attr.attr_val / max_count;
nx.gui.setActive( attr_node, "prop/val", per != 1 );
nx.gui.setActive( attr_node, "prop/prog/max", per == 1 );
if( prog ){
prog.progress = per;
}
}
}
nx.gui.setActive( this.nodBottom, "ops/save", true );
if (holy_eqm_attr && holy_eqm_attr.length > 0) {
let new_score = HeroCalculate.getInstance().holyEquipMentPower(new_holy_eqm_attr) || 0;
let num = 0;
num = parseInt( this.holyData.score ) ;
let sum_score = new_score + num + Math.ceil( this.base_score ) ;
let add_score = sum_score - ( this.old_score + num + Math.ceil( this.base_score ) );
if (add_score > 0) {
add_score = "+" + add_score;
} else {
add_score = + add_score;
}
nx.gui.setString( this.nodScore, "txt", sum_score );
nx.gui.setString( this.nodScore, "add", add_score );
} else {
nx.gui.setString( this.nodScore, "txt", "???" );
nx.gui.setString( this.nodScore, "add", "???" );
}
},
freshRandom: function(){
let holy_eqm_attr = this.holyData.holy_eqm_attr;
holy_eqm_attr.sort( (a,b) => {
return a.pos - b.pos;
} );
let model = HeroController.getInstance().getModel();
let before_data = [];
let old_holy_eqm_attr = [];
let chd = nx.gui.find( this.nodProps, "props" ).children;
nx.gui.hideAllChildren( this.nodProps, "props" );
let score0 = [];
for (let i = 0; i < holy_eqm_attr.length; i++) {
let attr = holy_eqm_attr[i];
let attr_node = chd[i];
if( attr && attr.pos < 100 ){
nx.gui.setActive( attr_node, "", true );
let title = game.configs.attr_data.data_id_to_key[attr.attr_id];
nx.bridge.attrs.setAttribute( nx.gui.find( attr_node, "prop" ) , [ title, attr.attr_val ] );
let cfg = game.configs.partner_holy_eqm_data.data_holy_attr_score[title];
score0.push( cfg.score * 0.001 * attr.attr_val );
let prog = nx.gui.getComponent( attr_node, "prop/prog", cc.ProgressBar );
let max_count = model.getHolyEquipmentMaxAttrByItemIdAttrKey( this.holyData.config.id, title );
let per = attr.attr_val / max_count;
nx.gui.setActive( attr_node, "prop/val", per != 1 );
nx.gui.setActive( attr_node, "prop/prog/max", per == 1 );
if( prog ){
prog.progress = per;
}
}
if( attr.pos > 100 ){
before_data.push( attr );
}else{
old_holy_eqm_attr.push({ attr_key: game.configs.attr_data.data_id_to_key[attr.attr_id], attr_val: attr.attr_val });
}
}
this.old_score = HeroCalculate.getInstance().holyEquipMentPower( old_holy_eqm_attr ) ;
if( !nx.dt.arrEmpty( before_data ) ){
this.freshRandomAfter( { holy_eqm_attr: before_data } );
}
nx.gui.setActive( this.nodBottom, "ops/save", !nx.dt.arrEmpty( before_data ) );
let times = this.holyData.extra;
let time = 0;
for (let i = 0; i < times.length; i++) {
let item = times[i];
if( item.extra_k == 10 ){
time = item.extra_v;
}
}
nx.gui.setString( this.nodBottom, "times_tip",nx.text.format( "The equipment has been refined", time ) );
nx.gui.setActive( this.nodProps, "desc", false );
// this.freshLockCost();
},
freshLockCost: function(){
// 花费取得
let pfg = game.configs.partner_holy_eqm_data.data_const.lock_pay_diamon;
// 根据当前的选择锁定属性进行取值
this.selects = [];
let chd = nx.gui.find( this.nodProps, "props" ).children;
for (let i = 0; i < chd.length; i++) {
let nod = chd[i];
let toggle = nx.gui.getComponent( nod, "lock", cc.Toggle );
if( toggle.isChecked ){
this.selects.push( { pos: i + 1 } );
}
}
let cost = this.selects.length-1 >= 0 ? pfg.val[this.selects.length-1][1]:0;
nx.bridge.setIconS( this.nodProps, "desc/icon", 3 );
nx.gui.setString( this.nodProps, "desc/txt",cost );
nx.gui.setActive( this.nodProps, "desc", !nx.dt.arrEmpty( this.selects ) );
},
onTouchSelecton: function(){
this.freshLockCost();
},
freshMat: function(){
let mfg = gdata( "partner_holy_eqm_data", "data_base_info", this.holyData.config.id );
let chd = nx.gui.find( this.nodBottom, "matInfo/mats" ).children;
let mats = mfg.reset_price;
for (let i = 0; i < mats.length; i++) {
let mat = mats[i];
let nod = chd[i];
if( !mat ){
nx.gui.setActive( nod, "", false );
continue;
}
let count = BackpackController.getInstance().getModel().getItemNumByBid( mat[0] );
nx.bridge.setIconS( nod, "icon", mat[0] );
nx.gui.setString( nod, "txt",nx.dt.shortCount( mat[1] ) + "/" + nx.dt.shortCount( count ) );
}
},
onTouchRefine: function(){
let HC = HeroController.getInstance();
if( HC ){
HC.sender11094( this.partner.partner_id, this.holyData.id, this.selects || [] );
}
},
onTouchSave: function(){
let HC = HeroController.getInstance();
if( HC ){
HC.sender11090( this.partner.partner_id, this.holyData.id, 1 );
}
},
} );