Files
fc/dev/project/library/imports/9b/9b7c9773-e984-41a8-a45d-6decd68b2c88.js
T
2026-05-24 10:21:26 +08:00

396 lines
11 KiB
JavaScript

"use strict";
cc._RF.push(module, '9b7c9dz6YRBqKRdbezWiyyI', 'cmp.summon.standard');
// Scripts/mod/summon/standard/cmp.summon.standard.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 RoleController = require("role_controller");
var BackPackController = require("backpack_controller");
var BridgeItemBinder = require("bridge.binder.item.icon.count");
var FID = require("bridge.function.ids");
var SCRK = SummonDefine.Recruit_Key;
var SCST = SummonDefine.Summon_Type;
var SCRT = SummonDefine.Status;
var EmptyBG = "";
cc.Class({
"extends": MenuPage,
properties: {
sumId: {
"default": 0
},
nodOps: {
"default": null,
type: cc.Node
},
nodCoin: {
"default": null,
type: BridgeItemBinder
}
},
// 载入
onLoad: function onLoad() {
this._super();
this.bindId(this.sumId);
},
// 显示
onEnable: function onEnable() {
// 事件监听
this.bindGEvent(SummonDefine.UpdateSummonDataEvent, this.updateSummonData.bind(this));
// 主动更新
this.updateSummonData();
},
// 关闭
onDisable: function onDisable() {
this.setFreeCD();
this.unbindGEvents();
},
// 置空
setEmpty: function setEmpty() {
// nx.gui.setSpriteFrame( this, "bg", EmptyBG );
this.costId = 0;
this.setFreeCD();
this.nodCoin.active = false;
this.nodOps.active = false;
},
// 设置召唤库编号
bindId: function bindId(_id) {
this.sumId = _id;
// 召唤配置
var DATA = game.configs.recruit_data.data_partnersummon_data;
var info = DATA ? DATA[_id] : null;
if (nx.dt.objEmpty(info)) {
nx.error("无效召唤配置:", _id);
this.setEmpty();
return false;
}
// 背景图
// let path = cc.path.join( "resDB/bigs", info.call_bg );
// nx.gui.setSpriteFrame( this, "bg", path );
// // 看板娘
// path = cc.path.join( "resDB/bigs", info.card_bg_res );
// nx.gui.setSpriteFrame( this, "panel/role", path );
// 广告语
var path = cc.path.join("locals", nx.getLocLanguage(), "images/summon", info.word_art);
nx.gui.setSpriteFrame(this, "panel/word", path);
// 货币更新
var tid = 0;
if (nx.dt.arrNEmpty(info.item_once) && nx.dt.arrNEmpty(info.item_once[0])) {
tid = info.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);
}
return true;
},
// 召唤数据刷新
updateSummonData: function updateSummonData() {
var _this = this;
var SC = SummonMod.getInstance();
var SM = SC.getModel();
var data = SM.getSummonGroupData();
// 数据无效,重新请求
if (nx.dt.arrEmpty(data)) {
SC.send23200(function (_data) {
_this.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);
},
// 更新数据
updateData: function updateData(_data) {
// 置空
if (nx.dt.objEmpty(_data)) {
this.setEmpty();
return;
}
// 参数配置缺失
var rdata = _data.recruit_data;
var cfgs = _data.config_data;
if (nx.dt.objEmpty(rdata) || nx.dt.objEmpty(cfgs)) {
nx.error("召唤更新失败,配置缺失!");
this.setEmpty();
return;
}
var BC = BackPackController.getInstance();
var BM = BC.getModel();
// 更新当前货币
// 消耗修正
var count = this.updateCoin();
var autoOp = function autoOp(_node, _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)) {
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 = this.evalFreeOnce(rdata.draw_list);
this.onceArgs = autoOp(once, dtFree, cfgs.item_once, cfgs.exchange_once, cfgs.exchange_once_gain);
this.tenArgs = autoOp(ten, -1, cfgs.item_five, cfgs.exchange_five, cfgs.exchange_five_gain);
// 免费倒计时
this.setFreeCD(dtFree);
},
// 更新当前货币
updateCoin: function updateCoin() {
// 友情点
var count = 0;
if (this.sumId == SCST.Friend) {
var RC = RoleController.getInstance();
var role = RC.getRoleVo();
if (role) {
count = role.friend_point;
}
} else {
var BC = BackPackController.getInstance();
count = BC.getModel().getBackPackItemNumByBid(this.costId);
}
// nx.gui.setString( this.nodCoin, "txt", nx.dt.shortCount( count ) );
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();
},
// 单次免费评估
evalFreeOnce: function evalFreeOnce(_draws) {
var dtFree = -1; // -1不免费 0免费 >0下次时间
if (nx.dt.arrEmpty(_draws)) {
return dtFree;
}
var ifo = null;
for (var i in _draws) {
if (_draws[i] && _draws[i].times == 1) {
ifo = _draws[i];
break;
}
}
if (ifo && nx.dt.arrNEmpty(ifo.kv_list)) {
for (var k in ifo.kv_list) {
var kt = ifo.kv_list[k];
if (!kt || !nx.dt.numPositive(kt.val, false)) {
continue;
}
// 有免费次数
if (kt.key == SCRK.Free_Count) {
dtFree = 0;
break;
}
// 下次免费时间
if (kt.key == SCRK.Free_Time) {
dtFree = kt.val;
}
}
}
return dtFree;
},
// 点击货币
onTouchCoin: function onTouchCoin() {},
// 点击单次召唤
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) {
var _this2 = this;
// 容量检查
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;
var val_str = Utils.getItemConfig(_args.excInfo[0]).name;
var val_num = _args.excInfo[1];
var call_num = _times;
var buy_ori = nx.text.format("tip_diamondConsume", good_res_path, need_num, hvae_num);
var get_ori = nx.text.format("tip_buyDesc", val_num, val_str, call_num);
var des_str = buy_ori + get_ori;
nx.mbox(des_str, ['cancel', 'confirm'], function (_key, _box) {
_box.close();
if (_key == "confirm") {
_this2.reqSummon(_args.type, _times, _args);
}
});
}
return;
}
// 召唤
this.reqSummon(_args.type, _times, _args);
},
// 召唤
reqSummon: function reqSummon(_type, _times, _args) {
var self = this;
var SC = SummonMod.getInstance();
SC.send23201(this.sumId, _times, _type, 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;
}
});
cc._RF.pop();