Files
fc/dev/project/library/imports/c2/c276ac4a-1bfd-49e4-8417-e9d3f4fa8e87.js
T

626 lines
18 KiB
JavaScript
Raw Normal View History

2026-05-24 10:21:26 +08:00
"use strict";
cc._RF.push(module, 'c276axKG/1J5IQX6dP0+o6H', 'cmp.partner.upstar');
// Scripts/mod/partner/cmps/upstar/cmp.partner.upstar.js
"use strict";
/******************************************************************
*
* 伙伴信息页 --- 升星
*
******************************************************************/
var BridgeComponent = require("bridge.component");
var HeroEvent = require("hero_event");
var HeroControl = require("hero_controller");
var BackpackController = require("backpack_controller");
var BackPackConst = require("backpack_const");
var RoleController = require("role_controller");
cc.Class({
"extends": BridgeComponent,
properties: {
lstInfo: {
"default": null,
type: cc.Node
},
lstNeed: {
"default": null,
type: cc.Node
},
nodSpecial: {
"default": null,
type: cc.Node
},
nodOps: {
"default": null,
type: cc.Node
}
},
// 显示
onEnable: function onEnable() {
// 变量
this.ptneeds = [];
this.selects = [];
// 视图监听
this.vbind([["ShowPartner", this.onPartnerChanged.bind(this)]]);
// 事件监听
this.bindGEvent(HeroEvent.Hero_Data_Update, 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);
nx.bridge.vset("ShowPartner", _vo);
}
},
// 伙伴更新
onPartnerChanged: function onPartnerChanged(_partner) {
this.partner = _partner;
this.selects = [];
this.arr0 = [];
this.arr1 = [];
this.arr2 = [];
// 判空
if (nx.dt.objEmpty(this.partner)) {
this.setEmpty();
return;
}
// 配置获取
var ckey = this.partner.bid + "_" + this.partner.star;
var nkey = this.partner.bid + "_" + (this.partner.star + 1);
this.ccfgs = gdata("partner_data", "data_partner_star", ckey);
this.ncfgs = gdata("partner_data", "data_partner_star", nkey);
var mfg = game.configs.partner_data.data_partner_star[nkey];
if (nx.dt.objEmpty(this.ccfgs)) {
nx.error("无效伙伴升星配置:", ckey);
this.setEmpty();
return;
}
// 是否满级
if (!mfg) {
nx.gui.setActive(this, "max", true);
nx.gui.setActive(this, "nor", false);
return;
}
// 升星刷新
nx.gui.setActive(this, "max", false);
nx.gui.setActive(this, "nor", true);
this.freshUpStar();
},
// 置空
setEmpty: function setEmpty() {
nx.gui.setActive(this, "max", false);
nx.gui.setActive(this, "nor", true);
nx.gui.setActive(this.lstInfo, "", false);
nx.gui.setActive(this.lstNeed, "", false);
nx.gui.setActive(this.nodOps, "", false);
nx.gui.setActive(this.nodSpecial, "", false);
},
// 升星刷新
freshUpStar: function freshUpStar() {
// 星级
nx.gui.setActive(this.lstInfo, "", true);
var cico = cc.path.join("coms/images", "star" + this.ccfgs.star);
var nico = cc.path.join("coms/images", "star" + this.ncfgs.star);
nx.gui.setSpriteFrame(this.lstInfo, "stars/from", cico);
nx.gui.setSpriteFrame(this.lstInfo, "stars/to", nico);
// 三条提升
var atts = this.ncfgs.attr_show || [];
for (var i = 0; i < 3; ++i) {
var node = nx.gui.find(this.lstInfo, "t" + (i + 1));
var attr = atts[i];
if (nx.dt.arrEmpty(attr)) {
node.active = false;
continue;
}
node.active = true;
// 三元素:描述/老值/新值
if (attr.length == 3) {
nx.gui.setString(node, "from/tip", nx.text.getKey(attr[0]));
nx.gui.setString(node, "from/txt", nx.text.getKey(attr[1]));
nx.gui.setString(node, "to", nx.text.getKey(attr[2]));
nx.gui.setActive(node, "arrow", true);
}
// 单元素:描述
else {
nx.gui.setString(node, "from/tip", nx.text.getKey(attr[0]));
nx.gui.setString(node, "from/txt", "");
nx.gui.setString(node, "to", "");
nx.gui.setActive(node, "arrow", false);
}
}
// 单技能提升
nx.gui.setActive(this.lstInfo, "skill", false);
var csks = this.ccfgs.skills;
var nsks = this.ncfgs.skills;
if (nx.dt.arrNEmpty(csks) && nx.dt.arrNEmpty(nsks)) {
var ids = [];
for (var _i = 0; _i < nsks.length; ++_i) {
if (csks[_i][1] != nsks[_i][1]) {
ids.push([csks[_i][1], nsks[_i][1]]);
}
}
// 只有一个技能提升时需要展示
if (ids.length == 1) {
var ifo = ids[0];
var _node = nx.gui.find(this.lstInfo, "skill");
var from = nx.gui.getComponent(_node, "from", "cmp.skill.base");
var to = nx.gui.getComponent(_node, "to", "cmp.skill.base");
if (from && to) {
_node.active = true;
from.setData(ifo[0]);
to.setData(ifo[1]);
}
}
}
var showUpstar = true;
if (this.partner.star == 10 || this.partner.star == 11 || this.partner.star == 12) {
var cfg = game.configs.partner_data.data_partner_const;
var can = HeroControl.getInstance().getModel().checkHighStarCondition(this.partner.star);
var descs = HeroControl.getInstance().getModel().getDescs();
nx.gui.setSpriteFrame(this.nodSpecial, "needs/conditions/star", cc.path.join("coms/images/star" + (this.partner.star + 1)));
nx.gui.gocChildren(this.nodSpecial, "needs/desc/view/content", descs.length);
var chd = nx.gui.find(this.nodSpecial, "needs/desc/view/content").children;
for (var d = 0; d < descs.length; d++) {
var desc = descs[d];
nx.gui.setString(chd[d], "desc", desc);
}
var show = 0;
can.forEach(function (_c) {
if (_c == true) {
show++;
}
});
nx.gui.setActive(this.nodSpecial, "", show == 0);
nx.gui.setActive(this.lstNeed.parent, "", show != 0);
} else {
nx.gui.setActive(this.nodSpecial, "", false);
// 材料刷新
nx.gui.setActive(this.lstNeed, "", true);
}
this.computeNeeds();
this.freshNeeds();
// 刷新操作
nx.gui.setActive(this.nodOps, "", true);
},
// 统计材料
computeNeeds: function computeNeeds() {
var _this = this;
// expend1本体卡,expend2指定卡,expend3阵营卡,other_expend额外需要
// 随机的{1,4,2} : 1 表示阵营 4: 表示星级 2表示数量
// 指定的{10402,4,1} : 10402: 表示bid, 4: 表示星级 1:表示数量
var HC = HeroControl.getInstance();
var HM = HC.getModel();
// 需求重置
this.ptneeds = []; // 卡需求
this.mtneeds = []; // 道具需求
this.partnerHun = []; // 英魂材料
var items = BackpackController.getInstance().getModel().getAllBackPackArray(2);
var add = function add(arr, items) {
if (items.quantity > 0) {
for (var i = 0; i < items.quantity; ++i) {
items.partner_id = items.bid;
arr.push(items);
}
}
return arr;
};
items.forEach(function (_item) {
if (_item.type == BackPackConst.item_type.HERO_HUN) {
_item.sortid = 0;
add(_this.partnerHun, _item);
}
});
// 统计expend2指定卡
var lst = this.ncfgs.expend2 || [];
lst.forEach(function (t) {
var pcfgs = game.configs.partner_data.data_partner_base[t[0]];
var tcfgs = pcfgs ? Utils.getItemConfig(pcfgs.item_id) : null;
if (!pcfgs || !tcfgs) {
nx.error("升星材料配置缺失:", t[0]);
return;
}
_this.ptneeds.push({
bid: t[0],
camp: pcfgs.camp_type || tcfgs.camp_type,
name: pcfgs.name || tcfgs.name,
qa: pcfgs.quality || tcfgs.quality,
icon: tcfgs.icon,
need_stars: t[1],
need_count: t[2],
selects: [],
tip: false
});
});
// 统计expend3阵营卡
lst = this.ncfgs.expend3 || [];
lst.forEach(function (t) {
_this.ptneeds.push({
bid: 0,
camp: t[0],
name: "AnyNameCamp" + t[0],
qa: t[1] - 1,
icon: 29982,
need_stars: t[1],
need_count: t[2],
selects: [],
tip: false
});
});
// other_expend扩展道具需求
lst = this.ncfgs.other_expend || [];
lst.forEach(function (t) {
var tcfgs = Utils.getItemConfig(t[0]);
if (!tcfgs) {
nx.error("升星材料配置缺失:", t[0]);
return;
}
_this.mtneeds.push({
bid: t[0],
icon: tcfgs.icon,
need_count: t[1]
});
});
// 提示检测
this.freshRedTips();
},
// 提示检测
freshRedTips: function freshRedTips() {
// 卡片充足检测
if (nx.dt.arrNEmpty(this.ptneeds)) {
var HC = HeroControl.getInstance();
var HM = HC.getModel();
var ARR = HM.getAllHeroArray();
this.selects = this.arr0.concat(this.arr1.concat(this.arr2));
for (var i = 0; i < this.ptneeds.length; ++i) {
// 充足不提示
var need = this.ptneeds[i];
if (need.need_count <= need.selects.length) {
need.tip = false;
continue;
}
// 指定
if (need.bid != 0) {
var cnt = 0;
for (var k in ARR) {
var p = ARR[k];
if (p.partner_id != this.partner.partner_id && p.bid == need.bid &&
// 非锁定英雄
nx.dt.objEmpty(p.dic_locks) && p.is_lock == 0 && p.star == need.need_stars && p.is_in_form == 0 && !nx.dt.arrMember(this.selects, p)) {
cnt++;
}
if (cnt >= need.need_count) {
break;
}
}
need.tip = cnt >= need.need_count;
continue;
}
// 同系
else {
var _cnt = 0;
for (var _k in ARR) {
var _p2 = ARR[_k];
// 任意阵营的高星材料
if (need.camp == 0) {
if (nx.dt.arrNEmpty(this.partnerHun)) {
var _p3 = this.partnerHun[_k];
if (_p3 && !nx.dt.arrMember(this.selects, _p3) && _p3.config.eqm_jie == need.need_stars) {
_cnt++;
}
continue;
}
if (_p2.partner_id != this.partner.partner_id && _p2.star == need.need_stars && _p2.is_in_form == 0 && !nx.dt.arrMember(this.selects, _p2)) {
_cnt++;
}
} else {
//|| ( p && !nx.dt.arrMember( this.selects, p ) && p.config.camp_type == 0 && p.config.eqm_jie == need.need_stars )
if (nx.dt.arrNEmpty(this.partnerHun)) {
var _p4 = this.partnerHun[_k];
if (_p4 && !nx.dt.arrMember(this.selects, _p4) && _p4.config.camp_type == need.camp && _p4.config.eqm_jie == need.need_stars) {
_cnt++;
}
// continue;
}
if (_p2.partner_id != this.partner.partner_id && _p2.camp_type == need.camp && _p2.star == need.need_stars && _p2.is_in_form == 0 && !nx.dt.arrMember(this.selects, _p2)) {
_cnt++;
}
}
if (_cnt >= need.need_count) {
break;
}
}
need.tip = _cnt >= need.need_count;
continue;
}
}
}
},
// 刷新材料
freshNeeds: function freshNeeds(_init) {
if (_init === void 0) {
_init = true;
}
// 卡片需求
var cards = nx.gui.setActive(this.lstNeed, "partners", nx.dt.arrNEmpty(this.ptneeds));
if (cards && cards.active) {
var chds = cards.children;
for (var i = 0; i < chds.length; ++i) {
var node = chds[i];
var need = this.ptneeds[i];
if (nx.dt.objEmpty(need)) {
node.active = false;
continue;
}
node.active = true;
var icon = node.getComponent("cmp.item.base");
if (icon) {
if (_init) {
icon.setEmpty();
icon.setQuality(need.qa);
icon.setIcon(need.icon);
icon.setName(need.name);
icon.setStars(need.need_stars);
icon.setIcon(need.icon);
icon.setCamp(need.camp);
}
nx.gui.setString(icon, "count/txt", need.selects.length + '/' + need.need_count);
nx.gui.setActive(icon, 'bg/tip', need.tip);
}
}
// 微调间距
var len = this.ptneeds.length;
if (len >= 2 && len <= 4) {
var space = [40, 40, 5];
var layout = nx.gui.getComponent(this.lstNeed, "partners", cc.Layout);
layout.spacingX = space[len - 2];
}
}
// 材料需求
var model = BackpackController.getInstance().getModel();
var mats = nx.gui.setActive(this.lstNeed, "mats", nx.dt.arrNEmpty(this.mtneeds));
if (mats && mats.active) {
var _chds = mats.children;
for (var _i2 = 0; _i2 < _chds.length; ++_i2) {
var _node2 = _chds[_i2];
var _need = this.mtneeds[_i2];
if (nx.dt.objEmpty(_need)) {
_node2.active = false;
continue;
}
_node2.active = true;
nx.bridge.setIconS(_node2, "icon", _need.icon);
var have = model.getItemNumByBid(_need.bid);
var str = cc.js.formatStr("%s/%s", Utils.getMoneyString(have), Utils.getMoneyString(_need.need_count));
nx.gui.setString(_node2, "txt", str);
this.mtneeds.have = have;
}
}
},
// 点击材料
onTouchPartnerIcon: function onTouchPartnerIcon(_index) {
var _this2 = this;
var index = parseInt(_index);
if (!nx.dt.numGood(index)) {
return;
}
var HC = HeroControl.getInstance();
var pts = [];
var need = this.ptneeds[_index];
var excluds = [this.partner];
for (var i = 0; i < this.ptneeds.length; ++i) {
if (i == _index) continue;
var _pts = this.ptneeds[i];
excluds = excluds.concat(_pts.selects);
}
// 伙伴筛选
var all = HC.getModel().getAllHeroArray();
// 获取道具 特殊道具 90900 可以替代任意的九星伙伴材料
all.forEach(function (_p) {
// 非指定英雄
if (need.bid > 0 && (_p.bid != need.bid || _p.star != need.need_stars)) {
return;
}
if (need.camp != 0) {
// 非派系英雄
if (need.bid <= 0 && (_p.camp_type != need.camp || _p.star != need.need_stars)) {
return;
}
}
if (need.camp == 0) {
// 非派系英雄
if (_p.star != need.need_stars) {
return;
}
}
// 非锁定英雄
if (_p.is_in_form != 0 || nx.dt.objNEmpty(_p.dic_locks) || _p.is_lock != 0) {
return;
}
// 非排除英雄
if (nx.dt.arrMember(excluds, null, function (_m) {
return _m.partner_id == _p.partner_id;
})) {
return;
}
;
_p.sortid = _p.bid;
pts.push(_p);
});
// 排序
var sort_func = Utils.tableLowerSorter(["camp_type", "star", "bid"]);
pts.sort(sort_func);
if (nx.dt.arrNEmpty(this.partnerHun) && need.bid == 0) {
if (need.camp == 0) {
this.partnerHun.forEach(function (_item) {
if (_item.config.eqm_jie == need.need_stars) {
pts.push(_item);
}
});
} else {
//|| ( _item.config.eqm_jie == need.need_stars && _item.config.camp_type == 0 )
this.partnerHun.forEach(function (_item) {
if (_item.config.eqm_jie == need.need_stars && need.camp == _item.config.camp_type) {
pts.push(_item);
}
});
}
}
pts.sort(Utils.tableLowerSorter(["sortid"]));
var args = {
partners: pts,
count: need.need_count,
selects: need.selects,
flag: {
type: need.name,
star: need.need_stars
}
};
// console.log( "所有的伙伴相关" + JSON.stringify( pts ) );
// 弹窗
HC.openPartnerSelector(true, args, function (_selects) {
_this2.ptneeds[_index].selects = _selects || [];
_this2.saveNowSelects(index, _selects);
_this2.freshRedTips();
_this2.freshNeeds(false);
HC.openPartnerSelector(false);
});
},
saveNowSelects: function saveNowSelects(_index, _count) {
var dealData = function dealData(_arr) {
if (_count.length > 0) {
if (nx.dt.arrNEmpty(_arr)) {
_arr = [];
}
_count.forEach(function (_item) {
_arr.push(_item);
});
} else {
_arr = [];
}
return _arr;
};
if (_index == 0) {
this.arr0 = dealData(this.arr0);
}
if (_index == 1) {
this.arr1 = dealData(this.arr1);
}
if (_index == 2) {
this.arr2 = dealData(this.arr2);
}
},
// 点击升星
onTouchUpStar: function onTouchUpStar() {
// 卡片材料检查
var enough = true;
var tiptxt = "";
for (var i in this.ptneeds) {
var pt = this.ptneeds[i];
if (pt.need_count > pt.selects.length) {
enough = false;
tiptxt = "tip_noEnoughMaterial";
break;
}
}
;
// 额外耗材
if (enough && nx.dt.arrNEmpty(this.mtneeds)) {
for (var _i3 in this.mtneeds) {
var mt = this.mtneeds;
if (mt.have < mt.need_count) {
enough = false;
tiptxt = "tip_noEnoughMaterial";
break;
}
}
}
// 不足
if (!enough) {
nx.tbox(tiptxt);
return;
}
// 参数归纳
var args1 = [];
var args2 = [];
var args3 = [];
for (var _i4 = 0; _i4 < this.ptneeds.length; ++_i4) {
var _pt = this.ptneeds[_i4];
for (var k = 0; k < _pt.selects.length; ++k) {
var tm = _pt.selects[k];
// console.log("伙伴需求数据" + JSON.stringify( tm ) );
if (_pt.bid > 0) {
args1.push({
"partner_id": tm.partner_id
});
} else {
if (tm.base_id) {
args3.push({
"item_id": tm.base_id,
"num": 1
});
} else {
args2.push({
"partner_id": tm.partner_id
});
}
}
}
}
var HC = HeroControl.getInstance();
HC.sender11005(this.partner.partner_id, args1, args2, args3);
},
// 点击改造室
onTouchTransformRoom: function onTouchTransformRoom() {
var HC = HeroControl.getInstance();
HC.openHeroReformWindow(true, this.partner);
this.scheduleOnce(function () {
HC.openHeroMainInfoWindow(false);
HC.openHeroBagWindow(false);
}, 0.1);
},
onTouchTip: function onTouchTip() {
nx.tbox("UpStarsNotEnoughTip");
}
});
cc._RF.pop();