Files
fc/dev/project/library/imports/9b/9b145162-f94f-4df6-a084-9ad9ea67461d.js
2026-05-24 10:21:26 +08:00

396 lines
10 KiB
JavaScript

"use strict";
cc._RF.push(module, '9b145Fi+U9N9qCEmtnqZ0Yd', 'cmp.summon.infinite');
// Scripts/mod/summon/infinite/cmp.summon.infinite.js
"use strict";
/******************************************************************
* Copyright(C) 2019 - 2020 Nx Studio
*
* 常规召唤页
*
* 2018.05.18
******************************************************************/
var MenuPage = require("cmp.com.menu.page");
var SummonDefine = require("summon.define");
var SummonMod = require("summon.mod");
var HeroController = require("hero_controller");
var BackPackController = require("backpack_controller");
var BridgeItemBinder = require("bridge.binder.item.icon.count");
var SCRT = SummonDefine.Status;
var FID = require("bridge.function.ids");
var EmptyBG = "";
cc.Class({
"extends": MenuPage,
properties: {
nodOps: {
"default": null,
type: cc.Node
},
nodCoin: {
"default": null,
type: BridgeItemBinder
},
labTimes: {
"default": null,
type: cc.Node
}
},
// 载入
onLoad: function onLoad() {
this._super();
this.setEmpty();
var cmp = nx.gui.getComponent(this, "sp", "nx.fx.spine");
if (cmp) {
cmp.load("resDB/models/H30031/show", function (_e) {
if (!_e) {
cmp.action("action1", true);
} else {
cmp.stop();
}
});
}
},
// 显示
onEnable: function onEnable() {
var _this = this;
var SC = SummonMod.getInstance();
SC.reqInfiniteData(function (_ret, _data) {
if (!_ret) {
_this.setEmpty();
nx.tbox(_data);
return;
}
_this.data = nx.dt.objClone(_data);
_this.updateBase(_data);
_this.updateData(_data);
});
// 视图监听
this.vbind([["INFTimes", this.onRemainTimes.bind(this)], ["INFCurrent", this.onCurrentChanged.bind(this)]]);
},
// 关闭
onDisable: function onDisable() {
// 视图监听解除
this.vunbind();
},
// 置空
setEmpty: function setEmpty() {
// nx.gui.setSpriteFrame( this, "bg", EmptyBG );
this.costId = 0;
this.nodCoin.active = false;
this.nodOps.active = false;
},
// 召唤数据刷新
updateSummonData: function updateSummonData() {
var _this2 = this;
var SC = SummonMod.getInstance();
var SM = SC.getModel();
var data = SM.getSummonGroupData();
// 数据无效,重新请求
if (nx.dt.arrEmpty(data)) {
SC.send23200(function (_data) {
_this2.updateSummonData();
});
return;
}
// 获取当前页数据
var info = null;
for (var i in data) {
var t = data[i];
if (t && t.group_id == this.sumId) {
info = t;
break;
}
}
// 更新
this.updateData(info);
},
// 基础更新
updateBase: function updateBase(_data) {
// 无效配置
if (nx.dt.objEmpty(_data) || !nx.dt.numPositive(_data.camp_id, false)) {
this.setEmpty();
return;
}
// 召唤配置
var DATA = game.configs.infinite_ten_recruit_data;
var camp = DATA.data_action[_data.camp_id];
var cfgs = DATA.data_summon[camp.group_id];
if (nx.dt.objEmpty(cfgs)) {
nx.error("无效召唤配置:", _data.camp_id);
this.setEmpty();
return;
}
// 背景图
// let path = cc.path.join( "resDB/bigs", cfgs.call_bg );
// nx.gui.setSpriteFrame( this, "bg", path );
// 看板娘
// let path = cc.path.join( "resDB/bigs", cfgs.call_bg );
// nx.gui.setSpriteFrame( this, "panel/role", path );
// 广告语
var path = cc.path.join("locals", nx.getLocLanguage(), "images/summon", cfgs.word_art);
nx.gui.setSpriteFrame(this, "panel/word", path);
// 货币更新
var tid = 0;
if (nx.dt.arrNEmpty(cfgs.loss_item_ten) && nx.dt.arrNEmpty(cfgs.loss_item_ten[0])) {
tid = cfgs.loss_item_ten[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);
}
},
// 更新数据
updateData: function updateData(_data) {
// 置空
if (nx.dt.objEmpty(_data)) {
this.setEmpty();
return;
}
// 召唤配置
var DATA = game.configs.infinite_ten_recruit_data;
var camp = DATA.data_action[_data.camp_id];
var cfgs = DATA.data_summon[camp.group_id];
if (nx.dt.objEmpty(cfgs)) {
nx.error("无效召唤配置:", _data.camp_id);
this.setEmpty();
return;
}
// 更新当前货币
// 消耗修正
var count = this.updateCoin();
var autoOp = function autoOp(_node, _item) {
var ret = {
enough: false,
type: SCRT.Item,
item: _item[0] || []
};
// 所需道具不足 && 但是有替代品
var bid = ret.item[0];
var need = ret.item[1];
ret.enough = count >= need;
// 参数补充
ret.bid = bid;
ret.need = need;
// 货币刷新
var tinfo = gitemdata(bid);
nx.bridge.setIcon(_node, "need/list/icon", tinfo.icon);
nx.gui.setString(_node, "need/list/num", need);
return ret;
};
this.nodOps.active = true;
var rec = nx.dt.arrNEmpty(_data.partner_bids);
nx.gui.setActive(this.nodOps, "record", rec);
nx.gui.setActive(this.nodOps, "ten", !rec);
var ten = nx.gui.find(this.nodOps, "ten");
this.tenArgs = autoOp(ten, cfgs.loss_item_ten);
},
// 当前改变
onCurrentChanged: function onCurrentChanged(_lst) {
var empty = nx.dt.arrEmpty(_lst);
nx.gui.setActive(this.nodOps, "record", !empty);
nx.gui.setActive(this.nodOps, "ten", empty);
},
// 更新当前货币
updateCoin: function updateCoin() {
var BC = BackPackController.getInstance();
var count = BC.getModel().getBackPackItemNumByBid(this.costId);
return count;
},
// 点击货币
onTouchCoin: function onTouchCoin() {},
// 点击说明
onTouchRule: function onTouchRule() {
// 召唤配置
var DATA = game.configs.infinite_ten_recruit_data;
var camp = DATA.data_action[this.data.camp_id];
if (nx.dt.objEmpty(camp)) {
nx.error("无效召唤配置:", this.data.camp_id);
return;
}
var params = {
desc: camp.desc,
rates: []
};
var pros = DATA.data_probability[camp.group_id];
for (var i in pros) {
var t = pros[i];
params.rates.push([t.name, t.probability]);
}
nx.bridge.createPanel("WndSummonRateShow", params);
},
// 点击十次召唤
onTouchTen: function onTouchTen() {
this.doSummon(10, this.tenArgs);
},
// 召唤请求
doSummon: function doSummon(_times, _args) {
// 沒有次數了
var times = nx.bridge.vget("INFTimes");
if (times <= 0) {
nx.tbox("SummonTimesNotEnough");
return;
}
// 不够召唤处理
if (!_args.enough) {
nx.tbox("SummonItemNotEnough");
return;
}
// 容量检查
if (!this.checkVolume(_times)) {
nx.tbox("PartnerBagFull");
nx.bridge.jumper.jump2Window(FID.Recycle);
return;
}
var self = this;
var SC = SummonMod.getInstance();
var args = {
op: "infinite",
cb: function cb(_ret) {
if (!_ret) {
self.onTouchTen();
return;
}
nx.mbox("SummonInfinite", ['no', 'yes'], function (_key, _box) {
_box.close();
if (_key == 'yes') {
nx.bridge.summonAnimation.doStop();
SC.reqInfiniteConfirm(0, function (_ok, _data) {
// 发送引导事件
if (nx.bridge.plot) {
nx.bridge.plot.postKey("infinite_done");
}
if (!_ok) {
nx.tbox(_data);
return;
}
self.onEnable();
});
}
});
}
};
SC.reqInfiniteSummon(function (_ok, _data) {
// 失败
if (!_ok) {
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 () {
self.updateSummonData();
});
});
},
// 背包容量检查
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;
},
// 点击上次结果
onTouchRecord: function onTouchRecord() {
var _this3 = this;
// 判空
if (nx.dt.objEmpty(this.data)) {
return;
}
var SC = SummonMod.getInstance();
var self = this;
var args = {
op: "infinite",
cb: function cb(_ret) {
if (!_ret) {
self.onTouchTen();
return;
}
nx.mbox("SummonInfinite", ['no', 'yes'], function (_key, _box) {
_box.close();
if (_key == 'yes') {
nx.bridge.summonAnimation.doStop();
SC.reqInfiniteConfirm(0, function (_ok, _data) {
// 发送引导事件
if (nx.bridge.plot) {
nx.bridge.plot.postKey("infinite_done");
}
if (!_ok) {
nx.tbox(_data);
return;
}
self.onEnable();
});
}
});
}
};
nx.bridge.summonAnimation.jumpToFlipCards({
partner_bids: nx.bridge.vget("INFCurrent")
}, args, function () {
_this3.updateSummonData();
});
},
// ------------------------------------------------------
// 记录暂存
// ------------------------------------------------------
// 剩余次数
onRemainTimes: function onRemainTimes(_times) {
var times = _times || 0;
// if( times <= 0 ) {
// this.labTimes.active = false;
// return;
// }
// this.labTimes.active = true;
var DATA = game.configs.infinite_ten_recruit_data;
var max = DATA ? DATA.data_const.max_count.val : 0;
nx.gui.setString(this.labTimes, "times", _times + "/" + max);
},
// 打开暂存界面
onTouchSaveRecords: function onTouchSaveRecords() {
nx.bridge.createPanel("WndSummonInfiniteRecord", {
replace: false
});
},
onTouchRecommend: function onTouchRecommend() {
nx.bridge.createPanel("WndPopRecommend");
}
});
cc._RF.pop();