Files
fc/dev/project/library/imports/2e/2e238b7f-17ed-4188-9ce7-ae7a2275ac94.js
T
2026-05-24 10:21:26 +08:00

496 lines
14 KiB
JavaScript

"use strict";
cc._RF.push(module, '2e238t/F+1BiJznrnoidayU', 'cmp.act.elite.wnd');
// Scripts/mod/acts/elite/cmps/cmp.act.elite.wnd.js
"use strict";
/******************************************************************
* Copyright(C) 2019 - 2020 Nx Studio
*
* 精英召唤主界面
*
* 2018.05.18
******************************************************************/
var ActPage = require("act.page.base");
var SummonDefine = require("summon.define");
var EliteMod = require("act.elite.mod");
var HeroController = require("hero_controller");
var RoleController = require("role_controller");
var BackPackController = require("backpack_controller");
var BridgeItemBinder = require("bridge.binder.item.icon.count");
var MALL = require("mall_controller");
var MallConst = require("mall_const");
var FID = require("bridge.function.ids");
var NxSpine = require("nx.fx.spine");
var SCRT = SummonDefine.Status;
cc.Class({
"extends": ActPage,
properties: {
nodOps: {
"default": null,
type: cc.Node
},
spRole: {
"default": null,
type: NxSpine
},
spMini: {
"default": null,
type: NxSpine
},
nodInfo: {
"default": null,
type: cc.Node
},
nodTarget: {
"default": null,
type: cc.Node
},
nodDate: {
"default": null,
type: cc.Node
},
nodCoin: {
"default": null,
type: BridgeItemBinder
},
nodGTimes: {
"default": null,
type: cc.Node
}
},
// 初始化
build: function build(_data) {
this._super(_data);
var model = EliteMod.getInstance();
if (!model) {
nx.tbox("尚未开启");
return;
}
// 视图监听
model.vbind(this, [["eliteBase", this.onFreshBase.bind(this)], ["eliteTimes", this.onFreshTimes.bind(this)]]);
this.setEmpty();
model.fetchData();
},
// 关闭
onDestroy: function onDestroy() {
// 视图监听
var model = EliteMod.getInstance();
if (model) {
model.vunbind(this);
}
this.setFreeCD();
},
// 置空
setEmpty: function setEmpty() {
this.costId = 0;
this.setFreeCD();
nx.gui.setActive(this, "right/panel/select", false);
nx.gui.setActive(this, "right/panel/open", false);
},
// 基本信息
onFreshBase: function onFreshBase(_info, _old, _init) {
var _this = this;
var model = EliteMod.getInstance();
if (!model || _init || nx.dt.objEmpty(_info)) {
return;
}
// 首选
if (!nx.dt.numPositive(_info.lucky_bid, false)) {
nx.gui.setActive(this, "right/panel/open", false);
nx.gui.setActive(this, "right/panel/select", true);
return;
}
nx.gui.setActive(this, "right/panel/select", false);
nx.gui.setActive(this, "right/panel/open", true);
// 英雄信息
var DATA = game.configs.recruit_holiday_lucky_data;
var camp = DATA.data_action[_info.camp_id];
var info = DATA.data_summon[camp.group_id];
// 货币更新
var tid = 0;
if (nx.dt.arrNEmpty(info.loss_item_once) && nx.dt.arrNEmpty(info.loss_item_once[0])) {
tid = info.loss_item_once[0][0];
}
// 货币图标设置
var tinfo = gitemdata(tid);
if (nx.dt.objEmpty(tinfo)) {
nx.error("无效召唤货币:", tid);
} else {
this.costId = tid;
this.nodCoin.active = true;
this.nodCoin.setID(tid, function () {
_this.onFreshTimes();
});
}
var bid = _info.lucky_bid;
var dat = game.configs.partner_data.data_partner_base[bid];
var star = dat.init_star || (dat ? dat.star : 0);
var scfgs = gdata("partner_data", "data_partner_star", bid + "_" + star);
if (nx.dt.objEmpty(scfgs)) {
nx.error("精英召唤角色无效:", bid);
return;
}
// 名字
nx.gui.setString(this.nodInfo, "base/name", nx.text.getKey(dat.name));
// 品质
var path = cc.path.join("coms/images", "mk_partner_qa" + dat.quality);
nx.gui.setSpriteFrame(this.nodInfo, "qa", path);
// 阵营
path = cc.path.join("prefab/partner/ui/camp" + dat.camp_type);
nx.gui.setSpriteFrame(this.nodInfo, "base/camp", path);
// 星级
path = cc.path.join("coms/images/star" + dat.init_star);
nx.gui.setSpriteFrame(this.nodInfo, "stars", path);
// 角色动画
var act = "action1";
var WISH = DATA.data_wish[_info.camp_id];
if (WISH) {
for (var id in WISH) {
if (id == bid) {
act = WISH[id].action;
break;
}
}
}
path = PathTool.getSpinePath(scfgs.res_id, "show", false);
this.spRole.load(path, function (_e) {
if (!_e) {
_this.spRole.action(act, true);
} else {
_this.spRole.stop();
}
});
// MINI动画
path = PathTool.getSpinePath(scfgs.res_id, scfgs.res_id, false);
this.spMini.load(path, function (_e) {
if (!_e) {
_this.spMini.action("stand2", true);
} else {
_this.spMini.stop();
}
});
// 技能
var sknode = nx.gui.find(this.nodInfo, "skills");
for (var i = 0; i < sknode.children.length; ++i) {
// 技能数组[0]为普攻,直接忽略,最多4个技能
var item = sknode.children[i];
var sifo = scfgs.skills[i + 1];
if (!sifo) {
item.active = false;
continue;
}
item.active = true;
var cmp = nx.gui.getComponent(item, "", "cmp.skill.base");
if (cmp) {
cmp.setData(sifo[1]);
}
}
// 目标英雄
var icon = nx.gui.getComponent(this.nodTarget, "icon", "cmp.item.base");
icon.setData(_info.lucky_bid);
// 免费
var tip = nx.gui.getComponent(this.nodOps, "once/tip", "nx.vb.visible");
if (tip) {
var key = model.getTipKey("free");
tip.setTarget(nx.mTip, key);
}
},
// 次数信息
onFreshTimes: function onFreshTimes(_cur, _old, _init) {
if (_init) return;
var model = EliteMod.getInstance();
var base = model ? model.vget("eliteBase") : null;
var times = model ? model.vget("eliteTimes") : null;
if (nx.dt.objEmpty(base) || nx.dt.objEmpty(times)) {
return;
}
var DATA = game.configs.recruit_holiday_lucky_data;
var camp = DATA.data_action[base.camp_id];
var cfgs = DATA.data_summon[camp.group_id];
var BC = BackPackController.getInstance();
var BM = BC.getModel();
// 更新当前货币
// 消耗修正
var count = this.updateCoin();
var autoOp = function autoOp(_node, _times, _freeDt, _item, _exchange, _exchangeInfo) {
var ret = {
enough: false,
type: SCRT.Item,
time: _freeDt,
item: _item[0] || [],
exc: _exchange[0] || [],
excInfo: _exchangeInfo[0] || []
};
// 所需道具不足 && 但是有替代品
var bid = ret.item[0];
var need = ret.item[1];
if (count < need && nx.dt.arrNEmpty(ret.exc) && times.gold_time >= _times) {
bid = ret.exc[0];
need = ret.exc[1];
var cnt = BM.getBackPackItemNumByBid(bid);
ret.enough = cnt >= need;
ret.type = SCRT.Diamond;
} else {
ret.enough = count >= need;
}
// 参数补充
ret.bid = bid;
ret.need = need;
// 免费
if (_freeDt == 0) {
ret.enough = true;
ret.type = SCRT.Free;
nx.gui.setActive(_node, "need/list", false);
nx.gui.setActive(_node, "need/free", true);
nx.gui.setActive(_node, "freeCD", false);
return ret;
}
nx.gui.setActive(_node, "need/list", true);
nx.gui.setActive(_node, "need/free", false);
// 货币刷新
var tinfo = gitemdata(bid);
nx.bridge.setIcon(_node, "need/list/icon", tinfo.icon);
nx.gui.setString(_node, "need/list/num", need);
// 免费倒计时
nx.gui.setActive(_node, "freeCD", _freeDt > 0);
return ret;
};
this.nodOps.active = true;
var once = nx.gui.find(this.nodOps, "once");
var ten = nx.gui.find(this.nodOps, "ten");
var dtFree = times.free_time;
this.onceArgs = autoOp(once, 1, dtFree, cfgs.loss_item_once, cfgs.loss_gold_once, cfgs.gain_once);
this.tenArgs = autoOp(ten, 10, -1, cfgs.loss_item_ten, cfgs.loss_gold_ten, cfgs.gain_ten);
// 免费倒计时
this.setFreeCD(dtFree);
// 活动日期
var secs = base.end_time - client.socket.getTime();
if (!nx.dt.numPositive(secs, false)) {
nx.gui.setActive(this.nodDate, "txt", false);
nx.gui.setActive(this.nodDate, "done", true);
} else {
nx.gui.setActive(this.nodDate, "txt", true);
nx.gui.setActive(this.nodDate, "done", false);
nx.gui.setCdTxt(this.nodDate, "txt", secs);
}
// 保底次数
var txt = nx.text.format("EliteReleaseTimes", times.must_count);
nx.gui.setString(this.nodTarget, "times/txt", txt);
// 免费次数
var total = DATA.data_const.diamond_times.val || 20;
nx.gui.setString(this.nodGTimes, "times", times.gold_time + "/" + total);
},
// 更新当前货币
updateCoin: function updateCoin() {
var BC = BackPackController.getInstance();
var count = BC.getModel().getBackPackItemNumByBid(this.costId);
return count;
},
// 免费倒计时
setFreeCD: function setFreeCD(_dtFree) {
this.unscheduleAllCallbacks();
if (!nx.dt.numPositive(_dtFree, false)) {
return;
}
var self = this;
var node = nx.gui.find(this.nodOps, "once/freeCD");
var tick = function tick() {
var interval = Utils.getTimeInterval(_dtFree);
if (interval <= 0) {
self.unscheduleAllCallbacks();
nx.gui.setString(node, "", "");
return;
}
var time = Utils.changeIntevalToDate(interval);
var txt = time.H + ":" + time.M + ":" + time.S;
nx.gui.setString(node, "", nx.text.format("FreeCD", txt));
};
this.schedule(tick, 1, cc.macro.REPEAT_FOREVER);
tick();
},
// 点击单次召唤
onTouchOnce: function onTouchOnce(_ret) {
// 关闭召唤动画界面
if (_ret == false) {
nx.bridge.summonAnimation.doStop();
return;
}
this.onceArgs.txt = "SummonOnce";
this.onceArgs.cb = this.onTouchOnce.bind(this);
this.doSummon(1, this.onceArgs);
},
// 点击十次召唤
onTouchTen: function onTouchTen(_ret) {
// 关闭召唤动画界面
if (_ret == false) {
nx.bridge.summonAnimation.doStop();
return;
}
this.tenArgs.txt = "SummonTen";
this.tenArgs.cb = this.onTouchTen.bind(this);
this.doSummon(10, this.tenArgs);
},
// 召唤请求
doSummon: function doSummon(_times, _args) {
// 容量检查
if (!this.checkVolume(_times)) {
nx.tbox("PartnerBagFull");
nx.bridge.jumper.jump2Window(FID.Recycle);
return;
}
// 不够召唤处理
if (!_args.enough) {
// 道具不足
if (_args.type == SCRT.Item) {
nx.tbox("SummonItemNotEnough");
return;
}
// 替代不足
if (_args.type == SCRT.Diamond) {
var good_res_path = "3";
var need_num = _args.exc[1];
var hvae_num = RoleController.getInstance().getRoleVo().gold;
// let val_str = Utils.getItemConfig( _args.excInfo[ 0 ] ).name
// let val_num = _args.excInfo[ 1 ];
// let call_num = _times;
if (hvae_num < need_num) {
var self = this;
var str = nx.text.format("elfin_hatch_unlock_6", nx.text.getKey("Dia"));
str, ['cancel', 'GotoCharge'], function (_key, _box) {
_box.close();
if (_key == "GotoCharge") {
// this.reqSummon( _args.type, _times, _args );
// nx.bridge.jumper.jump2Window( FID.Charge );
self.onTouchGift();
}
};
return;
}
this.reqSummon(_args.type, _times, _args);
// let buy_ori = nx.text.format( "tip_diamondConsume", String( good_res_path ), need_num, hvae_num );
// // let get_ori = nx.text.format( "tip_buyDesc", val_num, val_str, call_num );
// // let des_str = buy_ori + get_ori;
// nx.mbox( buy_ori, [ 'cancel', 'confirm' ], ( _key, _box ) => {
// _box.close();
// if( _key == "confirm" ) {
// this.reqSummon( _args.type, _times, _args );
// }
// } );
}
return;
}
// 召唤
this.reqSummon(_args.type, _times, _args);
},
// 召唤
reqSummon: function reqSummon(_type, _times, _args) {
var self = this;
var SC = EliteMod.getInstance();
SC.reqSummon(_times, _type, function (_ret, _data) {
// 失败
if (!_ret) {
nx.tbox(_data);
return;
}
// 判空
if (nx.dt.arrEmpty(_data.partner_bids)) {
nx.warn("$Summon:空召唤跳过!");
return;
}
// 动画
nx.bridge.summonAnimation.doStart();
nx.bridge.summonAnimation.setResult(_data, _args, function () {});
});
},
// 背包容量检查
checkVolume: function checkVolume(_count) {
var HC = HeroController.getInstance();
var HM = HC.getModel();
// 背包容量判断
var bagInfo = HM.getHeroMaxCount();
var remains = bagInfo.max_count - bagInfo.have_coutn;
return _count <= remains;
},
// 点击切换心愿目标
onTouchChangeTarget: function onTouchChangeTarget(_key) {
var model = EliteMod.getInstance();
var base = model ? model.vget("eliteBase") : null;
if (nx.dt.objEmpty(base)) {
return;
}
var args = {
cur: base.lucky_bid,
camp_id: base.camp_id
};
// 选择回调
args.cb = function (_bid) {
model.reqTarget(_bid);
};
nx.bridge.createPanel("WndActEliteSelector", args);
},
// 点击说明
onTouchRule: function onTouchRule() {
// 召唤配置
var DATA = game.configs.recruit_holiday_lucky_data;
var camp = DATA.data_desc["1"];
var params = {
desc: camp.desc,
rates: []
};
var pros = DATA.data_probability["10001"];
for (var i in pros) {
var t = pros[i];
params.rates.push([t.name, t.probability]);
}
nx.bridge.createPanel("WndSummonRateShow", params);
},
// 积分商城
onTouchScoreShop: function onTouchScoreShop() {
MALL.getInstance().openMallPanel(true, [MallConst.MallType.SummonShop, 55]);
},
// 点击助力奖励
onTouchGift: function onTouchGift() {
var campId = this.data ? this.data.camp_id : 0;
var DATA = game.configs.recruit_holiday_lucky_data;
var info = DATA.data_action[campId];
if (info && this.actRoot && nx.dt.numPositive(info.jump, false)) {
this.actRoot.jumpToMenu(info.jump);
}
}
});
cc._RF.pop();