458 lines
15 KiB
JavaScript
458 lines
15 KiB
JavaScript
|
|
"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();
|