Files
fc/dev/project/library/imports/91/91eacb06-d39c-40d0-952a-a3a8f3e74de2.js
T

458 lines
15 KiB
JavaScript
Raw Normal View History

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