Files
fc/dev/project/library/imports/4e/4e43db14-c2f8-4a0a-8574-e41e60072a9b.js
2026-05-24 10:21:26 +08:00

489 lines
14 KiB
JavaScript

"use strict";
cc._RF.push(module, '4e43dsUwvhKCoV05B5gByqb', 'cmp.partner.reform.swap');
// Scripts/mod/partner/cmps/reform/cmp/cmp.partner.reform.swap.js
"use strict";
/******************************************************************
*
* 伙伴改造页: 置换
*
******************************************************************/
var FxTogs = require("nx.fx.togs");
var FxSVC = require("nx.fx.sv.expand");
var FxButton = require("nx.fx.button");
var BridgeComponent = require("bridge.component");
var BackpackController = require("backpack_controller");
var BackpackEvent = require("backpack_event");
var BackPackConst = require("backpack_const");
var HeroConst = require("hero_const");
var HeroEvent = require("hero_event");
var HeroControl = require("hero_controller");
var TipsController = require("tips_controller");
var HCT = HeroConst.CampType;
var BBC = BackPackConst.Bag_Code;
cc.Class({
"extends": BridgeComponent,
properties: {
togCamp: {
"default": null,
type: FxTogs
},
svcList: {
"default": null,
type: FxSVC
},
nodFrom: {
"default": null,
type: cc.Node
},
nodTo: {
"default": null,
type: cc.Node
},
nodNeed: {
"default": null,
type: cc.Node
},
nodOp: {
"default": null,
type: cc.Node
},
nodCost: {
"default": null,
type: cc.Node
},
btnConvert: {
"default": null,
type: FxButton
}
},
// 载入
onLoad: function onLoad() {
this._super();
this.curCamp = -1;
this.selects = [];
// 事件监听
this.bindGEvent(HeroEvent.Del_Hero_Event, this.onPartnerChanged.bind(this));
this.bindGEvent(HeroEvent.Hero_Data_Add, this.onPartnerChanged.bind(this));
this.bindGEvent(HeroEvent.Hero_Reset_Star_Event, this.onConverPreview.bind(this));
this.bindGEvent(BackpackEvent.ADD_GOODS, this.onBagChanged.bind(this));
this.bindGEvent(BackpackEvent.DELETE_GOODS, this.onBagChanged.bind(this));
this.bindGEvent(BackpackEvent.MODIFY_GOODS_NUM, this.onBagChanged.bind(this));
// Tog监听
this.togCamp.posTog = this.onTogCamp.bind(this);
this.togCamp.togTo(0);
this.onTogCamp(HCT.eNone);
// 置空
this.setEmpty();
},
//
// 重载:关闭前
onPreClosed: function onPreClosed() {
this.svcList.rebuild([]);
},
// 置空
setEmpty: function setEmpty() {
this.partner = null;
nx.gui.setActive(this.nodFrom, "smod", false);
var spine = nx.gui.getComponent(this.nodFrom, "smod", "nx.fx.spine");
var spine2 = nx.gui.getComponent(this.nodTo, "smod", "nx.fx.spine");
if (spine) {
spine.stop();
}
if (spine2) {
spine2.stop();
}
nx.gui.setActive(this.nodTo, "smod", false);
nx.gui.setActive(this.nodCost, "", false);
nx.gui.setActive(this.nodNeed, "conds", false);
this.selects = [];
nx.gui.setActive(this.nodNeed, "empty", true);
nx.gui.setActive(this.nodNeed, "icon", false);
nx.gui.setString(this.nodNeed, "conds/txt", "");
this.btnConvert.lock(true);
},
// 设置当前伙伴
setPartner: function setPartner(_partner) {
// 先清空
this.setEmpty();
// 判空
this.partner = _partner;
if (nx.dt.objEmpty(this.partner)) {
this.freshCostHave();
return;
}
// 动画
var key = this.partner.bid + "_" + this.partner.star;
var cfg = gdata("partner_data", "data_partner_star", key);
var spine = nx.gui.getComponent(this.nodFrom, "smod", "nx.fx.spine");
if (cfg && spine) {
var path = PathTool.getSpinePath(cfg.res_id, cfg.res_id, false);
spine.load(path, function (_e) {
if (!_e) {
spine.action("stand2", true);
} else {
spine.stop();
}
});
}
nx.gui.setActive(this.nodFrom, "smod", true);
// 价格刷新
this.freshCostHave();
},
// 整体刷新
freshList: function freshList(_reset) {
if (_reset === void 0) {
_reset = false;
}
var HC = HeroControl.getInstance();
var mod = HC.getModel();
// 统计可置换信息
var configs = game.configs.holiday_convert_data.data_convert_info;
var cgroup = game.configs.holiday_convert_data.data_hero_list;
if (nx.dt.objEmpty(configs) || nx.dt.objEmpty(cgroup)) {
nx.error("置换配置不存在!");
this.partners = [];
} else {
// 可置换伙伴统计
if (_reset || nx.dt.arrEmpty(this.all) || nx.dt.objEmpty(this.dict)) {
this.all = [];
this.dict = {};
for (var star in configs) {
this.dict[star] = this.dict[star] || {};
var list = configs[star];
for (var k in list) {
var v = list[k];
this.dict[star][k] = v;
var config_list = cgroup[v.src_group];
for (var i in config_list) {
var bid = config_list[i];
var h_list = mod.getHeroInfoByBidStar(bid.bid, star);
if (h_list) {
for (var j in h_list) {
if (h_list[j].is_lock == 0) {
this.all.push(h_list[j]);
}
}
}
}
}
}
}
// 当前阵营统计
if (this.curCamp == HCT.eNone) {
this.partners = this.all;
} else {
this.partners = [];
for (var _i in this.all) {
var pt = this.all[_i];
if (pt && pt.camp_type == this.curCamp) {
this.partners.push(pt);
}
}
}
}
nx.gui.setActive(this.svcList, "empty", nx.dt.arrEmpty(this.partners));
this.svcList.rebuild(this.partners);
this.setPartner(null);
},
// 刷新材料选择
freshSelects: function freshSelects(_selects) {
var cfgs = this.dict[this.partner.star][this.partner.camp_type];
var total = cfgs ? cfgs.expend : 0;
this.selects = _selects;
// 空
if (nx.dt.arrEmpty(this.selects)) {
nx.gui.setActive(this.nodNeed, "empty", true);
nx.gui.setActive(this.nodNeed, "icon", false);
nx.gui.setString(this.nodNeed, "conds/txt", "0/" + total);
nx.gui.setActive(this.nodNeed, "conds", false);
return;
}
nx.gui.setActive(this.nodNeed, "empty", false);
nx.gui.setActive(this.nodNeed, "icon", true);
nx.gui.setString(this.nodNeed, "conds/txt", this.selects.length + "/" + total);
nx.gui.setActive(this.nodNeed, "conds", true);
var pt = this.selects[0];
var icon = nx.gui.getComponent(this.nodNeed, "icon", "cmp.item.base");
if (pt && icon) {
icon.setData(pt);
}
// 置换开关
this.btnConvert.lock(this.selects.length < total);
// 动画
var key = pt.bid + "_" + pt.star;
var cfg = gdata("partner_data", "data_partner_star", key);
var spine = nx.gui.getComponent(this.nodTo, "smod", "nx.fx.spine");
if (cfg && spine) {
var path = PathTool.getSpinePath(cfg.res_id, cfg.res_id, false);
spine.load(path, function (_e) {
if (!_e) {
spine.action("stand2", true);
} else {
spine.stop();
}
});
}
nx.gui.setActive(this.nodTo, "smod", true);
},
// 消耗资产刷新
freshCostHave: function freshCostHave() {
// 配置获取
var bid = game.configs.holiday_convert_data.data_const.item_id.val;
if (!nx.dt.numPositive(bid, false)) {
nx.error("缺少置换货币配置!");
nx.gui.setActive(this.nodCost, "", false);
return;
}
// 图标
var cfg = Utils.getItemConfig(bid);
if (cfg) {
// nx.bridge.setIcon( this.nodTotal, "icon", cfg.icon );
}
// 总量
// nx.gui.setActive( this.nodTotal, "", true );
var have = BackpackController.getInstance().getModel().getItemNumByBid(bid);
// nx.gui.setString( this.nodTotal, "txt", have );
// 消耗
var cfgs = null;
if (nx.dt.objNEmpty(this.partner)) {
cfgs = this.dict[this.partner.star][this.partner.camp_type];
}
if (nx.dt.objEmpty(cfgs)) {
nx.gui.setSpriteFrame(this.nodCost, "icon", null);
nx.gui.setActive(this.nodCost, "", true);
nx.gui.setString(this.nodCost, "txt", "");
} else {
var ifo = Utils.getItemConfig(cfgs.loss[0][0]);
if (ifo) {
nx.bridge.setIcon(this.nodCost, "icon", cfg.icon);
}
nx.gui.setActive(this.nodCost, "", true);
nx.gui.setString(this.nodCost, "txt", cfgs.loss[0][1]);
var enough = have >= cfgs.loss[0][1];
nx.gui.setColor(this.nodCost, "txt", enough ? cc.Color.GREEN : cc.Color.RED);
var btn = nx.gui.getComponent(this.nodOp, "", "nx.fx.button");
if (btn) {
btn.lock(!enough);
}
}
this.cost_id = bid;
},
// 伙伴增删
onPartnerChanged: function onPartnerChanged() {
// console.log( "刷新伙伴信息" );
this.setEmpty();
this.freshList(true);
},
// 道具改变
onBagChanged: function onBagChanged(_code, _list) {
if (_code != BBC.BACKPACK || nx.dt.objEmpty(_list)) {
return;
}
var good = false;
for (var i in _list) {
if (_list[i].base_id == this.cost_id) {
good = true;
break;
}
}
if (good) {
this.freshCostHave();
}
},
// 置换返还预览
onConverPreview: function onConverPreview(_data) {
// this.onPartnerChanged();
// 参数无效
if (nx.dt.objEmpty(_data) || nx.dt.objEmpty(this.partner)) {
return;
}
var HC = HeroControl.getInstance();
var self = this;
var convert = function convert() {
if (!self.partner || !self.reqParams) {
nx.error("转换失败,参数过期!");
return;
}
HC.sender16686(self.partner.partner_id, self.reqParams.bid, self.reqParams.partners);
self.reqParams = null;
self.setPartner(null);
self.svcList.cleanFocus();
};
// 空返还
if (nx.dt.arrEmpty(_data.list)) {
if (nx.dt.objEmpty(this.reqParams)) {
return;
}
// 二次确认
nx.mbox("CVAskConfirmNoPreview", ['no', 'yes'], function (_key, _box) {
_box.close();
if (_key == 'yes') {
convert();
}
});
return;
}
// 预览
HC.openHeroConvertPreview(true, _data.list, function (_key) {
convert();
});
},
// 阵营切换
onTogCamp: function onTogCamp(_index) {
var idx = parseInt(_index) || 0;
if (this.curCamp == idx) {
return;
}
nx.debug("[Hero]\u9635\u8425\u5207\u6362:" + this.curCamp + " -> " + idx);
this.curCamp = idx;
// 整体刷新
this.freshList();
},
// 选中切换
onFocusChanged: function onFocusChanged(_item) {
// 空
if (nx.dt.objEmpty(_item) || nx.dt.objEmpty(_item.mdata)) {
return;
}
nx.audio.playSFX("audios/effects/touchitem");
// 聚焦
this.svcList.cleanFocus();
this.svcList.addFocus(_item.index);
this.setPartner(_item.mdata);
},
// 点击帮助
onTouchHelp: function onTouchHelp() {
var TC = TipsController.getInstance();
if (TC) {
var txt = game.configs.partner_data.data_partner_const.game_rule.desc;
TC.showTextPanel("tip", nx.text.getKey(txt));
}
},
// 点击选择
onTouchSelect: function onTouchSelect() {
var _this = this;
// 空伙伴
if (nx.dt.objEmpty(this.partner)) {
nx.tbox("CVSelectPartnerFirst");
return;
}
// 配置统计
var cfgs = this.dict[this.partner.star][this.partner.camp_type];
if (nx.dt.objEmpty(cfgs)) {
nx.error("置换失败,配置缺失!");
return;
}
var lst = game.configs.holiday_convert_data.data_target_hero_list[cfgs.target_group];
if (nx.dt.objEmpty(lst)) {
nx.error("置换失败,配置缺失!", cfgs.target_group);
return;
}
var pts = [];
var HC = HeroControl.getInstance();
for (var i in lst) {
var tm = lst[i];
if (!tm || tm.bid == this.partner.bid) {
continue;
}
var arr = HC.getModel().getHeroInfoByBidStar(tm.bid, 5);
if (nx.dt.arrEmpty(arr)) {
continue;
}
for (var k in arr) {
var pt = arr[k];
if (pt && !pt.isResonateHero()) {
pts.push(pt);
}
}
}
var args = {
partners: pts,
count: cfgs.expend,
selects: this.selects,
flag: {
type: nx.text.getKey("SameCamp"),
star: 5
}
};
var cbid = 0;
if (nx.dt.arrNEmpty(this.selects)) {
cbid = this.selects[0].bid;
}
// 选择器
args.fnSelector = function (_selector, _partner) {
if (!_selector || !_partner) {
return false;
}
// 首选
if (_selector.svcList.focusList.length == 0) {
cbid = _partner.bid;
return true;
}
// 同材料
return cbid == _partner.bid;
};
HC.openPartnerSelector(true, args, function (_partners) {
_this.freshSelects(_partners || []);
HC.openPartnerSelector(false);
});
},
// 点击置换
onTouchConvert: function onTouchConvert() {
this.reqParams = {
bid: 0,
partners: []
};
// 记录信息
for (var i in this.selects) {
var pt = this.selects[i];
if (pt) {
this.reqParams.bid = this.reqParams.bid || pt.bid;
this.reqParams.partners.push({
partner_id: pt.partner_id
});
}
}
// 发送申请,获取材料卡的返还预览
if (nx.dt.arrNEmpty(this.reqParams.partners)) {
var HC = HeroControl.getInstance();
HC.sender11087(this.reqParams.partners);
}
},
onTouchIcon: function onTouchIcon() {
var cfgs = game.configs.holiday_convert_data.data_const.item_id.val;
if (cfgs) {
var mat = cfgs;
var TC = TipsController.getInstance();
TC.showItemTips(mat);
}
}
});
cc._RF.pop();