298 lines
8.2 KiB
JavaScript
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(); |