"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();