Files
fc/dev/project/library/imports/88/88239ad4-a5ae-44ef-8404-d505686d416b.js
2026-05-24 10:21:26 +08:00

298 lines
8.2 KiB
JavaScript

"use strict";
cc._RF.push(module, '88239rUpa5E74QE1QVobUFr', 'library.mod');
// Scripts/mod/home/library/library.mod.js
"use strict";
/******************************************************************
*
* 图书馆模块
*
******************************************************************/
var BridgeController = require("bridge.controller");
var LibraryModel = cc.Class({
"extends": BridgeController,
// 注册协议接受事件
registerProtocals: function registerProtocals() {
this.RegisterProtocal(11021, this.handle11021.bind(this)); // 图书馆信息
this.RegisterProtocal(11022, this.handle11022.bind(this)); // 领取奖励
this.RegisterProtocal(11023, this.handle11023.bind(this)); // 更新推送
},
// 从服务器初始化数据
reqBaseFromServer: function reqBaseFromServer(_cb) {
var _this = this;
// 配置加载
var cfgs = ["gallery_data"];
this.loadConfigs(cfgs, function (_ret, _data) {
_this.parseConfigs();
_this.buildTipsView();
_this.reqBaseData(_cb);
});
},
// 请求图书馆信息
reqBaseData: function reqBaseData(_cb) {
this.SendProtocal(11021, {}, _cb);
},
// 图书馆信息
handle11021: function handle11021(_data) {
if (!_data || nx.dt.arrEmpty(_data.partner_library)) {
return;
}
// 遍历更新奖励状态
for (var i = 0; i < _data.partner_library.length; ++i) {
var data = _data.partner_library[i];
var group = this.groups[data.group];
if (!group) {
nx.error("\u56FE\u9274\u7EC4" + data.group + "\u7F3A\u5931!");
continue;
}
group.statu = data.statu;
for (var p = 0; p < group.partners.length; ++p) {
var partner = group.partners[p];
var st = 0;
for (var idx in data.partner_collect) {
var tp = data.partner_collect[idx];
if (tp.partner_bid == partner.id) {
st = tp.statu;
break;
}
}
partner.statu = st;
}
}
// 刷新全提示
this.freshTipsView();
},
// 领取单收集奖励
reqPartnerReward: function reqPartnerReward(_pid, _cb) {
this.SendProtocal(11022, {
id: _pid,
type: 0
}, _cb);
},
// 领取全收集奖励
reqGroupReward: function reqGroupReward(_gid, _cb) {
this.SendProtocal(11022, {
id: _gid,
type: 1
}, _cb);
},
// 领取奖励结果
handle11022: function handle11022(_data) {},
// 更新推送
handle11023: function handle11023(_data) {
if (!_data || nx.dt.arrEmpty(_data.library_info)) {
return;
}
for (var i = 0; i < _data.library_info.length; ++i) {
var ifo = _data.library_info[i];
var group = this.groups[ifo.group_id];
if (!group) {
nx.error("\u56FE\u9274\u7EC4\u66F4\u65B0\u63A8\u9001:\u7EC4" + ifo.group_id + "\u7F3A\u5931!");
continue;
}
var tag = "" + Math.floor(parseInt(ifo.group_id) / 1000);
var key = "home.library.tag" + tag + "." + ifo.group_id;
// 大奖更新
if (!nx.dt.numPositive(ifo.partner_bid, false)) {
group.statu = ifo.statu;
nx.mTip.openTip(key + ".reward", group.statu == 1);
continue;
}
// 小奖更新
var ok = false;
for (var idx in group.partners) {
var pt = group.partners[idx];
if (pt && pt.id == ifo.partner_bid) {
pt.statu = ifo.statu;
nx.mTip.openTip(key + "." + pt.id, pt.statu == 1);
ok = true;
break;
}
}
if (!ok) {
nx.error("\u56FE\u9274\u7EC4\u66F4\u65B0\u63A8\u9001:\u89D2\u8272" + ifo.partner_bid + "\u7F3A\u5931!");
}
}
},
// 查询指定角色
queryPartner: function queryPartner(_bid) {
for (var id in this.groups) {
var lst = this.groups[id].partners;
for (var i = 0; i < lst.length; ++i) {
var pt = lst[i];
if (pt && pt.id == _bid) {
return pt;
}
}
}
},
// 是否收集到指定角色
havePartner: function havePartner(_bid) {
var partner = this.queryPartner(_bid);
return partner ? partner.statu != 0 : false;
},
// ============================================================
// 配置相关
// ============================================================
// 配置解析
parseConfigs: function parseConfigs() {
var DATA = game.configs.gallery_data;
if (nx.dt.objEmpty(DATA)) {
nx.error("图书馆配置缺失!");
return;
}
this.tags = {};
this.groups = {};
// 小组统计
var self = this;
var degroup = function degroup(_tag, _data) {
// 世界观
if (_tag == "6") {
var tmp = DATA.data_world_outlook_data[_data.id];
self.groups["" + _data.id] = {
tag: _tag,
id: _data.id,
name: _data.label_name,
content: tmp.content,
photo: tmp.pic
};
return;
}
// 普通
var rew = DATA.data_group_reward_data[_data.id];
self.groups["" + _data.id] = {
tag: _tag,
id: _data.id,
name: _data.label_name,
reward: rew.reward,
reward_bg: rew.bg,
reward_desc: rew.desc,
partners: [],
statu: 0 // 0-未获得, 1-已获得, 2-已领取
};
};
// 大类统计
for (var id in DATA.data_label_data) {
var ifo = DATA.data_label_data[id];
var tag = "" + Math.floor(parseInt(id) / 1000);
if (nx.dt.objEmpty(this.tags[tag])) {
this.tags[tag] = {
name: ifo.big_label_name,
subs: []
};
}
this.tags[tag].subs.push({
tag: tag,
id: id,
name: ifo.label_name
});
degroup(tag, ifo);
}
// 角色归类
var partners = DATA.data_partner_data;
for (var _id in partners) {
var _ifo = nx.dt.objClone(partners[_id]);
_ifo.statu = 0; // 0-未集齐, 1-已集齐, 2-已领取
this.groups[_ifo.group].partners.push(_ifo);
}
},
// 获取指定伙伴所在推荐阵容
queryRecommondForms: function queryRecommondForms(_bid) {
var DATA = game.configs.gallery_data;
if (nx.dt.objEmpty(DATA) || nx.dt.objEmpty(DATA.data_recommond)) {
nx.error("推荐阵容配置缺失!");
return [];
}
var forms = [];
for (var id in DATA.data_recommond) {
var form = DATA.data_recommond[id];
if (form && nx.dt.arrMember(form.camp, _bid)) {
forms.push(form);
}
}
return forms;
},
// ============================================================
// 红点提示
// ============================================================
// 组建红点结构
buildTipsView: function buildTipsView() {
var _this2 = this;
var self = this;
var tree = {
key: "home.library",
sub: {}
};
// 大类.小类.角色id
var _loop = function _loop() {
var tmp = {
key: tree.key + "." + ("tag" + tag),
sub: {}
};
_this2.tags[tag].subs.forEach(function (_t) {
var stmp = {
key: tmp.key + "." + _t.id,
sub: {
reward: {
key: tmp.key + "." + _t.id + ".reward"
}
}
};
var group = self.groups[_t.id];
if (group && nx.dt.arrNEmpty(group.partners)) {
group.partners.forEach(function (_p) {
stmp.sub["" + _p.id] = {
key: stmp.key + "." + _p.id
};
});
}
tmp.sub[_t.id] = stmp;
});
tree.sub["tag" + tag] = tmp;
};
for (var tag in this.tags) {
_loop();
}
// 提示结构重构
nx.mTip.subAppend("home", "library", tree);
return tree;
},
// 刷新全提示
freshTipsView: function freshTipsView() {
var fresh = function fresh(_group) {
// 总奖励
var key = "home.library.tag" + _group.tag + "." + _group.id;
nx.mTip.openTip(key + ".reward", _group.statu == 1);
// 子奖励
if (nx.dt.arrNEmpty(_group.partners)) {
for (var i = 0; i < _group.partners.length; ++i) {
var partner = _group.partners[i];
var k2 = key + "." + partner.id;
nx.mTip.openTip(k2, partner.statu == 1);
}
}
};
for (var id in this.groups) {
fresh(this.groups[id]);
}
}
});
module.exports = LibraryModel;
cc._RF.pop();